Обработка прав безопасности и доступа
Модель безопасности Microsoft Windows позволяет управлять доступом к объектам обработки. Дополнительные сведения о безопасности см. в разделе Access-Controlмодели.
При входе пользователя система собирает набор данных, однозначно определяющих пользователя во время процесса проверки подлинности, и сохраняет его в маркера доступа. Этот маркер доступа описывает контекст безопасности всех процессов, связанных с пользователем. Контекст безопасности процесса — это набор учетных данных, предоставленных процессу или учетной записи пользователя, создавшего процесс.
Маркер можно использовать для указания текущего контекста безопасности для процесса с помощью функции CreateProcessWithTokenW. Вы можете указать дескриптора безопасности для процесса при вызове функции CreateProcess, CreateProcessAsUserили CreateProcessWithLogonW. Если указать null, процесс получает дескриптор безопасности по умолчанию. Списки управления доступом в дескрипторе безопасности по умолчанию для процесса получены из первичного или олицетворения маркера создателя.
Чтобы получить дескриптор безопасности процесса, вызовите функцию GetSecurityInfo. Чтобы изменить дескриптор безопасности процесса, вызовите функцию SetSecurityInfo.
Допустимые права доступа для объектов обработки включают стандартные права доступа и некоторые права доступа для конкретного процесса. В следующей таблице перечислены стандартные права доступа, используемые всеми объектами.
Ценность | Значение |
---|---|
DELETE (0x00010000L) | Требуется для удаления объекта. |
READ_CONTROL (0x00020000L) | Требуется для чтения сведений в дескрипторе безопасности для объекта, не включая сведения в SACL. Чтобы прочитать или записать SACL, необходимо запросить право доступа ACCESS_SYSTEM_SECURITY. Дополнительные сведения см. в разделе права доступа SACL. |
СИНХРОНИЗАЦИЯ (0x00100000L) | Право использовать объект для синхронизации. Это позволяет потоку ждать, пока объект не находится в сигнальном состоянии. |
WRITE_DAC (0x00040000L) | Требуется изменить DACL в дескрипторе безопасности для объекта. |
WRITE_OWNER (0x00800000L) | Требуется изменить владельца в дескрипторе безопасности для объекта. |
В следующей таблице перечислены права доступа для конкретного процесса.
Ценность | Значение |
---|---|
PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED (0x000F0000L) | SYNCHRONIZE (0x00100000L) | 0xFFFF) | Все возможные права доступа для объекта процесса.Windows Server 2003 и Windows XP: размер флага PROCESS_ALL_ACCESS увеличился на Windows Server 2008 и Windows Vista. Если приложение, скомпилированное для Windows Server 2008 и Windows Vista, выполняется в Windows Server 2003 или Windows XP, флаг PROCESS_ALL_ACCESS слишком велик, а функция, указывающая этот флаг, завершается ошибкой с ERROR_ACCESS_DENIED. Чтобы избежать этой проблемы, укажите минимальный набор прав доступа, необходимых для операции. Если PROCESS_ALL_ACCESS необходимо использовать, задайте для _WIN32_WINNT минимальную операционную систему, предназначенную для приложения (например, #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Дополнительные сведения см. в разделе Использование заголовков Windows. |
PROCESS_CREATE_PROCESS (0x0080) | Требуется использовать этот процесс в качестве родительского процесса с PROC_THREAD_ATTRIBUTE_PARENT_PROCESS. |
PROCESS_CREATE_THREAD (0x0002) | Требуется для создания потока в процессе. |
PROCESS_DUP_HANDLE (0x0040) | Требуется для дублирования дескриптора с помощью Дубликата. |
PROCESS_QUERY_INFORMATION (0x0400) | Требуется для получения определенных сведений о процессе, таких как его маркер, код выхода и класс приоритета (см. OpenProcessToken). |
PROCESS_QUERY_LIMITED_INFORMATION (0x1000) | Требуется для получения определенных сведений о процессе (см. GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName). Дескриптор, имеющий право доступа PROCESS_QUERY_INFORMATION, автоматически предоставляется PROCESS_QUERY_LIMITED_INFORMATION.Windows Server 2003 и Windows XP: этот доступ не поддерживается. |
PROCESS_SET_INFORMATION (0x0200) | Требуется задать определенные сведения о процессе, например его класс приоритета (см. раздел SetPriorityClass). |
PROCESS_SET_QUOTA (0x0100) | Требуется задать ограничения памяти с помощью SetProcessWorkingSetSize. |
PROCESS_SUSPEND_RESUME (0x0800) | Требуется для приостановки или возобновления процесса. |
PROCESS_TERMINATE (0x0001) | Требуется для завершения процесса с помощью TerminateProcess. |
PROCESS_VM_OPERATION (0x0008) | Требуется выполнить операцию в адресном пространстве процесса (см. VirtualProtectEx и WriteProcessMemory). |
PROCESS_VM_READ (0x0010) | Требуется для чтения памяти в процессе с помощью ReadProcessMemory. |
PROCESS_VM_WRITE (0x0020) | Требуется для записи в память в процессе с помощью WriteProcessMemory. |
СИНХРОНИЗАЦИЯ (0x00100000L) | Требуется ждать завершения процесса с помощью функций ожидания ожидания. |
Чтобы открыть дескриптор для другого процесса и получить права полного доступа, необходимо включить привилегию SeDebugPrivilege. Дополнительные сведения см. в разделе Изменение привилегий вмаркера.
Дескриптор, возвраща емый функцией CreateProcess, имеет PROCESS_ALL_ACCESS доступ к объекту процесса. При вызове функции OpenProcess система проверяет запрошенные права доступа на daCL в дескрипторе безопасности процесса. При вызове функции GetCurrentProcess система возвращает псевдоhandle с максимальным доступом, который daCL позволяет вызывающей функции.
Вы можете запросить ACCESS_SYSTEM_SECURITY права доступа к объекту процесса, если вы хотите прочитать или записать SACL объекта. Дополнительные сведения см. в Access-Control списков (ACL) и права доступа SACL.
Предупреждение
Процесс, имеющий некоторые права доступа, отмеченные здесь, может использовать их для получения других прав доступа. Например, если процесс A имеет дескриптор для обработки B с PROCESS_DUP_HANDLE доступа, он может дублировать псевдо дескриптор для процесса B. При этом создается дескриптор с максимальным доступом к процессу B. Дополнительные сведения о псевдообработанных дескрипторах см. в GetCurrentProcess.
Защищенные процессы
Windows Vista представляет защищенные процессы для повышения поддержки digital Rights Management. Система ограничивает доступ к защищенным процессам и потокам защищенных процессов.
Следующие стандартные права доступа не допускаются из процесса в защищенный процесс:
- DELETE
- READ_CONTROL
- WRITE_DAC
- WRITE_OWNER
Следующие определенные права доступа не допускаются из процесса в защищенный процесс:
- PROCESS_ALL_ACCESS
- PROCESS_CREATE_PROCESS
- PROCESS_CREATE_THREAD
- PROCESS_DUP_HANDLE
- PROCESS_QUERY_INFORMATION
- PROCESS_SET_INFORMATION
- PROCESS_SET_QUOTA
- PROCESS_VM_OPERATION
- PROCESS_VM_READ
- PROCESS_VM_WRITE
В PROCESS_QUERY_LIMITED_INFORMATION появилось право предоставить доступ к подмножества информации, доступной через PROCESS_QUERY_INFORMATION.