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 を使用してユーザー ダイアログ ボックスを作成するため、デバイス エラーが発生したときに通常のカーネル API が無効になっている場合にデッドロックが発生する可能性があります。 例えば:
上位レベルのフィルター ドライバーは、KeEnterCriticalRegion を呼び出し (通常のカーネル API を無効にします)、I/O 要求をファイル システム ドライバーに送信します。 フィルター ドライバーは、ファイル システム ドライバーによる要求の完了を待機してから、フィルター ドライバーが KeLeaveCriticalRegion (通常のカーネル API を再び有効にする) 呼び出します。
ファイル システムでエラーが発生し、ファイル システム ドライバーが IoRaiseHardError 呼び出してエラーをユーザーに報告します。 ファイル システム ドライバーは、ダイアログ ボックスで待機します。
デッドロックが存在するようになりました。ダイアログ ボックスを作成するために、IoRaiseHardError によって作成された通常のカーネル APC は、通常のカーネル APCs が有効になるまで待機します。 ファイル システムは、I/O 要求を完了する前にダイアログ ボックスを待機します。 フィルター ドライバーは、KeLeaveCriticalRegion を呼び出す前に、I/O 要求の完了を待機します (通常のカーネル API を再び有効にします)。
このルーチンの動作は、実行中のスレッドのハード エラーの現在の状態に依存します。 IoSetThreadHardErrorMode 呼び出してハード エラーが無効になっている場合、このルーチンは、ユーザー バッファーにデータを転送せずに、Irp 指定された IRP を完了します。 さらに、このエラーをユーザーに通知するメッセージは送信されません。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntddk.h (Ntddk.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm) |
関連項目
IoGetRelatedDeviceObject の
IoSetHardErrorOrVerifyDevice の