DXGKDDI_STOP_DEVICE_AND_RELEASE_POST_DISPLAY_OWNERSHIP コールバック関数 (dispmprt.h)

ディスプレイ ミニポート ドライバーにディスプレイ デバイスのリセットを要求し、現在の電源オン セルフテスト (POST) デバイスの所有権を解放するために、オペレーティング システムによって呼び出されます。

Windows 8以降、オペレーティング システムは、プラグ アンド プレイ (PnP) 停止操作中にこの関数を呼び出します。

この関数がサポートされていることをオペレーティング システムに示すには、DxgkDdiQueryAdapterInfo 関数が呼び出されたときに、ドライバーがDXGK_DRIVERCAPS構造体の NonVGASupport メンバーを設定する必要があります。

構文

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

ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーの DxgkDdiAddDevice 関数は、以前は Microsoft DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。

[in] TargetId

ディスプレイ デバイスが接続されているディスプレイ アダプター上のビデオ の現在のターゲットの識別子を指定する D3DDDI_VIDEO_PRESENT_TARGET_ID 値。 この識別子は、 DxgkDdiCommitVidPn の前回の呼び出し中に現在のビデオ 現在のネットワーク (VidPN) 状態に残されたターゲットの場合があります。

TargetId パラメーターの使用方法の詳細については、次の「解説」セクションを参照してください。

[out] DisplayInfo

オペレーティング システムによって割り当てられる DXGK_DISPLAY_INFORMATION 構造体へのポインター。

戻り値

成功した場合は、STATUS_SUCCESSを返します。 それ以外の場合は、Ntstatus.h で定義されているエラー コードのいずれかを返します。 詳細については、「解説」を参照してください。

注釈

使用できる色の書式

ディスプレイ ミニポート ドライバーは、32 ビットの色形式のみを報告する必要があります。 したがって、 DisplayInfo->ColorFormat メンバーには、次の 2 つの形式のいずれかを含める必要があります。
  • D3DDDIFMT_X8R8G8B8
  • D3DDDIFMT_A8R8G8B8

ビデオの現在のターゲットの初期化

ディスプレイ ミニポート ドライバーは、 DisplayInfo->TargetId メンバーを、アクティブなままのディスプレイのターゲット識別子に設定する必要があります。 通常、この識別子は、オペレーティング システムがドライバーに渡した TargetId パラメーターの値になります。

同様に、ディスプレイ ミニポート ドライバーは、DisplayInfo-AcpiId> メンバーをアクティブなままのディスプレイの ACPI 識別子に設定する必要があります。

ディスプレイ ミニポート ドライバーで必要な手順

ディスプレイ ミニポート ドライバーは、 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数が呼び出されたときに、次の手順に従う必要があります。
  1. ドライバーは、 TargetId パラメーターで示されるビデオの現在のターゲットに関連付けられているディスプレイ デバイスを停止する必要がありますが、このターゲットに関連付けられているディスプレイの電源をオンにしたまま表示する必要があります。
  2. ドライバーは、このターゲットに関連付けられているディスプレイの接続をチェックする必要があります。 ターゲットにディスプレイが接続されていない場合、ドライバーはこの関数の呼び出しを完了し、 STATUS_NOT_SUPPORTED エラー コードを返す必要があります。
  3. ドライバーは、ディスプレイ アダプターに接続されている他のすべてのディスプレイへの信号を無効にする必要があります。 これが不可能な場合、ドライバーは他のすべてのディスプレイに空白のイメージを配置する必要があります。 これが不可能な場合、ドライバーは画面上の最後のイメージを変更せずに残す必要があります。
  4. ドライバーは、指定されたターゲットで現在の表示モードを維持し、このモードをこの関数呼び出しの一部としてオペレーティング システムに戻す必要があります。
  5. ドライバーが現在の表示モードを維持できない場合、またはターゲットがアクティブなトポロジの一部でない場合、ドライバーは代替アクティブ ターゲットを選択し、そのターゲットの現在の解像度を維持する必要があります。 それが不可能な場合、ドライバーはディスプレイをネイティブ解像度または高解像度モードに設定する必要があります。 この場合、表示解像度は、D3DDDIFORMAT列挙体D3DDDIFMT_R8G8B8 (24 ビット/ピクセル) またはD3DDDIFMT_X8R8G8B8 (32 bpp) カラー形式のいずれかで、少なくとも 800 x 600 ピクセルに設定する必要があります。
  6. アクティブなターゲットがない場合、ドライバーはターゲット (可能な場合は内部パネル) の有効化を試みる必要があります。
  7. 可能であれば、ドライバーは現在のフレーム バッファーをクリアし、ハードウェア カーソルとすべての表示オーバーレイを無効にする必要があります。
  8. 可能であれば、ドライバーはデバイスのガンマ ランプを既定値に設定する必要があります。
  9. ドライバーは、現在のフレーム バッファーを線形モードに設定する必要があります。 ドライバーは、既定のスワイズル範囲を使用するか、スワイズル モードを無効にすることによって、これを行います。
  10. ドライバーは、現在のフレーム バッファーを CPU アドレス空間に線形にマッピングすることによって、現在のフレーム バッファーに CPU にアクセスできるようにする必要があります。
  11. ドライバーは、指定されたターゲットの可視性が "有効" に設定されていることを確認する必要があります。
