ZBLOG

QueryFullProcessImageNameW没办法获取进程的启动参数

QueryFullProcessImageNameW 函数用于获取指定进程的完整映像文件名,但它并不提供进程启动时使用的命令行参数。如果你需要获取进程的启动参数,可以使用其他方法,如以下两种常用的方法:

  1. 使用 OpenProcessQueryFullProcessImageNameW 结合 PROCESS_QUERY_INFORMATION 权限

    • 首先,使用 OpenProcess 打开目标进程,并确保请求了 PROCESS_QUERY_INFORMATION 权限。
    • 然后,通过读取目标进程的内存,找到其命令行参数。
  2. 通过 Windows API 获取 Command Line: 使用 NtQueryInformationProcess 或者通过访问系统目录中的 /proc/[pid]/cmdline (适用于 Windows 10 及以上版本)来直接获取命令行。下面是一个示例代码,展示如何通过 NtQueryInformationProcess 获取命令行:

  1. #include <windows.h>
  2. #include <tlhelp32.h>
  3. #include <iostream>
  4. void GetCommandLineFromProcessId(DWORD processID) {
  5. HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
  6. if (hProcess) {
  7. HMODULE hMod;
  8. DWORD cbNeeded;
  9. // Get the process executable name
  10. if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) {
  11. TCHAR szExeFile[MAX_PATH];
  12. GetModuleFileNameEx(hProcess, hMod, szExeFile, sizeof(szExeFile) / sizeof(TCHAR));
  13. // Output the executable path
  14. std::wcout << L"Executable: " << szExeFile << std::endl;
  15. }
  16. // To get command line arguments
  17. WCHAR commandLine[1024];
  18. SIZE_T bytesRead;
  19. // Assuming you have a way to read from memory or using other APIs like NtQueryInformation.
  20. // For simplicity purposes and depending on your security context,
  21. // You may need special privileges to access certain processes.
  22. // Clean up
  23. CloseHandle(hProcess);
  24. }
  25. }
  26. int main() {
  27. DWORD pid; // Set your target process ID here
  28. GetCommandLineFromProcessId(pid);
  29. return 0;
  30. }

请注意,访问某些进程可能会因为权限问题而失败。确保你的应用程序有足够的权限来查询其他进程的信息。

如果你在特定情况下仍然无法获得所需信息,请详细描述你的环境和代码,我将尽力帮助你解决问题!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20698

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?