IoRaiseHardError-Funktion (ntddk.h)

Die IoRaiseHardError-Routine bewirkt, dass ein Dialogfeld angezeigt wird, das den Benutzer warnt, dass ein Geräte-E/A-Fehler aufgetreten ist, was darauf hindeuten kann, dass ein physisches Gerät ausfällt.

Syntax

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

Parameter

[in] Irp

Zeiger auf den IRP, der aufgrund eines Geräte-E/A-Fehlers fehlgeschlagen ist.

[in, optional] Vpb

Zeiger auf den Volumeparameterblock (VPB), falls vorhanden, für das bereitgestellte Dateiobjekt. Dieser Parameter ist NULL , wenn dem Geräteobjekt kein VPB zugeordnet ist.

[in] RealDeviceObject

Zeiger auf das Geräteobjekt, das das physische Gerät darstellt, auf dem der E/A-Vorgang fehlgeschlagen ist.

Rückgabewert

Keine

Bemerkungen

Treiber der höchsten Ebene, insbesondere Dateisystemtreiber, rufen IoRaiseHardError auf.

Warnung

Da IoRaiseHardError einen normalen Kernel-APC zum Erstellen eines Benutzerdialogfelds verwendet, kann ein Deadlock auftreten, wenn normale Kernel-APCs deaktiviert werden, wenn ein Gerätefehler auftritt. Beispiel:

  1. Ein Filtertreiber auf oberster Ebene ruft KeEnterCriticalRegion auf (wodurch normale Kernel-APCs deaktiviert werden) und sendet eine E/A-Anforderung an einen Dateisystemtreiber. Der Filtertreiber wartet auf den Abschluss der Anforderung durch den Dateisystemtreiber, bevor der Filtertreiber KeLeaveCriticalRegion aufruft (wodurch normale Kernel-APCs wieder aktiviert werden).

  2. Im Dateisystem tritt ein Fehler auf, und der Dateisystemtreiber ruft IoRaiseHardError auf, um den Fehler an den Benutzer zu melden. Der Dateisystemtreiber wartet auf das Dialogfeld.

  3. Deadlock ist jetzt vorhanden: Der normale Kernel-APC, der von IoRaiseHardError erstellt wurde, um das Dialogfeld zu erstellen, wartet auf die Aktivierung normaler Kernel-APCs. Das Dateisystem wartet auf das Dialogfeld, bevor die E/A-Anforderung abgeschlossen wird. Der Filtertreiber wartet auf den Abschluss der E/A-Anforderung, bevor er KeLeaveCriticalRegion aufruft (wodurch normale Kernel-APCs wieder aktiviert werden).

Das Verhalten dieser Routine hängt vom aktuellen Status der harten Fehler für den ausgeführten Thread ab. Wenn durch Aufrufen von IoSetThreadHardErrorMode harte Fehler deaktiviert wurden, schließt diese Routine die von Irp angegebene IRP ab, ohne Daten in Benutzerpuffer zu übertragen. Darüber hinaus wird keine Nachricht gesendet, um den Benutzer über diesen Fehler zu informieren.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ntddk.h (include Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlIoApcLte(wdm)

Weitere Informationen

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode