Udostępnij przez


Deskryptory bezwzględne i Self-Relative zabezpieczeń

Deskryptor zabezpieczeńmoże znajdować się w bezwzględnym lub formacie względnym. W formacie bezwzględnym deskryptor zabezpieczeń zawiera wskaźniki do swoich informacji, a nie samą informację. W formacie względnym deskryptor zabezpieczeń przechowuje strukturę SECURITY_DESCRIPTOR i skojarzone informacje o zabezpieczeniach w ciągłym bloku pamięci. Aby określić, czy deskryptor zabezpieczeń jest względny, czy bezwzględny, wywołaj funkcję GetSecurityDescriptorControl i sprawdź flagę SE_SELF_RELATIVE parametru SECURITY_DESCRIPTOR_CONTROL. Możesz użyć funkcji MakeSelfRelativeSD i MakeAbsoluteSD do konwersji między tymi dwoma formatami.

Format bezwzględny jest przydatny podczas tworzenia deskryptora zabezpieczeń i ma wskaźniki do wszystkich składników, na przykład gdy są dostępne ustawienia domyślne dla właściciela, grupy i uznaniowej listy ACL. W takim przypadku można wywołać funkcję InitializeSecurityDescriptor w celu zainicjowania struktury SECURITY_DESCRIPTOR, a następnie wywołać funkcje, takie jak SetSecurityDescriptorDacl w celu przypisania wskaźników ACL i SID do deskryptora zabezpieczeń.

W formacie względnym deskryptor zabezpieczeń zawsze zaczyna się od struktury SECURITY_DESCRIPTOR, ale inne składniki deskryptora zabezpieczeń mogą podążać za strukturą w dowolnej kolejności. Zamiast używać adresów pamięci, składniki deskryptora zabezpieczeń są identyfikowane przez przesunięcia od początku deskryptora. Ten format jest przydatny, gdy deskryptor zabezpieczeń musi być przechowywany na dysku, przesyłany za pomocą protokołu komunikacyjnego lub kopiowany w pamięci.

Z wyjątkiem MakeAbsoluteSD, wszystkie funkcje zwracające deskryptor zabezpieczeń robią to przy użyciu formatu względnego. Deskryptory zabezpieczeń przekazywane jako argumenty funkcji mogą być formą względną lub bezwzględną. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją funkcji.