IoRaiseHardError 関数 (ntddk.h)
IoRaiseHardError ルーチンにより、デバイス I/O エラーが発生したことをユーザーに警告するダイアログ ボックスが表示されます。これは、物理デバイスが失敗していることを示している可能性があります。
構文
void IoRaiseHardError(
[in] PIRP Irp,
[in, optional] PVPB Vpb,
[in] PDEVICE_OBJECT RealDeviceObject
);
パラメーター
[in] Irp
デバイス I/O エラーが原因で失敗した IRP へのポインター。
[in, optional] Vpb
マウントされたファイル オブジェクトのボリューム パラメーター ブロック (VPB) へのポインター (存在する場合)。 VPB がデバイス オブジェクトに関連付けられていない場合、このパラメーターは NULL です。
[in] RealDeviceObject
I/O 操作が失敗した物理デバイスを表すデバイス オブジェクトへのポインター。
戻り値
なし
解説
最上位レベルのドライバー (特にファイル システム ドライバー) は、 IoRaiseHardError を呼び出します。
警告
IoRaiseHardError は通常のカーネル APC を使用してユーザー ダイアログ ボックスを作成するため、デバイス エラーが発生したときに通常のカーネル APC が無効になっている場合にデッドロックが発生する可能性があります。 例:
上位レベルのフィルター ドライバーは 、KeEnterCriticalRegion (通常のカーネル APC を無効にする) を呼び出し、ファイル システム ドライバーに I/O 要求を送信します。 フィルター ドライバーは、フィルター ドライバーが KeLeaveCriticalRegion を呼び出す前に、ファイル システム ドライバーによる要求の完了を待機します (通常のカーネル APCs を再び可能にします)。
ファイル システムでエラーが発生し、ファイル システム ドライバーが IoRaiseHardError を呼び出してエラーをユーザーに報告します。 ファイル システム ドライバーは、ダイアログ ボックスで待機します。
デッドロックが存在するようになりました。ダイアログ ボックスを作成するために IoRaiseHardError によって作成された通常のカーネル APC は、通常のカーネル APCs が有効になるまで待機します。 ファイル システムは、I/O 要求を完了する前に、ダイアログ ボックスで待機します。 フィルター ドライバーは、I/O 要求の完了を待機してから KeLeaveCriticalRegion を呼び出します (通常のカーネル APC を再度実行可能にします)。
このルーチンの動作は、実行中のスレッドのハード エラーの現在の状態に依存します。 IoSetThreadHardErrorMode を呼び出してハード エラーが無効になっている場合、このルーチンは、ユーザー バッファーにデータを転送せずに Irp で指定された IRP を完了します。 さらに、このエラーをユーザーに通知するメッセージは送信されません。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ntddk.h (Ntddk.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm) |