Criando um plug-in de adaptador DualEngine DLL

A API DualEngine só pode ser usada de dentro do processo do Internet Explorer. Portanto, para usar a API DualEngine, você deve criar uma DLL de plug-in que o 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 principal; Por isso, ele é chamado de adaptador.

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

Desbloquear o recurso de Acesso Limitado

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

A API DualEngine não é um LAF típico, pois 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, sempre será o Internet Explorer. Portanto, para desbloquear a API, você precisa chamar DualEngineSessionFactory::TryUnlockFeature.

Além disso, a identidade do seu aplicativo deve ser fornecida ao Internet Explorer por meio de uma cadeia de caracteres de recurso específica definida na 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 a você pela Microsoft quando o acesso ao LAF for concedido.

Implementar exportações de função

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

  • DualEngineInitialize
  • DualEngineReady

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

Essas exportações são chamadas do thread principal do processo do Internet Explorer, portanto, fazer qualquer processamento de longo prazo dentro das exportações interromperá o Internet Explorer. Portanto, para lidar com qualquer trabalho de longa duração, 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 DualEngine.
  • pipeNameUma cadeia de caracteres que foi passada no Internet Explorer por meio do -DualEnginePipe sinalizador de linha de comando.

Essa exportação é chamada imediatamente após o Internet Explorer carregar a DLL com êxito. Esta é sua primeira chance de configurar qualquer coisa necessária para sua inscrição.

É aqui que você normalmente configuraria 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 tubo; é simplesmente uma cadeia de caracteres passada para o adaptador com base no valor do sinalizador de linha de comando com o qual o -DualEnginePipe Internet Explorer foi iniciado e não tem outro significado semântico.

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

DualEngineReady

HRESULT APIENTRY DualEngineReady()

Essa exportação é chamada depois que o Internet Explorer concluir 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 Internet Explorer tem um requisito de que, para que uma DLL de adaptador seja carregada, ela deve ser assinada com uma assinatura confiável. Para fins de teste e desenvolvimento, essa marca pode ser ignorada, ativando-se TestSigning para o dispositivo em que você está testando, da seguinte maneira:

Bcdedit.exe -set TESTSIGNING ON