Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
System Windows używa identyfikatora zabezpieczeń (SID) jako ostatecznej wartości, aby odróżnić jednostki zabezpieczeń od siebie. Na przykład unikatowy identyfikator zabezpieczeń jest przypisywany do każdego nowego konta utworzonego dla poszczególnych użytkowników w systemie. W przypadku systemu plików używany jest tylko ten identyfikator SID.
Na poniższej ilustracji przedstawiono strukturę identyfikatora zabezpieczeń.
Oprócz unikatowych identyfikatorów SID system Windows definiuje zestaw dobrze znanych identyfikatorów. Na przykład Administrator lokalny to dobrze znany identyfikator SID.
System Windows udostępnia mechanizm wewnątrz jądra do konwertowania między identyfikatorami SID i nazwami użytkowników w środowisku jądra. Te wywołania funkcji są dostępne ze sterownika ksecdd , który implementuje te funkcje przy użyciu usług pomocnika trybu użytkownika. W związku z tym ich użycie w systemach plików musi przestrzegać zwykłych reguł komunikacji z usługami trybu użytkownika. Tych wywołań nie można używać podczas operacji we/wy pliku stronicowania.
Niektóre z tych funkcji to:
SecMakeSPN tworzy ciąg nazwy dostawcy usług, który może być używany podczas komunikacji z określonymi dostawcami usług zabezpieczeń.
SecMakeSPNEx to rozszerzona wersja programu SecMakeSPN , która została wprowadzona w systemie Windows XP.
SecMakeSPNEx2 to rozszerzona wersja secMakeSPNEx , która jest dostępna począwszy od systemów Windows Vista i Windows Server 2008.
SecLookupAccountSid zwraca nazwę konta dla określonego identyfikatora SID.
SecLookupAccountName pobiera identyfikator SID dla określonej nazwy konta.
SecLookupWellKnownSid zwraca prawidłowy identyfikator SID dla określonego dobrze znanego typu SID. Ta funkcja jest dostępna w systemie Windows Server 2003 lub nowszym.
Ponadto każdy sterownik jądra może utworzyć identyfikator SID przy użyciu następujących standardowych procedur bibliotek środowiska uruchomieniowego:
RtlInitializeSid inicjuje bufor dla nowego identyfikatora SID.
RtlLengthSid określa rozmiar identyfikatora SID przechowywanego w danym buforze.
RtlValidSid określa, czy dany bufor SID jest prawidłowym sformatowanym buforem.
RtlLengthSid i RtlValidSid zakładają, że 8-bajtowy stały nagłówek identyfikatora SID jest obecny. Dlatego sterownik powinien sprawdzić minimalną długość nagłówka SID przed wywołaniem tych funkcji.
Chociaż istnieje kilka innych funkcji RTL, ta lista zawiera podstawowe funkcje niezbędne podczas tworzenia identyfikatora SID.
W poniższym przykładzie kodu pokazano, jak utworzyć identyfikator SID dla jednostki "system lokalny". Można również użyć prostszej funkcji SecLookupWellKnownSid wprowadzonej w systemie Windows Server 2003.
{
//
// 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);
}
}
W poniższym przykładzie kodu pokazano, jak utworzyć identyfikator SID przy użyciu funkcji SecLookupWellKnownSid dla jednostki "system lokalny":
{
UCHAR sidBuffer[128];
PISID localSid = (PISID) sidBuffer;
SIZE_T sidSize;
status = SecLookupWellKnownSid(WinLocalSid,
&localSid,
sizeof(sidBuffer),
&sidSize);
if (!NT_SUCCESS(status)) {
//
// error handling
//
}
}
Jedną z tych metod jest prawidłowa, chociaż ten ostatni kod jest preferowany. Te przykłady kodu używają lokalnych buforów do przechowywania identyfikatora SID. Buforów nie można używać poza bieżącym kontekstem wywołania. Jeśli bufor SID musi być trwały, bufor powinien zostać przydzielony z pamięci puli.