Я ищу конкретный 32-битный процесс на компьютере, который я хотел бы прекратить. Во-первых, я должен быть уверен, что выполняется правильный файл.
Для этой цели я следую этому примеру Microsoft о том, как получить имена всех процессов, используя OpenProcess () , EnumProcessModules () и GetModuleFileNameEx () функции ядра.
При выполнении из Visual Studio и с повышенными правами PowerShell (x86 или x64) я получаю OpenProcess () код возврата 299, но дескриптор процесса в порядке, и я могу получить имя файла.
Когда я запускаю тот же двоичный файл в оболочке CMD с повышенными правами (проверено на 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(....);
Заранее спасибо за любые подсказки и указатели!