Dela via


Trådsäkerhet och åtkomsträttigheter

Med Microsoft Windows kan du styra åtkomsten till trådobjekt. Mer information om säkerhet finns i Access-Control Model.

Du kan ange en säkerhetsbeskrivning för en tråd när du anropar funktionen CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateThreadeller CreateRemoteThread. Om du anger NULL-hämtar tråden en standardsäkerhetsbeskrivning. ACL:erna i standardsäkerhetsbeskrivningen för en tråd kommer från skaparens primära token eller personifieringstoken.

Om du vill hämta en tråds säkerhetsbeskrivning anropar du funktionen GetSecurityInfo. Om du vill ändra en tråds säkerhetsbeskrivning anropar du funktionen SetSecurityInfo.

Referensen som returneras av funktionen CreateThread har THREAD_ALL_ACCESS åtkomst till trådobjektet. När du anropar funktionen GetCurrentThread returnerar systemet en pseudohandle med den maximala åtkomst som trådens säkerhetsbeskrivning tillåter anroparen.

De giltiga åtkomsträttigheterna för trådobjekt omfattar standardåtkomsträttigheter och vissa trådspecifika åtkomsträttigheter. I följande tabell visas de standardåtkomsträttigheter som används av alla objekt.

Värde Betydelse
DELETE (0x00010000L) Krävs för att ta bort objektet.
READ_CONTROL (0x00020000L) Krävs för att läsa information i säkerhetsbeskrivningen för objektet, inte inklusive informationen i SACL. Om du vill läsa eller skriva SACL:en måste du begära ACCESS_SYSTEM_SECURITY åtkomsträtt. Mer information finns i SACL-åtkomsträtt.
SYNKRONISERA (0x00100000L) Rätten att använda objektet för synkronisering. Detta gör att en tråd kan vänta tills objektet är i signalerat tillstånd.
WRITE_DAC (0x00040000L) Krävs för att ändra DACL i säkerhetsbeskrivningen för objektet.
WRITE_OWNER (0x00080000L) Krävs för att ändra ägaren i säkerhetsbeskrivningen för objektet.

 

I följande tabell visas de trådspecifika åtkomsträttigheterna.

Värde Betydelse
SYNKRONISERA (0x00100000L) Aktiverar användning av trådhandtaget i någon av de väntefunktionerna.
THREAD_ALL_ACCESS Alla möjliga åtkomsträttigheter för ett trådobjekt.Windows Server 2003 och Windows XP: Värdet för flaggan THREAD_ALL_ACCESS ökade på Windows Server 2008 och Windows Vista. Om ett program som kompilerats för Windows Server 2008 och Windows Vista körs på Windows Server 2003 eller Windows XP innehåller flaggan THREAD_ALL_ACCESS åtkomstbitar som inte stöds och funktionen som anger den här flaggan misslyckas med ERROR_ACCESS_DENIED. För att undvika det här problemet anger du den minsta uppsättning åtkomsträttigheter som krävs för åtgärden. Om THREAD_ALL_ACCESS måste användas anger du _WIN32_WINNT till det lägsta operativsystem som programmet har som mål (till exempel #define _WIN32_WINNT _WIN32_WINNT_WINXP). Mer information finns i Using the Windows Headers.
THREAD_DIRECT_IMPERSONATION (0x0200) Krävs för en servertråd som personifierar en klient.
THREAD_GET_CONTEXT (0x0008) Krävs för att läsa kontexten för en tråd med GetThreadContext.
THREAD_IMPERSONATE (0x0100) Krävs för att använda en tråds säkerhetsinformation direkt utan att anropa den med hjälp av en kommunikationsmekanism som tillhandahåller personifieringstjänster.
THREAD_QUERY_INFORMATION (0x0040) Krävs för att läsa viss information från trådobjektet, till exempel slutkoden (se GetExitCodeThread).
THREAD_QUERY_LIMITED_INFORMATION (0x0800) Krävs för att läsa viss information från trådobjekten (se GetProcessIdOfThread). En referens som har åtkomstbehörigheten THREAD_QUERY_INFORMATION beviljas automatiskt THREAD_QUERY_LIMITED_INFORMATION.Windows Server 2003 och Windows XP: Den här åtkomstbehörigheten stöds inte.
THREAD_SET_CONTEXT (0x0010) Krävs för att skriva kontexten för en tråd med SetThreadContext.
THREAD_SET_INFORMATION (0x0020) Krävs för att ange viss information i trådobjektet.
THREAD_SET_LIMITED_INFORMATION (0x0400) Krävs för att ange viss information i trådobjektet. En referens som har åtkomstbehörigheten THREAD_SET_INFORMATION beviljas automatiskt THREAD_SET_LIMITED_INFORMATION.Windows Server 2003 och Windows XP: Den här åtkomstbehörigheten stöds inte.
THREAD_SET_THREAD_TOKEN (0x0080) Krävs för att ange personifieringstoken för en tråd med SetThreadToken.
THREAD_SUSPEND_RESUME (0x0002) Krävs för att pausa eller återuppta en tråd (se SuspendThread och ResumeThread).
THREAD_TERMINATE (0x0001) Krävs för att avsluta en tråd med TerminateThread.

 

Du kan begära ACCESS_SYSTEM_SECURITY åtkomst till ett trådobjekt om du vill läsa eller skriva objektets SACL. Mer information finns i Access-Control listor (ACL: er) och SACL-åtkomsträtt.

Skyddade processer

Skyddade processer förbättra stödet för Digital Rights Management. Systemet begränsar åtkomsten till skyddade processer och trådarna i skyddade processer.

Windows Server 2003 och Windows XP: skyddade processer lades till från och med Windows Vista.

Följande specifika åtkomsträttigheter tillåts inte från en process till trådarna i en skyddad process:

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

Den THREAD_QUERY_LIMITED_INFORMATION rättigheten infördes för att ge åtkomst till en delmängd av den information som är tillgänglig via THREAD_QUERY_INFORMATION.