我正在开发一个简单的驱动程序,以将进程创建通知用户模式!
我搜索了一个很好的例子,但这仅在“ dbgView”中显示结果!

我的问题是检索并从ImageFileName发送:CommandLinePPS_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->ImageFileNamePinfo->CommandLine不包含任何字符串! (Pinfo-> ProcessId和Pinfo-> Create由真实数据填充)

我哪里错了?

{哦,如果我的英语不好,请原谅我}

最佳答案

Pinfo->ImageFileName= CreateInfo->ImageFileName;
Pinfo->CommandLine= CreateInfo->CommandLine;


这些是PUNICODE_STRING类型的变量。并且从文档页面


  保证PS_CREATE_NOTIFY_INFO结构及其指向的结构仅在回调期间有效。如果驱动程序要求在回调后访问这些结构中的任何信息,则CreateProcessNotifyEx例程应复制此信息。


建议您为Pinfo->ImageFileNamePinfo->CommandLine分配新的内存,然后将unicode字符串复制到其中。

否则,您尝试访问的内存可能无效,并且在存在回调之后可能不包含相同的信息。

同样,不要忘记在使用结束后释放内存。

10-06 03:55