您好,我正在写一个微过滤驱动程序拦截所有的irp数据包从一个特定的进程说a.exe。
因此,在驱动程序代码中,可以通过对启动进程的命令行参数进行检查来完成。
有谁知道我如何检索命令行参数?
提前致谢 。
在内核模式下没有支持的方法。 实际上,试图从内核访问用户模式的进程信息是一件痛苦的事情。 我建议向用户模式服务发起一个请求,然后可以找到这些信息并将其传递回内核组件。
但是,有一个无证的方法来做到这一点。 如果您可以获得目标进程的EPROCESS
结构的句柄,则可以获得指向其中的PEB
(进程环境块)结构的指针,该指针指向RTL_USER_PROCESS_PARAMETERS
结构,该结构具有名为CommandLine
的成员。
例:
UNICODE_STRING* commandLine = epProcess->Peb->ProcessParameters->CommandLine;
不利之处在于, EPROCESS
几乎完全不透明,而PEB
也是半透明的,这意味着在未来的Windows版本中它可能会发生变化。 我当然不会主张在生产代码中尝试这个。
带有ProcessBasicInformation枚举的ZwQueryInformationProcess函数 在返回的结构中是一个指向PEB的指针,指向Polynonial。 对不起,我从手机上写下来。 🙂