做正则匹配的原因,做关键路径的监控 ,提高系统性能,一般吧正则数据放到dat里然后加密起来,然后客户端启动读出来,下发到驱动,保存到驱动链表里面
BOOLEAN IsPatternMatch(PUNICODE_STRING Expression, PUNICODE_STRING Name, BOOLEAN IgnoreCase)//Expression 正则式 Name路径
{
return FsRtlIsNameInExpression(
Expression,
Name,
IgnoreCase,//如果这里设置为TRUE,那么Expression必须是大写的
NULL
);
}
//L"C:\\WINDOWS\\SYSTEM32\\*\\*.SYS"
//L"c:\\Windows\\system32\\122222\\2.sys"
放行条件
内核模式
ExGetPreviousMode=KernelMode
Irp->RequestorMode=KernelMode
本进程
在DeviceloctrlFilter中记录PsGetCurrentProcessId()拿到本进程PID
系统进程
DriverEntry里PsGetCurrentProcessId()拿到系统进程PID
KeGetCurrentIrql()>APC_LEVEl(应用层的都不会大于这个IRQL)
白名单库里的,要考虑调用链
如何放行
hook监控就调用原函数
IRP调用IoSkipCurrentIrpStackLocation(IpIrp)
IoCallDriver()