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 .