OpenProcess возвращает ERROR_ACCESS_DENIED для 32-битных процессов с повышенными правами - PullRequest
0 голосов
/ 01 июля 2019

Я ищу конкретный 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(....);

Заранее спасибо за любые подсказки и указатели!

1 Ответ

0 голосов
/ 02 июля 2019

В конце концов я отказался от этого в C и реализовал его в C #, используя методы System.Diagnostics.Process без изъянов.

В любом случае, спасибо за все ваши усилия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...