Compartilhar via


Criando uma DLL de plug-in do adaptador DualEngine

A API do DualEngine só pode ser usada de dentro do processo de Explorer da Internet. Portanto, para usar a API DualEngine, você deve criar uma DLL de plug-in que a Internet Explorer carrega. Essa DLL hospeda seu código que usa a API DualEngine, bem como qualquer código necessário para se comunicar com seu aplicativo main; é por isso que ele é chamado de adaptador.

Para que a Internet Explorer carregue com êxito sua DLL, faça o seguinte.

Desbloquear o Recurso de Acesso Limitado

A API DualEngine é um LAF (Recurso de Acesso Limitado); ou seja, um recurso que precisa ser desbloqueado antes de poder ser usado. Para obter mais informações sobre a implementação, consulte Classe LimitedAccessFeatures. Para solicitar um token de desbloqueio, entre em contato com Suporte da Microsoft.

A API dualengine não é um LAF típico, no que Windows.ApplicationModel.TryUnlockFeature não é usado para desbloquear o recurso. Isso ocorre porque o LAF normalmente usa a identidade do aplicativo do processo de chamada para conceder acesso e, como uma DLL de plug-in, isso sempre será Explorer da Internet. Portanto, para desbloquear a API, você precisa chamar DualEngineSessionFactory::TryUnlockFeature.

Além disso, a identidade do seu aplicativo deve ser fornecida à Internet Explorer por meio de uma cadeia de caracteres de recurso específica que está definida em sua DLL. Você pode definir o valor em seu arquivo de recurso da seguinte maneira:

IDENTITY LIMITEDACCESSFEATURE { L"ExampleApp_6v1kqc8g0gcae" }

Sua cadeia de caracteres de identidade específica será fornecida pela Microsoft quando o acesso LAF for concedido.

Implementar exportações de funções

A DLL do adaptador deve implementar as seguintes exportações de função:

  • DualEngineInitialize
  • DualEngineReady

Essas exportações são chamadas pela Internet Explorer ao carregar sua DLL. Eles fornecem os objetos de fábrica para criar objetos de API DualEngine.

Essas exportações são chamadas do thread main do processo de Explorer da Internet, portanto, fazer qualquer processamento de longo prazo dentro das exportações interromperá o Explorer da Internet. Portanto, para lidar com qualquer trabalho de execução longa, você deve criar um novo thread.

DualEngineInitialize

HRESULT APIENTRY DualEngineInitialize(DualEngineSessionFactory* pSessionFactory, PCWSTR pipeName)
Parâmetros
  • pSessionFactory O objeto de fábrica a ser usado para acessar a API do DualEngine.
  • pipeNameUma cadeia de caracteres que foi passada para a Internet Explorer por meio do -DualEnginePipe sinalizador de linha de comando.

Essa exportação é chamada imediatamente após o Explorer da Internet carregar com êxito a DLL. Essa é sua primeira chance de configurar tudo o que for necessário para seu aplicativo.

É aqui que você normalmente configura a comunicação entre a DLL do adaptador e seu aplicativo host. A pipeName cadeia de caracteres é fornecida para essa finalidade. Apesar do nome, a pipeName cadeia de caracteres não precisa ser um nome de pipe; é simplesmente uma cadeia de caracteres passada para o adaptador com base no valor do sinalizador de linha de comando com o qual a -DualEnginePipe Internet Explorer foi iniciada e não tem outro significado semântico.

Embora o pSessionFactory objeto seja fornecido nesta chamada, ele ainda não é válido para chamarGetVersionedBrowserSession, pois, neste momento, o Explorer da Internet não está pronto para criar Sessões.

DualEngineReady

HRESULT APIENTRY DualEngineReady()

Essa exportação é chamada depois que o Internet Explorer tiver concluído toda a configuração inicial e a API estiver pronta para uso. Agora é possível chamar GetVersionedBrowserSession e obter o objeto Session, supondo que uma chamada TryUnlockFeature bem-sucedida tenha sido feita.

Ignorar a assinatura da DLL do adaptador

O Explorer da Internet tem um requisito de que, para que uma DLL do adaptador seja carregada, ela deve ser assinada com uma assinatura confiável. Para fins de teste e desenvolvimento, esse marcar pode ser ignorado, ativando TestSigning para o dispositivo em que você está testando, da seguinte maneira:

Bcdedit.exe -set TESTSIGNING ON