在驱动程序级别检索进程的命令行参数

时间:2012-06-06 14:07:50

标签: windows device-driver

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

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

有谁知道如何检索命令行参数??

提前致谢。

2 个答案:

答案 0 :(得分:4)

在内核模式下没有受支持的方法。实际上,尝试从内核访问用户模式进程信息通常很痛苦。我建议向用户模式服务发出一个请求,然后可以找到该信息并将其传递回内核组件。

但是,有一种无证的方法可以做到这一点。如果您可以获取目标进程的EPROCESS结构的句柄,则可以获得指向其中PEB(进程环境块)结构的指针,该结构随后具有指向{{ 3}}结构,其成员名为CommandLine

示例:

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

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

答案 1 :(得分:3)

带有ProcessBasicInformation枚举的ZwQueryInformationProcess函数。在返回的struct中,指向PEB的一个参数指针是指向Polynonial。 对不起我的格式化,我是用手机写的。 : - )