У меня есть процедура, в которой я обрабатываю процесс, чтобы получить HANDLE
каждого процесса, когда я «иду» по списку (который отлично работает), но моя проблема заключается, когда я делаю:WinAPI: OpenProcess() возвращает ошибку 5 с включенным SeDebugPrivilege для хост-процесса
HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID)
где PROCESS_ALL_ACCESS
находится маркер доступа, ручка наследования устанавливается в FALSE
и PE32 является PROCESSENTRY32
GetLastError()
код возвращает ошибку 5, и все ручки, которые сделаны являются адресами которые не соответствуют какому-либо соответствующему процессу в Spy ++ 32/64 (я попытался создать приложение на обеих платформах t argets, но, как и следовало ожидать, результат будет таким же).
Код для установки SeDebugPrivilege для хост-процесса, который я использую это:
BOOL EnableDebugPrivilege(BOOL bEnable)
{
HANDLE hToken = nullptr;
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) return FALSE;
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) return FALSE;
TOKEN_PRIVILEGES tokenPriv;
tokenPriv.PrivilegeCount = 1;
tokenPriv.Privileges[0].Luid = luid;
tokenPriv.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) return FALSE;
return TRUE;
}
Некоторые вопросы, которые были бы полезны для вас:
- Я m работает под управлением Windows 7 x64 Professional.
- Да, devenv.exe запускается с привилегиями «Запуск от имени администратора», что означает, что отладчик и приложение запускаются с одинаковой близостью.
- Я попытался переключить UAC или запустить приложение с UAC полностью. Еще код ошибки 5.
- Я только что попытался сделать это с
PROCESS_QUERY_LIMITED_INFORMATION
и получаю код ошибки 6, илиERROR_INVALID_HANDLE
. Также попытался сPROCESS_QUERY_INFORMATION | PROCESS_VM_READ
, результатом является ошибка 5 снова. SeDebugPrivilege
включен, проверен с помощью Process Explorer системы SysInternals. Кроме того, все процессы, которые появляются из devenv/независимо от того, что называется отладчиком, наследуют SeDebugPrivilege, так что ... это странно.
Спасибо всем большое за ваше время, я тянусь остряки закончить с этим вопросом: S
Возможный дубликат http: // stackoverflow.com/questions/169355/vc-2008-openprocess-always-returns-error-5-access-denied – Xearinox
@Xearinox: Я видел этот вопрос и применял то, что ответили (а): SeDebugPrivilege. –
Вам действительно нужны права PROCESS_ALL_ACCESS? – Xearinox