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.
Możesz użyć listy kontroli dostępu (DACL) obiektu kontenera, aby kontrolować, kto jest uprawniony do tworzenia obiektów podrzędnych w kontenerze. Może to być ważne, ponieważ twórca obiektu jest zwykle przypisywany jako właściciel obiektu, a właściciel obiektu może kontrolować dostęp do obiektu.
Różne typy obiektów kontenera mają określone prawa dostępu, które determinują możliwość tworzenia obiektów podrzędnych. Na przykład wątek musi mieć dostęp KEY_CREATE_SUB_KEY do klucza rejestru, aby utworzyć podklucz w kluczu. Lista DACL klucza rejestru może zawierać elementy ACL, które zezwalają na dostęp lub odmawiają tego prawa dostępu. Podobnie system NTFS obsługuje prawa dostępu FILE_ADD_FILE i FILE_ADD_SUBDIRECTORY do kontrolowania możliwości tworzenia plików lub katalogów w danym katalogu.
Prawo dostępu ADS_RIGHT_DS_CREATE_CHILD kontroluje tworzenie obiektów podrzędnych w obiekcie usługi Active Directory (DS). Jednak obiekty DS mogą zawierać różne typy obiektów, więc system obsługuje dokładnszy stopień szczegółowości kontroli. Można użyć obiektowych specyficznych ACEs , aby zezwolić lub odmówić prawa do utworzenia określonego typu obiektu podrzędnego. Możesz zezwolić użytkownikowi na utworzenie jednego typu obiektu podrzędnego, jednocześnie uniemożliwiając użytkownikowi tworzenie innych typów obiektów podrzędnych.
W poniższym przykładzie użyto funkcji SetEntriesInAcl, aby dodać ACE specyficzną dla obiektu do listy ACL. ACE przyznaje uprawnienie do tworzenia określonego typu obiektu podrzędnego. grfAccessPermissions składowej struktury EXPLICIT_ACCESS jest ustawiona na ADS_RIGHT_DS_CREATE_CHILD, aby wskazać, że usługa ACE kontroluje tworzenie obiektu podrzędnego. Członek ObjectsPresent w strukturze OBJECTS_AND_SID ma wartość ACE_OBJECT_TYPE_PRESENT, co wskazuje, że członek ObjectTypeGuid zawiera prawidłowy GUID. Identyfikator GUID identyfikuje typ obiektu podrzędnego, którego tworzenie jest kontrolowane.
W poniższym przykładzie pOldDACL musi być prawidłowym wskaźnikiem do istniejącej struktury ACL . Aby uzyskać informacje na temat tworzenia struktury ACL dla obiektu, zobacz Creating a Security Descriptor for a New Object in C++.
DWORD dwRes;
PACL pOldDACL = NULL;
PACL pNewDACL = NULL;
GUID guidChildObjectType = GUID_NULL; // GUID of object to control creation of
PSID pTrusteeSID = NULL; // trustee for new ACE
EXPLICIT_ACCESS ea;
OBJECTS_AND_SID ObjectsAndSID;
// pOldDACL must be a valid pointer to an existing ACL structure.
// guidChildObjectType must be the GUID of an object type
// that is a possible child of the object associated with pOldDACL.
// Initialize an OBJECTS_AND_SID structure with object type GUIDs and
// the SID of the trustee for the new ACE.
ZeroMemory(&ObjectsAndSID, sizeof(OBJECTS_AND_SID));
ObjectsAndSID.ObjectsPresent = ACE_OBJECT_TYPE_PRESENT;
ObjectsAndSID.ObjectTypeGuid = guidChildObjectType;
ObjectsAndSID.InheritedObjectTypeGuid = GUID_NULL;
ObjectsAndSID.pSid = (SID *)pTrusteeSID;
// Initialize an EXPLICIT_ACCESS structure for the new ACE.
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
ea.grfAccessPermissions = ADS_RIGHT_DS_CREATE_CHILD;
ea.grfAccessMode = GRANT_ACCESS;
ea.grfInheritance= NO_INHERITANCE;
ea.Trustee.TrusteeForm = TRUSTEE_IS_OBJECTS_AND_SID;
ea.Trustee.ptstrName = (LPTSTR) &ObjectsAndSID;
// Create a new ACL that merges the new ACE
// into the existing DACL.
dwRes = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);