Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Systém Windows používá identifikátor zabezpečení (SID) jako konečnou hodnotu k odlišení entit zabezpečení od sebe. Jedinečný identifikátor zabezpečení se například přiřadí každému novému účtu vytvořenému pro jednotlivé uživatele v systému. Pro systém souborů se používá pouze tento identifikátor SID.
Následující obrázek znázorňuje strukturu identifikátorů zabezpečení.
Kromě jedinečných identifikátorů SID systém Windows definuje sadu známých identifikátorů. Například místní správce je dobře známý identifikátor SID.
Systém Windows poskytuje mechanismus v jádru pro převod mezi identifikátory SID a uživatelskými jmény v rámci prostředí jádra. Tato volání funkcí jsou k dispozici z ovladače ksecdd , který implementuje tyto funkce pomocí pomocných služeb uživatelského režimu. Jejich použití v systémech souborů proto musí dodržovat obvyklá pravidla pro komunikaci se službami v uživatelském režimu. Tato volání se nedají použít při vstupně-výstupních operacích stránkovacího souboru.
Mezi tyto funkce patří:
SecMakeSPN vytvoří řetězec názvu poskytovatele služeb, který lze použít při komunikaci s konkrétními poskytovateli služeb zabezpečení.
SecMakeSPNEx je rozšířená verze SecMakeSPN , která byla zavedena v systému Windows XP.
SecMakeSPNEx2 je rozšířená verze SecMakeSPNEx , která je k dispozici od systému Windows Vista a Windows Server 2008.
SecLookupAccountSid vrátí název účtu pro zadaný identifikátor SID.
SecLookupAccountName načte identifikátor SID pro zadaný název účtu.
SecLookupWellKnownSid vrátí správný identifikátor SID pro zadaný dobře známý typ SID. Tato funkce je dostupná ve Windows Serveru 2003 a novějším.
Kromě toho může jakýkoli ovladač jádra vytvořit identifikátor SID pomocí následujících standardních rutin knihovny runtime:
RtlInitializeSid inicializuje vyrovnávací paměť pro nový identifikátor SID.
RtlLengthSid určuje velikost identifikátoru SID uloženého v dané vyrovnávací paměti.
RtlValidSid určuje, zda daná vyrovnávací paměť SID je platná formátovaná vyrovnávací paměť.
RtlLengthSid a RtlValidSid předpokládají, že je přítomna pevná hlavička identifikátoru SID o velikosti 8 bajtů. Ovladač by proto měl před voláním těchto funkcí zkontrolovat minimální délku hlavičky SID.
I když existuje několik dalších funkcí RTL, tento seznam poskytuje primární funkce nezbytné při vytváření identifikátoru SID.
Následující příklad kódu ukazuje, jak vytvořit identifikátor SID pro entitu "local system". Jednodušší funkci SecLookupWellKnownSid zavedenou v systému Windows Server 2003 lze použít také.
{
//
// 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);
}
}
Následující příklad kódu ukazuje, jak vytvořit SID pomocí funkce SecLookupWellKnownSid pro entitu "local 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ěkterý z těchto přístupů je platný, i když je upřednostňovaný druhý kód. Tyto příklady kódu používají místní vyrovnávací paměti pro ukládání identifikátoru SID. Tyto vyrovnávací paměti nelze použít mimo kontext aktuálního volání. Pokud je potřeba trvalá vyrovnávací paměť SID, měla by být vyrovnávací paměť přidělena z paměti fondu.