Share via


Establecer Process-Wide seguridad con CoInitializeSecurity

La función CoInitializeSecurity permite controlar escenarios de seguridad complejos estableciendo la seguridad para una aplicación mediante programación. En este tema se describen los escenarios en los que puede usar CoInitializeSecurity y se proporcionan algunos detalles sobre cómo se usa.

Hay varias razones por las que es posible que quiera usar CoInitializeSecurity para establecer la seguridad en todo el proceso dentro del programa. Por ejemplo, aunque puede establecer el nivel de autenticación y los permisos de acceso para la aplicación mediante dcomcnfg.exe, es posible que el nivel de suplantación predeterminado para el equipo no sea el que desee para el proceso. La única manera de cambiar esta configuración para el proceso es llamar a CoInitializeSecurity.

Si desea usar el proveedor de seguridad de Schannel, debe especificarlo como un servicio de autenticación en una llamada a CoInitializeSecurity.

Otro escenario común en el que puede establecer la seguridad en todo el proceso mediante programación es cuando desea establecer la seguridad predeterminada para todo el proceso, pero tiene uno o varios objetos dentro de ese proceso que exponen interfaces con requisitos de seguridad especiales. En este caso, puede llamar a CoInitializeSecurity para establecer la seguridad del proceso, lo que permite que COM controle la mayoría de las comprobaciones de seguridad y puede llamar a otros métodos para establecer la seguridad de los objetos con necesidades de seguridad especiales. La llamada a estos métodos y funciones se describe en Establecer seguridad en el nivel de proxy de interfaz.

Si la aplicación tiene requisitos de seguridad muy especializados, como permitir que determinados grupos accedan a diferentes objetos en función de la hora del día, es posible que quiera controlar toda la seguridad mediante programación, asegurándose de que COM no realiza ninguna comprobación automática. Para ello, debe llamar a CoInitializeSecurity, estableciendo el parámetro dwAuthnLevel en none y el parámetro pVoid en NULL. Si tiene su propio paquete de seguridad, también tendría que registrarlo en el parámetro pAuthnSvc . A continuación, puede controlar toda su propia seguridad mediante programación a través de llamadas a la interfaz de nivel de proxy y las funciones descritas en Establecer seguridad en el nivel de proxy de interfaz.

CoInitializeSecurity ofrece un amplio conjunto de funcionalidades. Si llama a CoInitializeSecurity, los valores del Registro se omiten y los valores de inicialización de seguridad que pasa a la llamada se usan en su lugar. Según el resultado que desee, el primer parámetro, pVoid, puede apuntar a tres tipos diferentes de valores: un SECURITY_DESCRIPTOR , un objeto IAccessControl o un puntero a un AppID. En la mayoría de los casos, usará funciones de Windows para crear una SECURITY_DESCRIPTOR a la que apuntará pVoid .

Sin embargo, pVoid también puede apuntar a un objeto IAccessControl .

Para indicar a CoInitializeSecurity que está pasando un objeto IAccessControl a pVoid, debe pasar el valor de EOAC_ACCESS_CONTROL al parámetro dwCapabilities . Dado que CoInitializeSecurity almacena en caché los resultados de las comprobaciones de acceso, la lista de control de acceso no debe cambiarse después de llamar a CoInitializeSecurity.

Otro tipo de valor que puede pasar al parámetro pVoid es un puntero a un GUID, que es el AppID de la aplicación. Si pVoid es un puntero a un AppID, debe especificar EOAC_APPID en el parámetro pCapabilities para que la función sepa qué valor esperar en pVoid. Si pVoid apunta a un AppID, CoInitializeSecurity solo usa el Registro para los valores de autenticación y omite todos los demás parámetros en CoInitializeSecurity.

Establecer Process-Wide seguridad