Process Explorer如何枚举XP Guest帐户中的所有进程名称?

时间:2011-01-15 17:43:49

标签: c++ windows winapi vb6 process

我正在尝试枚举所有正在运行的进程EXE名称,并且在XP Guest帐户上尝试此操作时发现了绊倒。我可以使用EnumProcesses枚举所有进程ID,但是当我使用PROCESS_QUERY_INFORMATION或PROCESS_VM_READ尝试OpenProcess时,该函数将失败。

我在XP Guest帐户下启动了Process Explorer,它能够枚举所有进程名称(尽管如此,来自Guest用户空间之外的进程的大多数其他信息都不存在)。

所以,我的问题是,我如何复制Process Explorer魔术来获取在Guest帐户用户空间之外运行的服务和其他进程的进程名称?

4 个答案:

答案 0 :(得分:3)

我认为Process Explorer使用带有参数SystemProcessInformation的{​​{3}}来获取进程列表。有关代码示例,请参阅NtQuerySystemInformation。此外,函数my old answer将用于获取其他信息。

顺便说一句,如果您在NtQueryInformationProcess下启动Process Explorer(菜单“Profile”/“Start Profiling”或 F7 ),那么您将看到Process Explorer真正使用的所有函数NTDLL.DLL。您可以看到真正使用Dependency WalkerNtQuerySystemInformation

答案 1 :(得分:1)

NtQuerySystemInformation几乎没有记录,“在未来版本的Windows中可能会被更改或不可用”CreateToolhelp32Snapshot已完整记录,应该为您提供图像名称。

答案 2 :(得分:0)

当进程启动时,会为其分配一组基本访问权限。某些API调用需要其他权限才能成功完成。具体而言,OpenProcess在某些情况下可能需要SeDebugPrivilege权限。您可以在此处找到有关如何修改流程令牌以启用其他权限的示例:Enabling and Disabling Privileges in C++

答案 3 :(得分:0)

GetProcessImageFileName仅需要从Vista开始处理PROCESS_QUERY_LIMITED_INFORMATION,但在XP上它确实需要PROCESS_QUERY_INFORMATION。

你不应该,也绝对不能从访客帐户中获取PROCESS_VM_READ。