我正在开发一个简单的驱动程序来将进程创建通知给用户模式! 我搜索了一个很好的例子,但那只显示结果" 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->按真实数据创建填充)
我哪里错了?
{哦,如果我的英语不好,请原谅我}
答案 0 :(得分:0)
Pinfo->ImageFileName= CreateInfo->ImageFileName;
Pinfo->CommandLine= CreateInfo->CommandLine;
这些是PUNICODE_STRING
类型变量。并从文档页面
PS_CREATE_NOTIFY_INFO结构及其指向的结构保证仅在回调期间有效。如果驱动程序在回调后需要访问这些结构中的任何信息,CreateProcessNotifyEx例程应该复制此信息。
它建议您为Pinfo->ImageFileName
和Pinfo->CommandLine
分配新内存,然后将unicode字符串复制到其中。
否则,您尝试访问的内存可能无效,并且在回调存在后可能不包含相同的信息。
此外,请勿忘记在使用结束后释放内存。