DualEngine API は、インターネット エクスプローラー プロセス内からのみ使用できます。 したがって、DualEngine API を使用するには、インターネットエクスプローラー読み込むプラグイン DLL を作成する必要があります。 この DLL は、DualEngine API を使用するコードと、メイン アプリケーションとの通信に必要なコードをホストします。そのため、 アダプターと呼ばれます。
インターネットエクスプローラー DLL を正常に読み込むには、次の操作を行います。
制限付きアクセス機能のロックを解除する
DualEngine API は、制限付きアクセス機能 (LAF) です。つまり、使用する前にロックを解除する必要がある機能です。 実装の詳細については、「 LimitedAccessFeatures クラス」を参照してください。 ロック解除トークンを要求するには、Microsoft サポートにお問い合わせください。
DualEngine API は一般的な LAF ではありません。その Windows.ApplicationModel.TryUnlockFeature を使用して機能のロックを解除することはできません。 これは、LAF は通常、呼び出し元プロセスのアプリケーション ID を使用してアクセスを許可するためであり、プラグイン DLL として、これは常にインターネット エクスプローラーになります。 そのため、API のロックを解除するには、 DualEngineSessionFactory::TryUnlockFeature を呼び出す必要があります。
さらに、アプリケーションの ID は、DLL に設定されている特定のリソース文字列を介してインターネット エクスプローラーに提供する必要があります。 リソース ファイルの値は、次のように設定できます。
IDENTITY LIMITEDACCESSFEATURE { L"ExampleApp_6v1kqc8g0gcae" }
LAF アクセスが許可されると、特定の ID 文字列が Microsoft によって提供されます。
関数のエクスポートを実装する
アダプター DLL は、次の関数エクスポートを実装する必要があります。
DualEngineInitializeDualEngineReady
これらのエクスポートは、DLL の読み込み時にインターネット エクスプローラーによって呼び出されます。 これらは、DualEngine API オブジェクトを作成するためのファクトリ オブジェクトを提供します。
これらのエクスポートは、インターネット エクスプローラー プロセスのメイン スレッドから呼び出されるため、エクスポート内で長期的な処理を行うと、インターネット エクスプローラーが停止します。 そのため、実行時間の長い作業を処理するには、新しいスレッドを作成する必要があります。
DualEngineInitialize
HRESULT APIENTRY DualEngineInitialize(DualEngineSessionFactory* pSessionFactory, PCWSTR pipeName)
パラメーター
-
pSessionFactoryDualEngine API へのアクセスに使用するファクトリ オブジェクト。 -
pipeName-DualEnginePipeコマンド ライン フラグを使用してインターネット エクスプローラーに渡された文字列。
このエクスポートは、インターネット エクスプローラーが DLL を正常に読み込んだ直後に呼び出されます。 これは、アプリケーションに必要なものを設定する最初の機会です。
ここでは、通常、アダプター DLL とホスト アプリ間の通信を設定します。 この目的のために、 pipeName 文字列が提供されます。 その名前にもかかわらず、pipeName文字列はパイプ名である必要はありません。これは、インターネット エクスプローラーが起動した-DualEnginePipeコマンド ライン フラグの値に基づいてアダプターに渡される文字列であり、他の意味を持ちません。
pSessionFactory オブジェクトはこの呼び出しで提供されますが、この時点ではインターネット エクスプローラーが Sessions を作成する準備ができていないため、GetVersionedBrowserSessionを呼び出すことはできません。
DualEngineReady
HRESULT APIENTRY DualEngineReady()
このエクスポートは、インターネット エクスプローラーの初期セットアップがすべて完了し、API を使用する準備ができた後に呼び出されます。
TryUnlockFeatureの呼び出しが成功したと仮定して、GetVersionedBrowserSessionを呼び出して Session オブジェクトを取得できるようになりました。
アダプター DLL の署名をバイパスする
インターネット エクスプローラーには、アダプター DLL を読み込むには、信頼された署名で署名する必要があるという要件があります。 テストと開発の目的で、このチェックをバイパスするには、次のように、テスト対象のデバイスのTestSigningをオンにします。
Bcdedit.exe -set TESTSIGNING ON