DXGKDDI_NOTIFY_SURPRISE_REMOVAL コールバック関数 (dispmprt.h)
DXGKDDI_NOTIFY_SURPRISE_REMOVAL は、ユーザーがシステムに通知せずに外部ディスプレイ デバイスを切断したときに、オペレーティング システムによって呼び出されます。
構文
DXGKDDI_NOTIFY_SURPRISE_REMOVAL DxgkddiNotifySurpriseRemoval;
NTSTATUS DxgkddiNotifySurpriseRemoval(
[in] PVOID MiniportDeviceContext,
[in] DXGK_SURPRISE_REMOVAL_TYPE RemovalType
)
{...}
パラメーター
[in] MiniportDeviceContext
ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーの DxgkDdiAddDevice 関数は、以前に DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。
[in] RemovalType
突然の削除イベントの種類を識別する DXGK_SURPRISE_REMOVAL_TYPE 型の値。
戻り値
RemovalType = DxgkRemovalHibernationのソフトウェア リソースがクリーンアップされた場合の STATUS_SUCCESS を返します。 ドライバーが代わりにエラー コードを返す場合、オペレーティング システムは、次の「解説」セクションで説明するように、システムの再起動を試みます。
備考
このコールバックは、必要に応じて、Windows ディスプレイ ドライバー モデル (WDDM) 1.2 以降のディスプレイ ミニポート ドライバーによって実装できます。
手記
オペレーティング システム DxgkDdiNotifySurpriseRemoval を呼び出す場合にのみ、ディスプレイ ミニポート ドライバーは、DXGK_DRIVERCAPS 構造体の SupportSurpriseRemovalInHibernation メンバーを 1 に設定してサポートを示します。
OS が突然の削除を検出すると、可能な限り迅速にドライバーに通知します。 DxgkDdiNotifySurpriseRemoval は、DDI 関数 レベル 0 です。つまり、ドライバーが保留中の GPU ワークロードを持っている場合や、他の DDI 関数内で実行されている場合に呼び出すことができます。 この関数の呼び出しは、グラフィックス ハードウェアが物理的に削除されたか、システムから消えたと示しているため、ハードウェアにアクセスしようとすると、ハード ハングなどの問題が発生する可能性があります。
OS は、驚きの削除を次のように分類します。
突然の削除は、システムとグラフィックス デバイスがスリープや休止状態などの低電力状態にある場合に発生します。 OS は、低電力状態から再開すると、この突然の削除を検出し、すぐにドライバーの DxgkDdiNotifySurpriseRemoval コールバック RemovalType = DxgkRemovalHibernationを呼び出します。 この場合、保留中の GPU 作業や DDI 呼び出しは発生しない可能性があるため、ドライバーが比較的安全で簡単に処理できる必要があります。 戻り状態の詳細は次のとおりです。
- OS では、ドライバーが DxgkDdiNotifySurpriseRemoval を正しく呼び出して STATUS_SUCCESSを返 必要があります。
- 削除されたグラフィックス デバイスが電源オンセルフテスト (POST) デバイスの場合、OS は、返された状態に関係なく、システムを正常に再起動しようとします。
- POST 以外のデバイスの場合、ドライバーが呼び出しに失敗し、その DXGK_DRIVERCAPSで SupportSurpriseRemovalInHibernation のみがサポートされている場合、OS はシステムを正常に再起動します。 DXGK_DRIVERCAPSSupportSurpriseRemoval をサポートしている場合、OS は戻り状態を無視し、グラフィックス デバイスの停止を続行します。 以下のその他のリターン ノートを参照してください。
グラフィックス デバイスは、実行中に突然取り外されたり取り外されたりします。 OS は、この種類の突然の削除を検出すると、すぐにドライバーの DxgkDdiNotifySurpriseRemoval コールバックを呼び出し、RemovalType = DxgkRemovalPnPNotify。 この場合も、保留中の GPU 作業または DDI 呼び出しが完了する可能性があります。 ドライバーがこの通知を受け取り、この突然の削除を処理できる場合、ドライバーは直ちにこのデバイスを独自のデバイス コンテキストで突然の削除としてマークし、ハードウェア アクセスを回避してから、STATUS_SUCCESS OS に戻す必要があります。 OS は引き続き他の DDI 関数を呼び出してリソースをクリーンアップし、グラフィックス デバイスを停止します。 以下に示すように、ドライバーはソフトウェア リソースを解放またはクリーンアップするだけであり、これらの DDI 呼び出しでハードウェアに触れたり、アクセスしたりしてはなりません。 ドライバーがこの突然の削除を処理できない場合は、OS に適切なエラーを返す必要があります。 障害が発生した場合、OS はシステムを直ちにバグチェックして、ハードウェアやデータの損傷を回避します。
ディスプレイ ミニポート ドライバーが STATUS_SUCCESS返された場合、DirectX グラフィックス カーネル サブシステムは引き続きグラフィックス スタックから外部ディスプレイ アダプターを削除し、すべてのリソースを解放するために、DxgkDdiXxx カーネル モード関数 他のドライバー実装を呼び出します。 この場合、ドライバーはオペレーティング システムからの呼び出しに応じてソフトウェア リソースのクリーンアップを完了する必要がありますが、ハードウェア設定に触れたり、クリーンアップしたりしてはなりません。 他のハードウェアがドライバーを使用していない場合、オペレーティング システムはドライバーをアンロードします。
ドライバーがエラー コードを返す場合は、DXGK_DRIVERCAPS設定されません。SupportSurpriseRemovalInHibernation、またはこの関数を実装していない場合、DirectX グラフィックス カーネル サブシステムは DxgkDdiXxx 関数 ドライバー実装を呼び出さないため、システムの再起動を試みます。 この場合、外部ディスプレイ デバイスが切断される前に割り当てられたリソースは解放されません。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | dispmprt.h |
IRQL | PASSIVE_LEVEL |
関連項目
DxgkDdiAddDeviceの