Definindo a segurança em todo o processo por meio do Registro

Se você deseja definir a segurança para um processo inteiro, uma solução é definir os níveis de segurança desejados no Registro. Se seu aplicativo não puder chamar CoInitializeSecurity ou se você preferir não usar segurança programática, essa pode ser uma boa opção. Se você decidir definir a segurança em todo o processo usando o registro, você deve estar ciente de que, se você chamar CoInitializeSecurity dentro do seu programa, COM usará os valores em CoInitializeSecurity e ignorará os valores do Registro.

Há duas maneiras de definir a segurança no registro para seu aplicativo:

  • Você pode usar o Dcomcnfg.exe, que fornece uma interface de usuário simples para modificar valores de segurança. Todos os servidores COM podem ser configurados usando Dcomcnfg.exe. Para obter mais informações, consulte Definindo a segurança em todo o processo usando DCOMCNFG. No entanto, os aplicativos cliente normalmente não aparecem no Dcomcnfg.exe a menos que o cliente crie um GUID e o insira no Registro.
  • Você pode definir valores de segurança sob a chave AppID para o aplicativo. O restante deste tópico explica como definir a segurança no Registro usando a chave AppID .

Um AppID é um GUID que representa um processo de servidor para uma ou mais classes. Cada classe está associada a exatamente um AppID, e AppIDs podem ser atribuídos somente a EXEs. DLLs não obtêm AppIDs, a menos que eles estão sendo executados em um substituto e, em seguida, é o processo substituto que tem o AppID. Se várias DLLs forem carregadas em um substituto, cada substituto terá apenas um AppID.

Para alguns servidores COM, o código de registro gera um AppID e coloca entradas no registro que mapeiam o AppID para o nome do executável. Mas alguns servidores COM não fornecem essa funcionalidade. No entanto, se o código de registro do servidor adicionar uma entrada para HKCR\CLSID{ServerCLSID}\LocalServer32 quando dcomcnfg.exe for executado, ele adicionará automaticamente um AppID para o CLSID.

Para um cliente COM que não é um servidor, esse mapeamento não é criado porque o cliente nunca está registrado. Portanto, para definir a segurança usando a chave AppID, o cliente deve criar as entradas de registro necessárias, programaticamente usando as funções do Registro ou usando regedit.

Se você decidir definir a segurança em todo o processo no Registro sob a chave AppID, esteja ciente de que há dois valores nomeados sob a chave AppID que você pode definir sem ter permissões de administrador:

Os valores AuthenticationLevel e AccessPermission são definidos independentemente e têm valores padrão separados. Se o valor AuthenticationLevel não estiver presente, o valor LegacyAuthenticationLevel será usado como padrão. Da mesma forma, se o valor AccessPermission não estiver presente, o valor DefaultAccessPermission será usado como padrão. No entanto, os valores AuthenticationLevel e AccessPermission estão inter-relacionados das seguintes maneiras:

  • Se AuthenticationLevel for nenhum, os valores AccessPermission e DefaultAccessPermission serão ignorados para esse aplicativo.
  • Se o AuthenticationLevel não estiver presente e o LegacyAuthenticationLevel não for nenhum, os valores AccessPermission e DefaultAccessPermission serão ignorados para esse aplicativo.

Definindo a segurança em todo o processo