我正在开发一个简单的驱动程序,以将进程创建通知用户模式!
我搜索了一个很好的例子,但这仅在“ dbgView”中显示结果!
我的问题是检索并从ImageFileName
发送:CommandLine
和PPS_CREATE_NOTIFY_INFO CreateInfo
。
这是我在CreateProcessNotifyEx
回调旁边的代码:
VOID CreateProcessNotifyEx(
__inout PEPROCESS Process,
__in HANDLE ProcessId,
__in_opt PPS_CREATE_NOTIFY_INFO CreateInfo
)
{ ...
Pinfo->ParentId = CreateInfo->ParentProcessId;
Pinfo->ProcessId = ProcessId;
Pinfo->Create = CreateInfo->CreationStatus;
Pinfo->ImageFileName= CreateInfo->ImageFileName;
Pinfo->CommandLine= CreateInfo->CommandLine;
..
KeSetEvent(ProcessEvent, 0, FALSE);
KeClearEvent(ProcessEvent);
....}
这段代码运行完美,我在用户模式下获得了[b] Pinfo [/ b]结构,但是
Pinfo->ImageFileName
和Pinfo->CommandLine
不包含任何字符串! (Pinfo-> ProcessId和Pinfo-> Create由真实数据填充)我哪里错了?
{哦,如果我的英语不好,请原谅我}
最佳答案
Pinfo->ImageFileName= CreateInfo->ImageFileName;
Pinfo->CommandLine= CreateInfo->CommandLine;
这些是
PUNICODE_STRING
类型的变量。并且从文档页面保证PS_CREATE_NOTIFY_INFO结构及其指向的结构仅在回调期间有效。如果驱动程序要求在回调后访问这些结构中的任何信息,则CreateProcessNotifyEx例程应复制此信息。
建议您为
Pinfo->ImageFileName
和Pinfo->CommandLine
分配新的内存,然后将unicode字符串复制到其中。否则,您尝试访问的内存可能无效,并且在存在回调之后可能不包含相同的信息。
同样,不要忘记在使用结束后释放内存。