Compartilhar via


Objetos COM fora do processo para drivers WIA

Se um driver chamar CoCreatInstance (descrito na documentação SDK do Microsoft Windows) em um componente fora do processo, essa chamada falhará, a menos que o componente tenha as permissões apropriadas definidas para permitir o acesso ao driver.

Consulte os livros de programação COM ou a documentação online para obter informações detalhadas sobre o modelo de segurança do COM. Veja a seguir uma breve explicação.

Há dois tipos de permissões associadas a componentes COM fora do processo:

  • Permissões de inicialização

    As permissões de inicialização indicam quem tem permissão para iniciar o componente COM se ele não estiver em execução no momento. Por exemplo, se o componente for implementado em um servidor local que não está em execução, chamar CoCreateInstance para esse componente resultará em COM tentando iniciar o servidor local (supondo que o chamador tenha permissão para iniciá-lo).

  • Permissões de acesso

    As permissões de acesso indicam quem tem permissão para chamar nesse processo para recuperar as interfaces COM para esses componentes COM.

    Permissões de inicialização e permissões de acesso não precisam corresponder. Por exemplo, as permissões de inicialização só podem ser definidas como Administradores, mas as permissões de acesso podem ser definidas como Usuários Interativos e Administradores. Ou os administradores podem receber permissão para iniciar o servidor COM, mas os usuários regulares só poderão usar os componentes se o servidor COM já estivesse em execução.

Uma boa prática é armazenar as permissões de inicialização e acesso para seus servidores COM no local apropriado sob a subchave do Registro AppId do componente. Isso permite que os administradores alterem essas permissões, se necessário, usando a ferramenta de gerenciamento dos Serviços de Componentes. Para fazer com que o servidor COM use essas permissões de acesso em tempo de execução, chame CoInitializeSecurity (descrito na documentação do SDK do Windows) com o sinalizador EOAC_APPID, passando o AppId do componente. Isso faz com que o COM acesse a subchave AppId do componente no registro e use as permissões definidas nas entradas AccessPermission e LaunchPermission .