进程监视CreateProcessNotifyRoutineEx

进程监视CreateProcessNotifyRoutineEx,process,driver,monitoring,Process,Driver,Monitoring,我正在开发一个监控进程创建的驱动程序,我编写了一个简单的代码来实现它。我使用PsSetCreateProcessNotifyRoutineEx。但这不管用!我完全遵循Microsoft帮助 #包括 新界北( 在PDU对象驱动对象中, 在PUNICODE_字符串注册表路径中 ); 无效卸载程序( 在PDU对象驱动对象中 ); VOID CreateProcessNotifyEx( __inout PEPROCESS过程, __在句柄ProcessId中, __在选择PPS中创建通知信息创建信息 )

我正在开发一个监控进程创建的驱动程序,我编写了一个简单的代码来实现它。我使用
PsSetCreateProcessNotifyRoutineEx
。但这不管用!我完全遵循Microsoft帮助

#包括
新界北(
在PDU对象驱动对象中,
在PUNICODE_字符串注册表路径中
);
无效卸载程序(
在PDU对象驱动对象中
);
VOID CreateProcessNotifyEx(
__inout PEPROCESS过程,
__在句柄ProcessId中,
__在选择PPS中创建通知信息创建信息
);
VOID CreateProcessNotifyEx(
__inout PEPROCESS过程,
__在句柄ProcessId中,
__在选择PPS中创建通知信息创建信息
)
{
如果(CreateInfo)
{
如果(CreateInfo->FileOpenNameAvailable==TRUE)
{
DbgPrintEx(
DPFLTR_IHVDU河流ID,
DPFLTR信息级别,
“PID:0x%X(%d)图像名称:%wZ命令行:%wZ\n”,
进程ID,进程ID,
CreateInfo->ImageFileName,
CreateInfo->CommandLine
);
}
}
}
VOID UnloadRoutine(在PDRIVER_对象DriverObject中)
{
PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_RoutineEx)CreateProcessNotifyEx,TRUE);
DbgPrintEx(DPFLTR\U IHVDRIVER\U ID,DPFLTR\U信息级别,“已卸载”);
}
NTSTATUS DriverEntry(在PDRIVER_对象DriverObject中,在PUNICODE_字符串注册表路径中)
{
NTSTATUS status=PsSetCreateProcessNotifyRoutineEx((PCREATE_PROCESS_NOTIFY_RoutineEx)CreateProcessNotifyEx,FALSE);
如果(!NT_成功(状态))
{
DbgPrintEx(DPFLTR\u IHVDRIVER\u ID,DPFLTR\u错误\u级别,“无法访问PsSetCreateProcessNotifyRoutineEx。状态:0x%X\n”,状态);
}
DriverObject->DriverUnload=UnloadRoutine;
DbgPrintEx(DPFLTR\U IHVDRIVER\U ID,DPFLTR\U信息级别,“加载\n”);
返回状态\成功;
}
该驱动器正确加载并运行,但在运行程序(新进程)时,不会发生任何事情,无法注册
PsSetCreateProcessNotifyRoutineEx
,我收到
0xC0000022
错误(访问被拒绝)。


有什么想法吗?

我总是要找到我的答案;)

要传递此问题,只需将此值
LINKER\u FLAGS=/integritycheck
添加到源文件

之前:

TARGETNAME=ProcView
TARGETPATH=.
TARGETTYPE=DRIVER

SOURCES=ProcView.c
现在:

TARGETNAME=ProcView
TARGETPATH=.
TARGETTYPE=DRIVER

SOURCES=ProcView.c
TARGETNAME=ProcView
TARGETPATH=.
TARGETTYPE=DRIVER
LINKER_FLAGS=/integritycheck
SOURCES=ProcView.c