ディスプレイ ミニポート ドライバーは、これらの手順を実行した後、デバイスの現在の表示設定を返す必要があります。 ドライバーは、DisplayInfo パラメーターによって参照されるDXGK_DISPLAY_INFORMATION構造体のメンバーを設定することで、この情報を返します。
メモ デバイスが停止した後、この表示情報は、ディスプレイ デバイスを管理するために Windows 汎用ディスプレイ ドライバーによって使用される可能性があります。
 

その他の要件

統合拡張ファームウェア インターフェイス (UEFI) をサポートするシステムでは、VGA 基本入出力システム (BIOS) は存在しません。 これらのシステムで PnP 停止操作をサポートするために、Windows ディスプレイ ドライバー モデル (WDDM) 1.2 以降では、POST デバイスをリセットし、PnP 停止操作中にその表示情報を取得するためのオペレーティング システムのサポートが提供されます。 オペレーティング システムは、ディスプレイ ミニポート ドライバーの DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出すことによってこれを行います。

PnP 停止操作は、デバイス マネージャーなどのプロセスによる要求への応答、またはドライバーのアップグレード プロセス中に発生する可能性があります。

Windows 8以降、オペレーティング システムは PnP 停止操作中に POST デバイスでのみドライバーの DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出します。

メモ ディスプレイ ミニポート ドライバーが DxgkCbAcquirePostDisplayOwnership を呼び出す場合は省略可能です。 ただし、ドライバーが以前に DxgkCbAcquirePostDisplayOwnership を呼び出さなかった場合でも、オペレーティング システムはデバイス ドライバーの DxgkDdiStopDeviceAndReleasePostDisplayOwnership 関数を呼び出す可能性があります。
 
ドライバーがこの関数の呼び出しを正常に完了した場合、オペレーティング システムは DxgkDdiStopDevice 関数を呼び出しません。 ドライバーがこの関数の呼び出しを完了できない場合、オペレーティング システムは DxgkDdiStopDevice 関数を呼び出し、デバイスの動作は Windows 7 と同じになります。

UEFI 専用システムでは、ディスプレイ ミニポート ドライバーがこの関数の呼び出しに失敗した場合、黒い画面が表示され、IHV ドライバーはインストールされません。 このシナリオの回避策は、ユーザーがコンピューターを再起動することです。

PnP シナリオでのこの関数の使用方法の詳細については、「WDDM 1.2 以降のプラグ アンド プレイ (PnP)」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 8
サポートされている最小のサーバー Windows Server 2012
対象プラットフォーム デスクトップ
Header dispmprt.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

DXGKRNL_INTERFACE

DXGK_DISPLAY_INFORMATION

DXGK_DRIVERCAPS

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiQueryAdapterInfo

DxgkDdiStartDevice

DxgkDdiStopDevice