次の方法で共有


Miracast ユーザーモード ドライバー タスクによる Windows 8.1 での Miracast ワイヤレス ディスプレイのサポート

Note

Windows 10 (WDDM 2.0) 以降、オペレーティング システムには、任意の GPU で動作できる組み込みの Miracast スタックが付属しています。 Microsoft Miracast スタックと、Windows 10 以降の Miracast ディスプレイをサポートするためのドライバーとハードウェアの要件については、次のドキュメントを参照してください。

ドライバー開発者は、カスタム Miracast スタックを実装する必要がなくなりました。 Microsoft は、将来の Windows のバージョンでカスタム Miracast スタックのサポートを削除する可能性があります。

Windows 8.1 で Miracast ワイヤレス ディスプレイを有効にするには、Miracast ユーザーモード ドライバーを実装する固有のスタンドアロン DLL を作成する必要があります。 このドライバーは、専用セッション 0 プロセスで読み込まれます。 INF ファイルのデバイス ソフトウェア設定にドライバーの名前を「MiracastDriverName」として追加します。

[MyDevice_DeviceSettings]
HKR,, MiracastDriverName, %REG_SZ%, Miracast.dll

DLL には、オペレーティング システムが呼び出すことができる QueryMiracastDriverInterface という名前のエクスポート関数が必要です。 このドライバー バイナリには、既存の Direct3D ユーザーモード ディスプレイ ドライバー DLL を使用しないでください。

Miracast ユーザーモード ドライバーは UMDF0 プロセスに読み込まれるため、このドライバーの Windows on Windows (WOW) バージョンを別個に作成する必要はありません。 たとえば、64 ビット バージョンのドライバーは、64 ビット プロセッサで使用されます。

オペレーティング システムは、Miracast 接続済みセッションの準備が整ったら、Miracast ユーザーモード ドライバーの CreateMiracastContext 関数を呼び出します。 この関数が呼び出されると、Miracast ユーザーモード ドライバーは、Miracast 接続済みセッションを開始するために必要なすべてのソフトウェア リソースを割り当てます。 この呼び出しでは、オペレーティング システムは、現在の Miracast コンテキストの有効期間中にドライバーが呼び出すことのできるコールバック関数へのポインターも提供します。 次に、リアルタイム ストリーミング プロトコル (RTSP) リンクが確立された後、オペレーティング システムは StartMiracastSession を呼び出して、Miracast 接続済みセッションを実際に開始します。 ドライバーがこの関数呼び出しに応答する際に、Winsock getaddrinfo 関数または他の関連する関数を使用して Miracast シンクのインターネット プロトコル (IP) アドレスを取得し、標準の Winsock 関数を使用してハイパーテキスト キャッシュ プロトコル (HTCP) リモート デスクトップ プロトコル (RDP) ソケットを作成する必要があります。

Miracast ディスプレイが使用可能になったら、Miracast ユーザーモード ドライバーは、オペレーティング システムが提供する MiracastIoControl 関数を呼び出して、ディスプレイ ミニポート ドライバーに I/O 制御要求を送信し、モニター到着ホットプラグ検出 (HPD) 認識値を報告します。 また、Miracast ユーザーモード ドライバーは、MiracastIoControl を呼び出して、シンクの情報と機能に対してクエリを実行し、この情報の一部 (モニターの説明など) をディスプレイ ミニポート ドライバーに報告する必要もあります。

Miracast 接続済みセッションが開始されてストリーミング データが準備された後、そのデータをネットワークに送信する前に、ドライバーは ReportStatistic コールバック関数を呼び出して、Miracast リンクの統計情報をオペレーティング システムに報告する必要があります。

オペレーティング システムが Miracast 接続済みセッションを停止する際は、Miracast ユーザーモード ドライバーの StopMiracastSession 関数を呼び出します。 この関数呼び出しに応答して、ドライバーは作成したすべてのソケットを閉じ、それ以降のすべてのデータ ストリーミングを削除する必要があります。 ドライバーは、オペレーティング システムが提供した RTSP ソケットを閉じてはいけません。 また、モニター出発で HPD を報告するよう求める要求をディスプレイ ミニポート ドライバーに送信してはいけません。

Miracast ユーザーモード ドライバーは、DestroyMiracastContext 関数に対するオペレーティング システムの呼び出しに応答して、CreateMiracastContext に割り当てられたすべてのソフトウェア リソースを解放する必要があります。

ディスプレイ ミニポート ドライバーが、接続済み Miracast モニターの電源をオフにするように求める DxgkDdiCommitVidPn 要求を受信すると、ドライバーは、オペレーティング システム提供の DxgkCbMiracastSendMessage コールバック関数を呼び出して Miracast ユーザーモード ドライバーにメッセージを送信する必要があります。 次に Miracast ユーザーモード ドライバーは、Miracast シンクを低電力状態にする必要があります。

必要に応じて Miracast ユーザーモード ドライバーで RegisterForDataRateNotifications コールバック関数を呼び出し、ネットワークのサービス品質 (QoS) 通知と Miracast 接続の現在のネットワーク帯域幅を 1 秒に 1 回受信するようオペレーティング システムに登録できます。 このネットワーク情報は、pfnDataRateNotify 関数へのオペレーティング システム呼び出しによって提供されます。

Miracast ユーザーモード ドライバーは、オペレーティング システムによって提供される次の省略可能なコールバック関数を呼び出すこともできます。

関数 説明
GetNextChunkData 次のエンコード チャンクに関する情報を提供します。
ReportSessionStatus ドライバーはこの関数を呼び出して、現在の Miracast 接続済みセッションの状態を報告します。