我正在我要终止的机器上寻找特定的简化32位进程。首先,我需要确保它是正确的文件。

为此,我遵循Microsoft的this示例,该示例如何使用OpenProcess(),EnumProcessModules()和GetModuleFileNameEx()内核函数获取所有进程的文件名。

从Visual Studio和提升的Powershell(x86或x64)中执行时,我得到的OpenProcess()返回代码为299,但是进程句柄还可以,我可以获取文件名。

当我在提升的CMD Shell中运行相同的二进制文件(在Win10 x64和Win7 x86上测试)时,OpenProcess()返回5,表示ERROR_ACCESS_DENIED。 -这对我来说是个问题,因为出于特定原因,该工具最终将从CMD运行。

我已经尝试过为OpenProcess()调整所需的标志,但是两个版本都提供与上述相同的结果。


PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE
PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE


HANDLE hProcess = OpenProcess(dwDesiredAccess, FALSE, processID);
EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded);
GetModuleFileNameEx(....);


在此先感谢您提供任何提示和指示!

最佳答案

最终,我放弃了用C语言编写的代码,并使用System.Diagnostics.Process方法在C#中完美实现了这一点。

无论如何,感谢您的所有努力!

10-06 09:55