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:

  1. 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.
  2. 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.
  3. Use el método IADsSecurityDescriptor::p ut_Control para controlar si el objeto hereda los archivos DACL y SACL de su contenedor primario.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. Siga los pasos del 4 al 8 para crear la SACL para el nuevo descriptor de seguridad.
  10. 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 DACLs vacías.
  11. Use el método IADsSecurityDescriptor::p ut_SystemAcl para establecer la SACL.
  12. 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 .
  13. Obtenga un puntero de interfaz iaDs al objeto .
  14. 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.
  15. Use el método IADs::SetInfo para actualizar la propiedad en el objeto del directorio.