Threadsicherheit und Zugriffsrechte
Mit Microsoft Windows können Sie den Zugriff auf Threadobjekte steuern. Weitere Informationen zur Sicherheit finden Sie unter Access-Control Model.
Sie können einen Sicherheitsdeskriptor für einen Thread angeben, wenn Sie die CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThread-oder CreateRemoteThread-funktion aufrufen. Wenn Sie NULL-angeben, erhält der Thread einen Standardsicherheitsdeskriptor. Die ACLs im Standardsicherheitsdeskriptor für einen Thread stammen aus dem primären oder Identitätswechseltoken des Erstellers.
Rufen Sie zum Abrufen der Sicherheitsbeschreibung eines Threads die GetSecurityInfo-Funktion auf. Rufen Sie zum Ändern der Sicherheitsbeschreibung eines Threads die SetSecurityInfo-Funktion auf.
Das von der CreateThread--Funktion zurückgegebene Handle hat THREAD_ALL_ACCESS Zugriff auf das Threadobjekt. Wenn Sie die GetCurrentThread--Funktion aufrufen, gibt das System eine Pseudohandle mit dem maximalen Zugriff zurück, den der Sicherheitsdeskriptor des Threads für den Aufrufer zulässt.
Zu den gültigen Zugriffsrechten für Threadobjekte gehören die Standardzugriffsrechte und einige threadspezifische Zugriffsrechte. In der folgenden Tabelle sind die Standardzugriffsrechte aufgeführt, die von allen Objekten verwendet werden.
Wert | Bedeutung |
---|---|
DELETE- (0x00010000L) | Erforderlich, um das Objekt zu löschen. |
READ_CONTROL (0x00020000L) | Erforderlich zum Lesen von Informationen im Sicherheitsdeskriptor für das Objekt, nicht einschließlich der Informationen in der SACL. Um die SACL zu lesen oder zu schreiben, müssen Sie das ACCESS_SYSTEM_SECURITY Zugriffsrecht anfordern. Weitere Informationen finden Sie unter SACL Access Right. |
SYNCHRONIZE (0x00100000L) | Das Recht, das Objekt für die Synchronisierung zu verwenden. Dadurch kann ein Thread warten, bis sich das Objekt im signalisierten Zustand befindet. |
WRITE_DAC (0x00040000L) | Erforderlich, um die DACL im Sicherheitsdeskriptor für das Objekt zu ändern. |
WRITE_OWNER (0x00080000L) | Erforderlich, um den Besitzer im Sicherheitsdeskriptor für das Objekt zu ändern. |
In der folgenden Tabelle sind die threadspezifischen Zugriffsrechte aufgeführt.
Wert | Bedeutung |
---|---|
SYNCHRONIZE (0x00100000L) | Ermöglicht die Verwendung des Threadhandles in einer der Wartefunktionen. |
THREAD_ALL_ACCESS | Alle möglichen Zugriffsrechte für ein Threadobjekt.Windows Server 2003 und Windows XP: Der Wert des THREAD_ALL_ACCESS Flags wurde unter Windows Server 2008 und Windows Vista erhöht. Wenn eine für Windows Server 2008 und Windows Vista kompilierte Anwendung unter Windows Server 2003 oder Windows XP ausgeführt wird, enthält das THREAD_ALL_ACCESS Flag Zugriffsbits, die nicht unterstützt werden, und die Funktion, die dieses Flag angibt, schlägt mit ERROR_ACCESS_DENIEDfehl. Um dieses Problem zu vermeiden, geben Sie den mindesten Satz von Zugriffsrechten an, die für den Vorgang erforderlich sind. Wenn THREAD_ALL_ACCESS verwendet werden muss, legen Sie _WIN32_WINNT auf das Mindestbetriebssystem fest, das von Ihrer Anwendung bestimmt wird (z. B. #define _WIN32_WINNT _WIN32_WINNT_WINXP ). Weitere Informationen finden Sie unter Verwenden der Windows-Header. |
THREAD_DIRECT_IMPERSONATION (0x0200) | Erforderlich für einen Serverthread, der einen Client imitiert. |
THREAD_GET_CONTEXT (0x0008) | Erforderlich, um den Kontext eines Threads mit GetThreadContext-zu lesen. |
THREAD_IMPERSONATE (0x0100) | Erforderlich, um die Sicherheitsinformationen eines Threads direkt zu verwenden, ohne ihn mithilfe eines Kommunikationsmechanismus, der Identitätswechseldienste bereitstellt, aufzurufen. |
THREAD_QUERY_INFORMATION (0x0040) | Erforderlich, um bestimmte Informationen aus dem Threadobjekt zu lesen, z. B. den Exit-Code (siehe GetExitCodeThread-). |
THREAD_QUERY_LIMITED_INFORMATION (0x0800) | Erforderlich zum Lesen bestimmter Informationen aus den Threadobjekten (siehe GetProcessIdOfThread-). Ein Handle mit dem THREAD_QUERY_INFORMATION Zugriffsrecht wird automatisch THREAD_QUERY_LIMITED_INFORMATIONgewährt.Windows Server 2003 und Windows XP: Dieses Zugriffsrecht wird nicht unterstützt. |
THREAD_SET_CONTEXT (0x0010) | Erforderlich, um den Kontext eines Threads mit SetThreadContext-zu schreiben. |
THREAD_SET_INFORMATION (0x0020) | Erforderlich, um bestimmte Informationen im Threadobjekt festzulegen. |
THREAD_SET_LIMITED_INFORMATION (0x0400) | Erforderlich, um bestimmte Informationen im Threadobjekt festzulegen. Ein Handle mit dem THREAD_SET_INFORMATION Zugriffsrecht wird automatisch THREAD_SET_LIMITED_INFORMATIONgewährt.Windows Server 2003 und Windows XP: Dieses Zugriffsrecht wird nicht unterstützt. |
THREAD_SET_THREAD_TOKEN (0x0080) | Erforderlich, um das Identitätswechseltoken für einen Thread mit SetThreadTokenfestzulegen. |
THREAD_SUSPEND_RESUME (0x0002) | Erforderlich zum Anhalten oder Fortsetzen eines Threads (siehe SuspendThread- und ResumeThread-). |
THREAD_TERMINATE (0x0001) | Erforderlich, um einen Thread mit TerminateThread-zu beenden. |
Sie können den ACCESS_SYSTEM_SECURITY Zugriff auf ein Threadobjekt anfordern, wenn Sie die SACL des Objekts lesen oder schreiben möchten. Weitere Informationen finden Sie unter Access-Control Listen (ACLs) und SACL Access Right.
Geschützte Prozesse
Geschützte Prozesse die Unterstützung von Digital Rights Management verbessern. Das System beschränkt den Zugriff auf geschützte Prozesse und die Threads geschützter Prozesse.
Windows Server 2003 und Windows XP: Geschützte Prozesse wurden ab Windows Vista hinzugefügt.
Die folgenden speziellen Zugriffsrechte sind von einem Prozess bis zu den Threads eines geschützten Prozesses nicht zulässig:
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
Das THREAD_QUERY_LIMITED_INFORMATION Recht wurde eingeführt, um den Zugriff auf eine Teilmenge der über THREAD_QUERY_INFORMATIONverfügbaren Informationen zu ermöglichen.