【发布时间】:2011-09-25 17:04:49
【问题描述】:
我正在尝试获取另一个进程命令行(在 WinXP 32 位上)。 我执行以下操作:
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, ProcList.proc_id_as_numbers[i]);
BytesNeeded = sizeof(PROCESS_BASIC_INFORMATION);
ZwQueryInformationProcess(hProcess, ProcessBasicInformation, UserPool, sizeof(PROCESS_BASIC_INFORMATION), &BytesNeeded);
pbi = (PPROCESS_BASIC_INFORMATION)UserPool;
BytesNeeded = sizeof(PEB);
res = ZwReadVirtualMemory(hProcess, pbi->PebBaseAddress, UserPool, sizeof(PEB), &BytesNeeded);
/* zero value returned */
peb = (PPEB)UserPool;
BytesNeeded = sizeof(RTL_USER_PROCESS_PARAMETERS);
res = ZwReadVirtualMemory(hProcess, peb->ProcessParameters, UserPool, sizeof(RTL_USER_PROCESS_PARAMETERS), &BytesNeeded);
ProcParam = (PRTL_USER_PROCESS_PARAMETERS)UserPool;
第一次调用 pbi.UniqueProcessID 后是正确的。 但是在调用 ZwReadVirtualMemory 之后,我得到了我的进程的命令行,而不是请求一个。
我也使用了 ReadProcessMemore 和 NtQueryInformationProcess,但得到了相同的结果。
有人可以帮忙吗?
这里http://forum.sysinternals.com/get-commandline-of-running-processes_topic6510_page1.html 被称为此代码有效。不幸的是,我无权在这个论坛上发帖问自己。
【问题讨论】:
-
也许您在 OpenProcess 调用中的进程 ID 为 0,或者类似的东西?
-
没有。 hProcess 是正确的,我得到的 pbi 也是正确的。
-
可能你自己进程的命令行和其他进程的命令行一样? :-)
-
没有。它不是。我正在尝试从 c++ 程序中查找 javaw 进程。
标签: c++ windows winapi command-line process