Застрял в OpenProcess, всегда возвращает 0

Что-то странное происходит, когда я запускаю свою программу. Когда я запускаю его с помощью параметра "Начать без отладки" в VS 2010, OpenProcess возвращает дескриптор процесса, как обычно, но когда я запускаю свою программу в проводнике Windows, OpenProcess всегда возвращает 0?!! Я вызвал GetLastError, и он возвращает 6 (INVALID_HANDLE_VALUE) в обоих случаях. Я использую Windows XP SP3 Может кто-нибудь помочь мне, пожалуйста? Вот код, который я написал:

HANDLE GetProcessHandle(TCHAR* szProcessName)
{
    //Get the snapshot of all processes in the system
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    if (hSnap == INVALID_HANDLE_VALUE)
    {
        return INVALID_HANDLE_VALUE;
    }

    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);

    //Get the information of the first process
    if (!Process32First(hSnap, &pe32))
    {
        CloseHandle(hSnap);
        return INVALID_HANDLE_VALUE;
    }

    //Loop through all processes
    do
    {
        if (_tcscmp(szProcessName, pe32.szExeFile) == 0)
        {
            //Got the process ID
            CloseHandle(hSnap);
            printf("sz = %s; exe = %s; pid = %d\n", szProcessName, pe32.szExeFile, pe32.th32ProcessID);
                            //Error here, correct PID was found in both case
            return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
        }
    } 
    while (Process32Next(hSnap, &pe32));

    CloseHandle(hSnap);
    return INVALID_HANDLE_VALUE;
}

1 ответ

Решение

Чтобы открыть дескриптор другого локального процесса и получить права полного доступа, необходимо включить привилегию SeDebugPrivilege.

VS2010 имеет эту привилегию, но исследование не имеет. Поскольку ваша программа является дочерним процессом, она будет наследовать привилегии от родителей.

Для получения дополнительной информации проверьте этот документ MSDN.

Другие вопросы по тегам