Udostępnij przez


Zabezpieczenia wątków i prawa dostępu

System Microsoft Windows umożliwia kontrolowanie dostępu do obiektów wątków. Aby uzyskać więcej informacji na temat zabezpieczeń, zobacz Access-Control Model.

Deskryptor zabezpieczeń można określić dla wątku podczas wywoływania CreateProcess, createProcessAsUser, CreateProcessWithLogonW, CreateThreadlub CreateRemoteThread. Jeśli określisz NULL, wątek pobiera domyślny deskryptor zabezpieczeń. Listy ACL w domyślnym deskryptorze zabezpieczeń dla wątku pochodzą z podstawowego lub personifikacyjnego tokenu twórcy.

Aby pobrać deskryptor zabezpieczeń wątku, wywołaj funkcję GetSecurityInfo. Aby zmienić deskryptor zabezpieczeń wątku, wywołaj funkcję SetSecurityInfo.

Dojście zwrócone przez funkcję CreateThread ma THREAD_ALL_ACCESS dostęp do obiektu wątku. Po wywołaniu funkcji GetCurrentThread system zwraca pseudohandle z maksymalnym dostępem, który deskryptor zabezpieczeń wątku zezwala na obiekt wywołujący.

Prawidłowe prawa dostępu dla obiektów wątków obejmują standardowych praw dostępu i niektórych praw dostępu specyficznych dla wątków. W poniższej tabeli wymieniono standardowe prawa dostępu używane przez wszystkie obiekty.

Wartość Znaczenie
DELETE (0x00010000L) Wymagane do usunięcia obiektu.
READ_CONTROL (0x00020000L) Wymagane do odczytu informacji w deskryptorze zabezpieczeń dla obiektu, a nie w tym informacji w SACL. Aby odczytać lub zapisać SACL, musisz zażądać ACCESS_SYSTEM_SECURITY prawa dostępu. Aby uzyskać więcej informacji, zobacz SACL Access Right.
SYNC (0x00100000L) Prawo do używania obiektu do synchronizacji. Dzięki temu wątek może czekać, aż obiekt będzie w stanie sygnału.
WRITE_DAC (0x00040000L) Wymagane do zmodyfikowania listy DACL w deskryptorze zabezpieczeń dla obiektu.
WRITE_OWNER (0x000800000L) Wymagane do zmiany właściciela w deskryptorze zabezpieczeń dla obiektu.

 

W poniższej tabeli wymieniono prawa dostępu specyficzne dla wątku.

Wartość Znaczenie
SYNC (0x00100000L) Umożliwia korzystanie z uchwytu wątku w dowolnej funkcji oczekiwania .
THREAD_ALL_ACCESS Wszystkie możliwe prawa dostępu dla obiektu wątku.Windows Server 2003 i Windows XP: Wartość flagi THREAD_ALL_ACCESS wzrosła w systemach Windows Server 2008 i Windows Vista. Jeśli aplikacja skompilowana dla systemu Windows Server 2008 i Windows Vista jest uruchomiona w systemie Windows Server 2003 lub Windows XP, flaga THREAD_ALL_ACCESS zawiera bity dostępu, które nie są obsługiwane, a funkcja określająca tę flagę kończy się niepowodzeniem z ERROR_ACCESS_DENIED. Aby uniknąć tego problemu, określ minimalny zestaw praw dostępu wymaganych do operacji. Jeśli THREAD_ALL_ACCESS należy użyć, ustaw _WIN32_WINNT na minimalny system operacyjny przeznaczony dla aplikacji (na przykład #define _WIN32_WINNT _WIN32_WINNT_WINXP). Aby uzyskać więcej informacji, zobacz Using the Windows Headers.
THREAD_DIRECT_IMPERSONATION (0x0200) Wymagane dla wątku serwera, który personifikuje klienta.
THREAD_GET_CONTEXT (0x0008) Wymagane do odczytania kontekstu wątku przy użyciu GetThreadContext.
THREAD_IMPERSONATE (0x0100) Wymagane do bezpośredniego używania informacji zabezpieczających wątku bez wywoływania go za pomocą mechanizmu komunikacyjnego, który zapewnia usługi personifikacji.
THREAD_QUERY_INFORMATION (0x0040) Wymagane do odczytania pewnych informacji z obiektu wątku, takich jak kod zakończenia (zobacz GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Wymagane do odczytu niektórych informacji z obiektów wątku (zobacz GetProcessIdOfThread). Dojście z prawem dostępu THREAD_QUERY_INFORMATION jest automatycznie przyznawane THREAD_QUERY_LIMITED_INFORMATION.Windows Server 2003 i Windows XP: To prawo dostępu nie jest obsługiwane.
THREAD_SET_CONTEXT (0x0010) Wymagane do zapisania kontekstu wątku przy użyciu SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Wymagane do ustawienia pewnych informacji w obiekcie wątku.
THREAD_SET_LIMITED_INFORMATION (0x0400) Wymagane do ustawienia pewnych informacji w obiekcie wątku. Dojście z prawem dostępu do THREAD_SET_INFORMATION jest automatycznie przyznawane THREAD_SET_LIMITED_INFORMATION.Windows Server 2003 i Windows XP: To prawo dostępu nie jest obsługiwane.
THREAD_SET_THREAD_TOKEN (0x0080) Wymagane do ustawienia tokenu personifikacji dla wątku przy użyciu SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Wymagane do wstrzymania lub wznowienia wątku (zobacz SuspendThread i ResumeThread).
THREAD_TERMINATE (0x0001) Wymagane do zakończenia wątku przy użyciu TerminateThread.

 

Możesz zażądać dostępu ACCESS_SYSTEM_SECURITY prawa do obiektu wątku, jeśli chcesz odczytać lub zapisać SACL obiektu. Aby uzyskać więcej informacji, zobacz listAccess-Control list (ACL) i SACL Access Right.

Chronione procesy

Chronione procesy zwiększyć obsługę usługi Digital Rights Management. System ogranicza dostęp do chronionych procesów i wątków chronionych procesów.

Windows Server 2003 i Windows XP: dodano procesy chronione począwszy od systemu Windows Vista.

Następujące określone prawa dostępu nie są dozwolone z procesu do wątków chronionego procesu:

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

Prawo THREAD_QUERY_LIMITED_INFORMATION zostało wprowadzone w celu zapewnienia dostępu do podzestawu informacji dostępnych za pośrednictwem THREAD_QUERY_INFORMATION.