DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP コールバック関数 (dispmprt.h)
OS は、カーネル モード ディスプレイ ドライバー (KMD) DxgkddiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出して、KMD がディスプレイ デバイスをリセットし、現在の電源オン セルフテスト (POST) デバイスの所有権を解放するように要求します。
構文
DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP DxgkddiStopDeviceAndReleasePostDisplayOwnership;
NTSTATUS DxgkddiStopDeviceAndReleasePostDisplayOwnership(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[out] PDXGK_DISPLAY_INFORMATION DisplayInfo
)
{...}
パラメーター
[in] MiniportDeviceContext
ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 KMD の
[in] TargetId
ディスプレイ デバイスが接続されているディスプレイ アダプター上のビデオの現在のターゲットの識別子を指定する D3DDDI_VIDEO_PRESENT_TARGET_ID 値。 この識別子は、DxgkDdiCommitVidPnへの前回の呼び出し中に現在のビデオ 現在のネットワーク (VidPN) 状態に残されたターゲット
TargetId パラメーターの使用方法の詳細については、「解説」セクションを参照してください。
[out] DisplayInfo
OS によって割り当てられる DXGK_DISPLAY_INFORMATION 構造体へのポインター。
戻り値
成功した場合は STATUS_SUCCESS を返します。 それ以外の場合は、Ntstatus.hで定義されているエラー コードのいずれかを返します。 詳細については、「解説」セクションを参照してください。
備考
Windows 8 (WDDM 1.2) 以降、OS はプラグ アンド プレイ (PnP) 停止操作中にこの関数を呼び出します。
この関数がサポートされていることを OS に示すには、ドライバーは、DxgkDdiQueryAdapterInfo 関数が呼び出されたときに、DXGK_DRIVERCAPS 構造体の NonVGASupport メンバーを設定する必要があります。
使用できる色の形式
KMD は、32 ビットの色形式のみを報告する必要があります。 したがって、DisplayInfo->ColorFormat メンバーには、次の 2 つの D3DDDIFORMAT 形式のいずれかを含める必要があります。
- D3DDDIFMT_X8R8G8B8
- D3DDDIFMT_A8R8G8B8
ビデオ 表示ターゲットの初期化
KMD は、DisplayInfo->TargetId メンバーを、アクティブなディスプレイのターゲット識別子に設定する必要があります。 通常、この識別子は、OS がドライバーに渡した TargetId パラメーターの値になります。
同様に、KMD は、DisplayInfo->AcpiId メンバーを、アクティブなディスプレイの ACPI 識別子に設定する必要があります。
KMD で必要な手順
KMD は、DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数が呼び出されたときに、次の手順に従う必要があります。
TargetId パラメーターによって示されるビデオの現在のターゲットに関連付けられているディスプレイ デバイスを停止しますが、このターゲットに関連付けられているディスプレイを電源オンにして表示したままにする必要があります。
このターゲットに関連付けられているディスプレイの接続を確認します。 ターゲットにディスプレイが接続されていない場合、KMD はこの関数の呼び出しを完了し、STATUS_NOT_SUPPORTED エラー コードを返す必要があります。
ディスプレイ アダプターに接続されている他のすべてのディスプレイへの信号を無効にします。 これが不可能な場合、ドライバーは、他のすべてのディスプレイに空白の画像を配置しようとする必要があります。 これが不可能な場合、ドライバーは画面の最後の画像を変更せずに残す必要があります。
指定されたターゲットで現在の表示モードを維持し、このモードをこの関数呼び出しの一部として OS に戻します。
ドライバーが現在の表示モードを維持できない場合、またはターゲットがアクティブトポロジの一部でない場合、ドライバーは代替アクティブターゲットを選択し、そのターゲットの現在の解像度を維持しようとします。 それが不可能な場合、ドライバーはディスプレイをネイティブ解像度または高解像度モードに設定する必要があります。 この場合、表示解像度は、D3DDDIFMT_R8G8B8 (1 ピクセルあたり 24 ビット) または D3DDDIFMT_X8R8G8B8 (32 bpp) の色形式で、少なくとも 800 x 600 ピクセルに設定する必要があります。
アクティブなターゲットがない場合、ドライバーはターゲット (可能な場合は内部パネル) の有効化を試みる必要があります。
可能であれば、ドライバーは、現在のフレーム バッファーをクリアし、ハードウェア カーソルとすべての表示オーバーレイを無効にする必要があります。
可能であれば、ドライバーは、デバイスのガンマ ランプを既定値に設定する必要があります。
ドライバーは、現在のフレーム バッファーを線形モードに設定する必要があります。 ドライバーは、既定のスウィズル範囲を使用するか、スウィズル モードを無効にして、これを行います。
ドライバーは、現在のフレーム バッファーを CPU アドレス空間に線形にマッピングすることによって、CPU に現在のフレーム バッファーにアクセスできるようにする必要があります。
ドライバーは、指定されたターゲットの可視性が "有効" に設定されていることを確認する必要があります。
KMD は、これらの手順を実行した後、デバイスの現在の表示設定を返す必要があります。 ドライバーは、DisplayInfo パラメーターによって参照される DXGK_DISPLAY_INFORMATION 構造体のメンバーを設定することによって、この情報を返します。
デバイスが停止した後、この表示情報は、表示デバイスを管理するために Windows 汎用ディスプレイ ドライバーによって使用される可能性があります。
その他の要件
Unified Extensible Firmware Interface (UEFI) をサポートするシステムでは、VGA 基本入出力システム (BIOS) は存在しません。 これらのシステムで PnP 停止操作をサポートするために、WDDM 1.2 以降では、OS が POST デバイスをリセットし、PnP 停止操作中にその表示情報を取得するためのサポートが提供されています。 これは、KMD の DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出すことによって行われます。
PnP 停止操作は、デバイス マネージャーなどのプロセスによる要求に応答して、またはドライバーのアップグレード プロセス中に発生する可能性があります。
Windows 8 以降、OS はドライバーの DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を PnP 停止操作中に POST デバイスでのみ呼び出します。
KMD が DxgkCbAcquirePostDisplayOwnership
ドライバーがこの関数の呼び出しを正常に完了した場合、OS は KMD の DxgkDdiStopDevice 関数を呼び出しません。 ドライバーがこの関数の呼び出しを完了できない場合、OS は DxgkDdiStopDevice
UEFI 専用システムでは、KMD がこの関数の呼び出しに失敗した場合、黒い画面が表示され、IHV ドライバーはインストールされません。 このシナリオの回避策は、ユーザーがコンピューターを再起動することです。
PnP シナリオでこの関数を使用する方法の詳細については、WDDM 1.2 以降の プラグ アンド プレイ (PnP)を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 (WDDM 1.2) |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の |
デスクトップ |
ヘッダー | dispmprt.h |
IRQL | PASSIVE_LEVEL |
関連項目
DxgkCbAcquirePostDisplayOwnership の
DxgkDdiAddDevice の
DxgkDdiQueryAdapterInfo の
DxgkDdiStartDevice の
DxgkDdiStopDevice を