Definindo a segurança em todo o processo com o CoInitializeSecurity
A função CoInitializeSecurity permite controlar cenários de segurança complexos definindo a segurança de um aplicativo programaticamente. Este tópico descreve cenários em que você pode usar CoInitializeSecurity e fornece alguns detalhes sobre como usá-lo.
Há várias razões pelas quais você pode querer usar CoInitializeSecurity para definir a segurança de todo o processo em seu programa. Por exemplo, embora você possa definir o nível de autenticação e as permissões de acesso para o aplicativo usando dcomcnfg.exe, o nível de representação padrão para o computador pode não ser o desejado para o processo. A única maneira de alterar essa configuração para seu processo é chamar CoInitializeSecurity.
Se desejar usar o provedor de segurança Schannel, você deverá especificá-lo como um serviço de autenticação em uma chamada para CoInitializeSecurity.
Outro cenário comum no qual você pode definir a segurança em todo o processo programaticamente é quando você gostaria de definir a segurança padrão para todo o processo, mas você tem um ou mais objetos dentro desse processo que expõem interfaces com requisitos de segurança especiais. Nesse caso, você pode chamar CoInitializeSecurity para definir a segurança para o processo, permitindo que o COM manipule a maioria das verificações de segurança, e você pode chamar outros métodos para definir a segurança para os objetos com necessidades especiais de segurança. A chamada desses métodos e funções é descrita em Definindo a segurança no nível de proxy da interface.
Se seu aplicativo tiver requisitos de segurança muito especializados, como permitir que determinados grupos acessem objetos diferentes, dependendo da hora do dia, convém lidar com toda a segurança programaticamente, garantindo que o COM não faça nenhuma verificação automática para você. Para fazer isso, você deve chamar CoInitializeSecurity, definindo o parâmetro dwAuthnLevel como none e o parâmetro pVoid como NULL. Se você tiver seu próprio pacote de segurança, também precisará registrá-lo no parâmetro pAuthnSvc . Em seguida, você pode lidar com toda a sua própria segurança programaticamente por meio de chamadas para a interface em nível de proxy e funções descritas em Definindo a segurança no nível de proxy da interface.
O CoInitializeSecurity oferece um rico conjunto de recursos. Se você chamar CoInitializeSecurity, os valores do Registro serão ignorados e os valores de inicialização de segurança que você passar para a chamada serão usados. Dependendo do resultado desejado, o primeiro parâmetro, pVoid, pode apontar para três tipos diferentes de valores: um SECURITY_DESCRIPTOR , um objeto IAccessControl ou um ponteiro para um AppID. Na maioria dos casos, você usará funções do Windows para criar um SECURITY_DESCRIPTOR para o qual o pVoid apontará.
No entanto, pVoid também pode apontar para um objeto IAccessControl.
Para indicar a CoInitializeSecurity que você está passando um objeto IAccessControl para pVoid, você deve passar o valor EOAC_ACCESS_CONTROL para o parâmetro dwCapabilities. Como o CoInitializeSecurity armazena em cache os resultados das verificações de acesso, a lista de controle de acesso não deve ser alterada após chamar CoInitializeSecurity.
Outro tipo de valor que você pode passar para o parâmetro pVoid é um ponteiro para um GUID, que é o AppID do seu aplicativo. Se pVoid for um ponteiro para um AppID, você deverá especificar EOAC_APPID no parâmetro pCapabilities para que a função saiba qual valor esperar em pVoid. Se pVoid aponta para um AppID, CoInitializeSecurity usa apenas o registro para valores de autenticação e ignora todos os outros parâmetros para CoInitializeSecurity.
Tópicos relacionados