как получить дескриптор процесса из идентификатора процесса?

У меня есть идентификатор процесса, я хочу получить его дескриптор процесса.

Есть ли для этого API.

Я попытался использовать OpenProcess, но он возвращает NULL, а GetLastError = 0.

Это я стараюсь Vista.

Я думаю, мне нужно включить SeDebugPrivilege перед использованием OpenProcess. Но для включения SeDebugPrivilege мне нужно получить свой дескриптор процесса.

OpenProcess(PROCESS_ALL_ACCESS, TRUE, procId); 

Вам нужно будет убедиться, что вы используете действительный идентификатор процесса, и что вы разрешаете права доступа, которые вы запрашиваете от процесса.

Это то, что вы ищите?

 HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); CloseHandle(processHandle); 

Кроме того, вот какой-то код, который я использую для установки debug privledge перед инъекцией DLL.

 void Loader::EnableDebugPriv(void) { HANDLE hToken; LUID SeDebugNameValue; TOKEN_PRIVILEGES TokenPrivileges; if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &SeDebugNameValue)) { TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Luid = SeDebugNameValue; TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { CloseHandle(hToken); } else { CloseHandle(hToken); throw std::exception("Couldn't adjust token privileges!"); } } else { CloseHandle(hToken); throw std::exception("Couldn't look up privilege value!"); } } else { throw std::exception("Couldn't open process token!"); } } 

Я успешно использовал вышеуказанный код в Windows Vista.

Вам потребуются повышенные привилегии. Также посмотрите на аналогичный вопрос здесь .

У меня просто была такая же проблема, как описано: OpenProcess () == NULL и GetLastError () == 0. Оказалось, что параметр поддержки Common Language RunTime Support был установлен на «Pure», должен был быть просто «общим». Принял меня, чтобы найти.

Для VS2010 c ++ goto -> Свойства проекта -> Свойства конфигурации -> C / C ++ -> Общие

Если у вас есть идентификатор процесса, вы можете получить дескриптор процесса, вызвав функцию OpenProcess . OpenProcess позволяет указать права доступа дескриптора и может ли он быть унаследован.

FYI:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684868(v=vs.85).aspx