3

您好,我正在编写一个微型过滤器驱动程序,用于拦截来自某个进程的所有 irp 数据包,例如 a.exe 。

因此,在驱动程序代码中,可以通过对启动进程的命令行参数进行检查来完成。

有谁知道我怎样才能检索命令行参数?

提前致谢 。

4

2 回答 2

4

在内核模式中没有支持的方法来执行此操作。事实上,试图从内核访问用户模式进程信息通常是一种痛苦。我建议向用户模式服务发起请求,然后该服务可以找到该信息并将其传递回您的内核组件。

但是,有一种未记录的方法可以做到这一点。如果您可以获取EPROCESS目标进程的结构的句柄,则可以获取指向其中的PEB(进程环境块)结构的指针,然后该结构有一个指向RTL_USER_PROCESS_PARAMETERS结构的指针,该结构有一个名为CommandLine.

例子:

UNICODE_STRING* commandLine = epProcess->Peb->ProcessParameters->CommandLine;

这样做的缺点是它EPROCESS几乎完全不透明并且PEB也是半透明的,这意味着它可能会在未来的 Windows 版本中发生变化。我当然不提倡在生产代码中尝试这个。

于 2012-06-06T14:17:23.360 回答
3

尝试使用带有 PROCESSINFOCLASS 参数的NtQueryInformationProcessZwQueryInformationProcess函数作为 ProcessBasicInformation。输出参数 ProcessInformation 将是 PROCESS_BASIC_INFORMATION 类型的结构。正如多项式所提到的,此结构有一个指向进程的PEB 结构的指针,其中包含您在其 ProcessParameters 字段中查找的信息。

于 2012-06-06T14:26:10.383 回答