none
Protected Processes RRS feed

  • Вопрос

  • Здравствуйте!

    Начиная с Windows Vista процессы стали защищены Protected Processes,т.е. при попытке вызвать функцию OpenProcess с флагом PROCESS_ALL_ACCESS, например, функция должна возвращать NULL.

    Но, тем не менее, на Windows 7 SP1 я могу открыть процесс с полным доступом. Насколько мне известно, на Windows Vista ситуация анологичная.

    HANDLE OpenProcess(const char * procName)

    { DWORD pId = GetProcessID(procName); return OpenProcess(PROCESS_ALL_ACCESS, false, pId); }


    Почему так происходит?
    3 марта 2012 г. 20:38

Ответы

  • Здравствуйте.

    На MSDN говорится об этом флаге только то, что вы откроете процецц с максимально возможными правами, это не означает что этот флаг вообще нельзя использовать и обязательно будет результат NULL.

    Результат будет NULL, если вы скомпилируете приложение на Windows Vista или старше, а потом запустите его на XP, например.

    All possible access rights for a process object. Windows Server 2003 and Windows XP: The size of the PROCESS_ALL_ACCESS flag increased on Windows Server 2008 and Windows Vista. If an application compiled for Windows Server 2008 and Windows Vista is run on Windows Server 2003 or Windows XP, the PROCESS_ALL_ACCESS flag is too large and the function specifying this flag fails with ERROR_ACCESS_DENIED. To avoid this problem, specify the minimum set of access rights required for the operation. If PROCESS_ALL_ACCESS must be used, set _WIN32_WINNT to the minimum operating system targeted by your application (for example, #define _WIN32_WINNT _WIN32_WINNT_WINXP ). For more information, see Using the Windows Headers.

    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 7 марта 2012 г. 10:51
    5 марта 2012 г. 9:21