Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Windows använder säkerhetsidentifieraren (SID) som det slutgiltiga värdet för att skilja säkerhetsentiteter från varandra. Till exempel tilldelas en unik säkerhetsidentifierare till varje nytt konto som skapats för enskilda användare i systemet. För ett filsystem används endast detta SID.
Följande bild illustrerar strukturen för säkerhetsidentifierare.
Förutom unika SID:er definierar Windows-systemet en uppsättning välkända identifierare. Den lokala administratören är till exempel ett välkänt SID.
Windows tillhandahåller en mekanism i kernel för att konvertera mellan SID:er och användarnamn i kernelmiljön. Dessa funktionsanrop är tillgängliga från ksecdd-drivrutinen , som implementerar dessa funktioner med hjälptjänster i användarläge. Därför måste deras användning i filsystem följa de vanliga reglerna för kommunikation med användarlägestjänster. Dessa anrop kan inte användas under växling av fil-I/O.
Några av dessa funktioner är:
SecMakeSPN skapar en namnsträng för tjänstleverantören som kan användas vid kommunikation med specifika leverantörer av säkerhetstjänster.
SecMakeSPNEx är en förhöjd version av SecMakeSPN som introducerades i Windows XP.
SecMakeSPNEx2 är en utökad version av SecMakeSPNEx som är tillgänglig från och med Windows Vista och Windows Server 2008.
SecLookupAccountSid returnerar ett kontonamn för ett angivet SID.
SecLookupAccountName hämtar SID för ett angivet kontonamn.
SecLookupWellKnownSid returnerar rätt SID för en angiven välkänd SID-typ. Den här funktionen är tillgänglig på Windows Server 2003 och senare.
Dessutom kan valfri kerneldrivrutin skapa ett SID med hjälp av följande standardrutiner för körningsbibliotek:
RtlInitializeSid initierar en buffert för ett nytt SID.
RtlLengthSid avgör storleken på sid som lagras i den angivna bufferten.
RtlValidSid avgör om den angivna SID-bufferten är en giltig formaterad buffert.
RtlLengthSid och RtlValidSid förutsätter att det fasta sidhuvudet på 8 byte för ett SID finns. En drivrutin bör därför söka efter den här minsta längden för ett SID-huvud innan du anropar dessa funktioner.
Det finns flera andra RTL-funktioner, men den här listan innehåller de primära funktioner som krävs när du skapar ett SID.
Följande kodexempel visar hur du skapar ett SID för entiteten "lokalt system". Den enklare funktionen SecLookupWellKnownSid som introducerades i Windows Server 2003 kan också användas.
{
//
// temporary stack-based storage for an SID
//
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SID_IDENTIFIER_AUTHORITY localSidAuthority =
SECURITY_NT_AUTHORITY;
//
// build the local system SID
//
RtlZeroMemory(sidBuffer, sizeof(sidBuffer));
localSid->Revision = SID_REVISION;
localSid->SubAuthorityCount = 1;
localSid->IdentifierAuthority = localSidAuthority;
localSid->SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
//
// make sure it is valid
//
if (!RtlValidSid(localSid)) {
DbgPrint("no dice - SID is invalid\n");
return(1);
}
}
I följande kodexempel visas hur du skapar ett SID med funktionen SecLookupWellKnownSid för entiteten "lokalt system":
{
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SIZE_T sidSize;
status = SecLookupWellKnownSid(WinLocalSid,
&localSid,
sizeof(sidBuffer),
&sidSize);
if (!NT_SUCCESS(status)) {
//
// error handling
//
}
}
Någon av dessa metoder är giltiga, även om den senare koden är att föredra. Dessa kodexempel använder lokala buffertar för att lagra SID. Dessa buffertar kan inte användas utanför den aktuella samtalskontexten. Om SID-bufferten behövde vara beständig ska bufferten allokeras från poolminnet.