我试图找出如何做到这一点,我目前正在使用 CreateToolHelp32SnapShot 来获取正在运行的进程列表,并且我已经获得了当前正在运行的可执行文件的 FilePaths,但我需要能够找出使用了哪些命令行选项来启动该过程。
我知道它是可能的,因为您可以在 Process Explorer 上看到它,我尝试找到旧 Process Explorer 的源代码但没有运气:(
我试图找出如何做到这一点,我目前正在使用 CreateToolHelp32SnapShot 来获取正在运行的进程列表,并且我已经获得了当前正在运行的可执行文件的 FilePaths,但我需要能够找出使用了哪些命令行选项来启动该过程。
我知道它是可能的,因为您可以在 Process Explorer 上看到它,我尝试找到旧 Process Explorer 的源代码但没有运气:(
无法以可靠的方式获取正在运行的进程的命令行。很可能通过更改存储这些命令的内存来更改正在运行的进程的命令行。
Raymond Chen 最近就这个主题写了一篇很好的文章,详细说明了为什么它不可靠。
检查NtQueryInformationProcess和ReadProcessMemory win API 调用是否能满足您的需求。没有简单的例子,所以在这里查看源代码:Get Process Info with NtQueryInformationProcess
获取此数据的另一种方法是通过 WMI,就像这样:
SELECT CommandLine FROM Win32_Process WHERE ProcessId = ???
更多信息:Win32_Process 类
几乎立即发生的一种可能性是将线程注入目标进程 ( CreateRemoteThread
),并进行调用GetCommandLine
。
IIRC 命令行参数存储在进程环境中 - 如果您可以访问它,您也可以阅读它们。