任务管理器如何获取进程的命令行可执行路径
How does Task Manager gets command line executable path for processes?
我正在查看任务管理器的进程列表,并启用了查看>>命令行选择列以查看包括exe路径和命令行参数。
我试图使用GetModuleFileNameEx
让同样的事情工作,但存在一些问题;首先,结果不包含任何参数,并且对于某些过程也失败,如WinRar.exe或Opera.exe。
我知道任务管理器使用 WMI 来获取其中一些数据(我尝试关闭服务,但对于相同的进程,它就像我的脚本一样失败),但我想知道,是什么让进程的路径"无法获取"?
任务管理器使用进程的PEB
结构来访问命令行参数(以及其他内容)。 如果您具有目标进程的HANDLE
(并且有足够的权限访问其内存),则可以使用 NtQueryInformationProcess()
函数(将其 ProcessInformationClass
参数设置为 ProcessBasicInformation
以接收PROCESS_BASIC_INFORMATION
结构)访问PEB
,以获取目标进程地址空间内PEB
的内存地址(以及其他内容)。 然后,可以使用ReadProcessMemory()
根据需要将PEB
的内容读入应用的地址空间。 命令行参数是使用 PEB::ProcessParameters
字段定位的,该字段是指向 RTL_USER_PROCESS_PARAMETERS
结构的指针,其中包含 UNICODE_STRING
类型的CommandLine
字段。
如果您是访问 64 位进程的 PEB 的 32 位进程,事情会变得更加棘手,反之亦然。 您必须考虑指针的不同大小(32 位为 4,64 位为 8),这会影响结构大小和偏移量。
但这就是它的要点。
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何从命令行使用 cmake 为有根的安卓设备制作可执行文件?
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 命令行参数执行C 程序
- 从命令提示符使用 MSBuild 调试简单的C++可执行文件
- 在 Windows 命令行中运行.exe在使用 2 种相同方式执行时会产生不同的输出
- 应使用 CMake install 命令将可执行资源文件安装到何处?
- 使命令不产生可执行文件
- 如何从命令行运行可执行文件时启用系统错误消息
- 为什么文件命令声明可执行文件包含"debug_info"
- 具有读写功能的 UNIX 管道系统可执行"ls -la"命令
- 使用 php 将带有命令行可执行文件路径的参数传递
- 通过Linux命令行执行时,可执行文件运行正常 - 调用C System()命令时运行时错误
- 使用系统命令调用可执行文件
- 任务管理器如何获取进程的命令行可执行路径
- 输入/输出从命令行可执行文件重定向到文件
- 我如何运行GDB,在命令行中输入文本并查看可执行文件如何处理这些条目
- Xcode 4中的命令行工具构建版本,在构建可执行文件中包含图像存在问题
- 更改可执行文件的图标,而无需重新编译或重新链接,并使用 Microsoft SDK 中的命令行工具