Bagikan melalui


Fungsi IoRaiseHardError (ntddk.h)

Rutinitas IoRaiseHardError menyebabkan kotak dialog muncul yang memperingatkan pengguna bahwa kesalahan I/O perangkat telah terjadi, yang mungkin menunjukkan bahwa perangkat fisik gagal.

Sintaks

void IoRaiseHardError(
  [in]           PIRP           Irp,
  [in, optional] PVPB           Vpb,
  [in]           PDEVICE_OBJECT RealDeviceObject
);

Parameter

[in] Irp

Penunjuk ke IRP yang gagal karena kesalahan I/O perangkat.

[in, optional] Vpb

Arahkan ke blok parameter volume (VPB), jika ada, untuk objek file yang dipasang. Parameter ini NULL jika tidak ada VPB yang terkait dengan objek perangkat.

[in] RealDeviceObject

Arahkan ke objek perangkat yang mewakili perangkat fisik tempat operasi I/O gagal.

Nilai kembali

Tidak ada

Keterangan

Driver tingkat tertinggi, terutama driver sistem file, memanggil IoRaiseHardError.

Peringatan

Karena IoRaiseHardError menggunakan APC kernel normal untuk membuat kotak dialog pengguna, kebuntuan dapat terjadi jika APC kernel normal dinonaktifkan saat kesalahan perangkat terjadi. Contohnya:

  1. Driver filter tingkat atas memanggil KeEnterCriticalRegion (yang menonaktifkan APC kernel normal) dan mengirim permintaan I/O ke driver sistem file. Driver filter menunggu penyelesaian permintaan oleh driver sistem file sebelum driver filter memanggil KeLeaveCriticalRegion (yang mengaktifkan kembali APC kernel normal).

  2. Kesalahan terjadi pada sistem file, dan driver sistem file memanggil IoRaiseHardError untuk melaporkan kesalahan kepada pengguna. Driver sistem file menunggu pada kotak dialog.

  3. Kebuntuan sekarang ada: APC kernel normal yang dibuat oleh IoRaiseHardError untuk membuat kotak dialog menunggu APC kernel normal diaktifkan. Sistem file menunggu pada kotak dialog sebelum menyelesaikan permintaan I/O. Driver filter menunggu penyelesaian permintaan I/O sebelum memanggil KeLeaveCriticalRegion (yang mengaktifkan kembali APC kernel normal).

Perilaku rutinitas ini tergantung pada status kesalahan keras saat ini untuk utas yang sedang berjalan. Jika kesalahan keras telah dinonaktifkan dengan memanggil IoSetThreadHardErrorMode, rutinitas ini menyelesaikan IRP yang ditentukan oleh Irp tanpa mentransfer data apa pun ke buffer pengguna. Selain itu, tidak ada pesan yang dikirim untuk memberi tahu pengguna tentang kegagalan ini.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntddk.h (termasuk Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm)

Lihat juga

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode