Compartir a través de


Lectura de un conjunto de derechos de acceso de control en la ACL de un objeto

Con ADSI, lee una ACE de acceso de control igual que cualquier otra ACE en una ACL. Tenga en cuenta que también puede usar las API de seguridad de Win32 para leer las ACL en objetos de directorio. Sin embargo, los derechos de acceso de control usan las propiedades de la interfaz IADsAccessControlEntry de una manera específica para conceder y denegar derechos de acceso de control:

  • AccessMask debe contener ADS_RIGHT_DS_CONTROL_ACCESS.
  • El valor flags es ADS_FLAG_OBJECT_TYPE_PRESENT.
  • ObjectType es la forma de cadena del atributo rightsGUID del derecho de acceso de control. El formato de cadena del GUID es el mismo formato de cadena que la función StringFromGUID2 COM Library.
  • AceType es ADS_ACETYPE_ACCESS_ALLOWED_OBJECT para conceder al administrador el derecho de acceso de control o ADS_ACETYPE_ACCESS_DENIED_OBJECT para denegar al administrador el derecho de acceso de control.
  • El administrador es la entidad de seguridad; es el usuario, el grupo, el equipo, etc., al que se aplica la ACE.

Use el procedimiento siguiente para leer una ACE para un objeto ADSI. El procedimiento siguiente se aplica a las aplicaciones de C y C++.

Para leer una ACE para un objeto ADSI

  1. Obtiene un puntero de interfaz de IADs al objeto .
  2. Use el método IADs::Get para obtener el descriptor de seguridad del objeto. El nombre de la propiedad que contiene el descriptor de seguridad es "nTSecurityDescriptor". La propiedad se devolverá como variant que contiene un puntero IDispatch . Tenga en cuenta que el miembro vt está VT_DISPATCH. Llame a QueryInterface en ese puntero IDispatch para obtener una interfaz IADsSecurityDescriptor para usar los métodos de esa interfaz para acceder a la ACL del descriptor de seguridad.
  3. Use el método IADsSecurityDescriptor::get_DiscretionaryAcl para obtener la ACL. El método devuelve un puntero IDispatch . Llame a QueryInterface en ese puntero IDispatch para obtener una interfaz IADsAccessControlList para usar los métodos de esa interfaz para acceder a las ACL individuales.
  4. Use el método IADsAccessControlList::get__NewEnum para enumerar los ASE. El método devuelve un puntero IUnknown . Llame a QueryInterface en ese puntero IUnknown para obtener una interfaz IEnumVARIANT .
  5. Use el método IEnumVARIANT::Next para enumerar los ACL en la ACL. La propiedad se devuelve como variant que contiene un puntero IDispatch . Tenga en cuenta que el miembro vt está VT_DISPATCH. Llame a QueryInterface en ese puntero IDispatch para obtener una interfaz IADsAccessControlEntry para leer la ACE.
  6. Llame al método IADsAccessControlEntry::get_AccessMask para obtener AccessMask y compruebe que el valor accessMask de la marca ADS_RIGHT_DS_CONTROL_ACCESS . Si tiene esta marca, la ACE contiene un derecho de acceso de control.
  7. Llame al método IADsAccessControlEntry::get_Flags para obtener la marca del tipo de objeto.
  8. Compruebe el valor De marcas para la marca de ADS_FLAG_OBJECT_TYPE_PRESENT . Si Flags está establecido en ADS_FLAG_OBJECT_TYPE_PRESENT, llame al método IADsAccessControlEntry::get_ObjectType para obtener una cadena que contenga los derechosGUID del derecho de acceso de control al que se aplica la ACE.
  9. Llame al método IADsAccessControlEntry::get_AceType para obtener el tipo ACE. El tipo será un ADS_ACETYPE_ACCESS_ALLOWED_OBJECT para conceder al administrador el derecho de acceso de control o ADS_ACETYPE_ACCESS_DENIED_OBJECT para denegar el derecho de acceso de control.
  10. Llame al método IADsAccessControlEntry::get_Trustee para obtener la entidad de seguridad; es el usuario, el grupo, el equipo, etc. a los que se aplica la ACE.
  11. Cuando termine con las cadenas ObjectType y Trustee , use SysFreeString para liberar la memoria de esas cadenas.
  12. Cuando termine con las interfaces, llame a Release para disminuir o liberar todas las referencias de interfaz.