Поделиться через


Права на безопасность потоков и доступ

Microsoft Windows позволяет управлять доступом к объектам потоков. Дополнительные сведения о безопасности см. в разделе Access-Controlмодели.

Дескриптор безопасности можно указать для потока при вызове CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThreadили Функции CreateRemoteThreadThread. Если указать NULL, поток получает дескриптор безопасности по умолчанию. Списки управления доступом в дескрипторе безопасности по умолчанию для потока приходят из первичного или олицетворения маркера создателя.

Чтобы получить дескриптор безопасности потока, вызовите функцию GetSecurityInfo. Чтобы изменить дескриптор безопасности потока, вызовите функцию SetSecurityInfo.

Дескриптор, возвраща емый функцией CreateThread, имеет THREAD_ALL_ACCESS доступ к объекту потока. При вызове функции GetCurrentThreadThread система возвращает псевдохандру с максимальным доступом, который дескриптор безопасности потока разрешает вызывающий объект.

Допустимые права доступа для объектов потоков включают стандартные права доступа и некоторые права доступа для конкретного потока. В следующей таблице перечислены стандартные права доступа, используемые всеми объектами.

Ценность Значение
DELETE (0x00010000L) Требуется для удаления объекта.
READ_CONTROL (0x00020000L) Требуется для чтения сведений в дескрипторе безопасности для объекта, не включая сведения в SACL. Чтобы прочитать или записать SACL, необходимо запросить право доступа ACCESS_SYSTEM_SECURITY. Дополнительные сведения см. в разделе права доступа SACL.
СИНХРОНИЗАЦИЯ (0x00100000L) Право использовать объект для синхронизации. Это позволяет потоку ждать, пока объект не находится в сигнальном состоянии.
WRITE_DAC (0x00040000L) Требуется изменить DACL в дескрипторе безопасности для объекта.
WRITE_OWNER (0x00800000L) Требуется изменить владельца в дескрипторе безопасности для объекта.

 

В следующей таблице перечислены права доступа для конкретного потока.

Ценность Значение
СИНХРОНИЗАЦИЯ (0x00100000L) Позволяет использовать дескриптор потока в любой из функций ожидания .
THREAD_ALL_ACCESS Все возможные права доступа для объекта потока.Windows Server 2003 и Windows XP: Значение флага THREAD_ALL_ACCESS увеличено на Windows Server 2008 и Windows Vista. Если приложение, скомпилированное для Windows Server 2008 и Windows Vista, запущено в Windows Server 2003 или Windows XP, флаг THREAD_ALL_ACCESS содержит биты доступа, которые не поддерживаются, и функция, указывающая этот флаг, завершается сбоем с ERROR_ACCESS_DENIED. Чтобы избежать этой проблемы, укажите минимальный набор прав доступа, необходимых для операции. Если THREAD_ALL_ACCESS необходимо использовать, задайте _WIN32_WINNT минимальной операционной системе, предназначенной для приложения (например, #define _WIN32_WINNT _WIN32_WINNT_WINXP). Дополнительные сведения см. в разделе Использование заголовков Windows.
THREAD_DIRECT_IMPERSONATION (0x0200) Требуется для потока сервера, который олицетворяет клиента.
THREAD_GET_CONTEXT (0x0008) Требуется для чтения контекста потока с помощью GetThreadContext.
THREAD_IMPERSONATE (0x0100) Требуется для использования сведений о безопасности потока напрямую, не вызывая его с помощью механизма обмена данными, предоставляющего службы олицетворения.
THREAD_QUERY_INFORMATION (0x0040) Требуется для чтения определенных сведений из объекта потока, например кода выхода (см. GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Требуется для чтения определенных сведений из объектов потока (см. GetProcessIdOfThread). Дескриптор, имеющий право доступа THREAD_QUERY_INFORMATION, автоматически предоставляется THREAD_QUERY_LIMITED_INFORMATION.Windows Server 2003 и Windows XP: этот доступ не поддерживается.
THREAD_SET_CONTEXT (0x0010) Требуется для записи контекста потока с помощью SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Требуется задать определенные сведения в объекте потока.
THREAD_SET_LIMITED_INFORMATION (0x0400) Требуется задать определенные сведения в объекте потока. Дескриптор, имеющий право доступа THREAD_SET_INFORMATION, автоматически предоставляется THREAD_SET_LIMITED_INFORMATION.Windows Server 2003 и Windows XP: этот доступ не поддерживается.
THREAD_SET_THREAD_TOKEN (0x0080) Требуется задать маркер олицетворения для потока с помощью SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Требуется для приостановки или возобновления потока (см. раздел SuspendThread и ResumeThread).
THREAD_TERMINATE (0x0001) Требуется для завершения потока с помощью terminateThread.

 

Вы можете запросить ACCESS_SYSTEM_SECURITY права доступа к объекту потока, если вы хотите прочитать или записать SACL объекта. Дополнительные сведения см. в Access-Control списков (ACL) и права доступа SACL.

Защищенные процессы

Защищенные процессы повысить поддержку управления цифровыми правами. Система ограничивает доступ к защищенным процессам и потокам защищенных процессов.

Windows Server 2003 и Windows XP: Защищенные процессы были добавлены начиная с Windows Vista.

Следующие определенные права доступа не допускаются из процесса в потоки защищенного процесса:

THREAD_ALL_ACCESS
THREAD_DIRECT_IMPERSONATION
THREAD_GET_CONTEXT
THREAD_IMPERSONATE
THREAD_QUERY_INFORMATION
THREAD_SET_CONTEXT
THREAD_SET_INFORMATION
THREAD_SET_TOKEN
THREAD_TERMINATE

Было введено право THREAD_QUERY_LIMITED_INFORMATION предоставить доступ к подмножества информации, доступной через THREAD_QUERY_INFORMATION.