Creación de descriptores de seguridad para nuevos objetos de directorio
Puede usar ADSI para crear un descriptor de seguridad y establecerlo como propiedad nTSecurityDescriptor de un nuevo objeto o usarlo para reemplazar la propiedad nTSecurityDescriptor de un objeto existente.
Para crear un descriptor de seguridad para un objeto:
- Use CoCreateInstance para crear el objeto COM adsi para el nuevo descriptor de seguridad y obtener un puntero de interfaz IADsSecurityDescriptor a ese objeto. Tenga en cuenta que el identificador de clase es CLSID_SecurityDescriptor.
- Use el método IADsSecurityDescriptor::p ut_Owner para establecer el propietario del objeto. El administrador de confianza es un usuario, grupo u otra entidad de seguridad. Una aplicación debe usar el valor de la propiedad adecuada del objeto de usuario o grupo del administrador de confianza al que se va a aplicar la ACE.
- Use el método IADsSecurityDescriptor::p ut_Control para controlar si el objeto hereda los archivos DACL y SACL de su contenedor primario.
- Use CoCreateInstance para crear el objeto COM ADSI para la DACL para el nuevo descriptor de seguridad y obtener un puntero de interfaz IADsAccessControlList a ese objeto. Tenga en cuenta que el identificador de clase es CLSID_AccessControlList.
- Para que cada ACE se agregue a la DACL, use CoCreateInstance para crear el objeto COM ADSI para la nueva ACE y obtener un puntero de interfaz IADsAccessControlEntry a ese objeto. Tenga en cuenta que el identificador de clase es CLSID_AccessControlEntry.
- Para que cada ACE se agregue a la DACL, establezca las propiedades de la ACE mediante los métodos de propiedad del objeto IADsAccessControlEntry de la ACE. Para obtener más información sobre las propiedades que se van a establecer en una ACE, vea Establecer derechos de acceso en un objeto.
- Para que cada ACE se agregue a la DACL, use el método QueryInterface en el objeto IADsAccessControlEntry para obtener un puntero IDispatch . El método IADsAccessControlList::AddAce requiere un puntero de interfaz IDispatch a la ACE.
- Para que cada ACE se agregue a la DACL, use IADsAccessControlList::AddAce para agregar la nueva ACE a la DACL. Tenga en cuenta que el orden de los ACA dentro de la ACL puede afectar a la evaluación del acceso al objeto. El acceso correcto al objeto puede requerir que cree una nueva ACL, agregue los ACL desde la ACL existente en el orden correcto a la nueva ACL y, a continuación, reemplace la ACL existente en el descriptor de seguridad por la nueva ACL. Para obtener más información, vea Order of ACEs in a DACL.
- Siga los pasos del 4 al 8 para crear la SACL para el nuevo descriptor de seguridad.
- Use el método IADsSecurityDescriptor::p ut_DiscretionaryAcl para establecer la DACL. Para obtener más información sobre las DACL, vea DACLs null y DACL vacías.
- Use el método IADsSecurityDescriptor::p ut_SystemAcl para establecer la SACL.
- Convierta el objeto IADsSecurityDescriptoren variant mediante el método QueryInterface del objeto IADsSecurityDescriptor para obtener una interfaz IDispatch . A continuación, establezca el miembro vt de VARIANT en VT_DISPATCH y establezca el miembro pdispVal del variant igual al puntero IDispatch .
- Obtenga un puntero de interfaz iaDs al objeto .
- Use el método IADs::P ut con "nTSecurityDescriptor" y variant creado anteriormente para escribir el nuevo descriptor de seguridad en la memoria caché de propiedades.
- Use el método IADs::SetInfo para actualizar la propiedad en el objeto del directorio.