CServiceModule::Run

Depois de ser chamado, primeiro execute armazena ID de thread. do serviço O serviço irá utilizar este ID para fechar-se enviando uma mensagem WM_QUIT usando a função de API do Win32, PostThreadMessage.

Em seguida, executar chama a função de API do Win32, CoInitializeEx. Por padrão, executar passa o Sinalizar COINIT_MULTITHREADED para a função. Este sinalizador indica que o programa deve ser um servidor segmentação livre.

Agora você pode especificar a segurança usando CSecurityDescriptor. Essa classe simplifica significativamente a tarefa de criar e fazer alterações para a lista de Controlarar de Acessar discricional (DACL) — uma lista de entradas de Controlarar de acessar (ACEs), onde cada ACE define o acesso a um objeto Win32.

Por padrão, o AppWizard de COM ATL gera uma chamada para a função de membro de InitializeFromThreadToken de CSecurityDescriptor. Isso inicializa o descritor de segurança objeto para uma DACL nula, o que significa que qualquer usuário tenha acesso ao seu objeto.

A maneira mais fácil para alterar o acesso do usuário é com Negar e Permitir funções de membro de CSecurityDescriptor. Essas funções adicionar uma ACE à DACL existente. No entanto, Negar sempre tem prioridade desde que Negar adiciona a ACE para o início da DACL, enquanto Permitir adiciona-lo ao final. Negar e Permitir passam o nome de usuário como o primeiro parâmetro e os direitos de acesso (normalmente, COM_RIGHTS_EXECUTE) como o segundo.

Lembre-se de que a DACL nula criada por InitializeFromThreadToken concede a todos os usuários acesso para o objeto COM. No entanto, tão logo você chamar Permitir adicionar uma ACE, só que especificado usuário terá acesso. O código a seguir mostra uma chamada para Permitir:

CSecurityDescriptor sd;
SD.InitializeFromThreadToken ();

se (bAllowOneUser)
{
 nbsp; SD.Permitir o ("MYDOMAI&N\\myuser", COM_RIGHTS_EXECUTE);
}
CoInitializeSecurity (sd, -1, NULL, NULL,
                     RPC_C_AUTHN_LEVEL_PKT,
                     RPC_C_IMP_LEVEL_IMPERSONATE,
                     NULO, EOAC_NONE, NULL)

Se a variável, bAllowOneUser , é verdade, então somente a um especificado usuário tem acesso porque é apenas desse usuário ACE na DACL. Se bAllowOneUser for falso, então todos os usuários têm acesso porque a DACL é null.

Se você não quiser que o serviço para especificar sua própria segurança, remover a chamada para a função de API do Win32, CoInitializeSecuritye COM vontade, em seguida, determinar as configurações de segurança do registro. É uma maneira conveniente de definir as configurações de registro com o utilitário DCOMCNFG discutido mais adiante neste artigo.

Uma vez que segurança é especificada, o objeto é registrado com para que novos clientes podem conectar-se ao programa. Finalmente, o programa informa o SCM que ele está sendo executado e o programa insere um loop de mensagem. O programa permanece em execução até que ele envia uma mensagem sair no desligamento de serviço.

Para obter mais informações sobre segurança do Windows NT, consulte o artigo do MSDN, "Segurança do Windows NT na teoria e na prática."

Index