Freigeben über


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 möglicherweise darauf hindeutet, dass ein physisches Gerät fehlschlägt.

Syntax

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

Parameter

[in] Irp

Zeigen Sie auf das IRP, das aufgrund eines Geräte-E/A-Fehlers fehlgeschlagen ist.

[in, optional] Vpb

Zeigen Sie auf den Volumeparameterblock (VPB), falls vorhanden, für das bereitgestellte Dateiobjekt. Dieser Parameter ist NULL-, wenn dem Geräteobjekt keine 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

Nichts

Bemerkungen

Treiber der höchsten Ebene, insbesondere Dateisystemtreiber, rufen IoRaiseHardErrorauf.

Warnung

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

  1. Ein Filtertreiber der oberen Ebene ruft KeEnterCriticalRegion (wodurch normale Kernel-APCs deaktiviert werden) auf 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 erneut 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 erneut aktiviert werden).

Das Verhalten dieser Routine ist abhängig vom aktuellen Zustand der harten Fehler für den ausgeführten Thread. Wenn harte Fehler durch Aufrufen von IoSetThreadHardErrorModedeaktiviert wurden, führt diese Routine das durch Irp angegebene IRP aus, ohne Daten in Benutzerpuffer zu übertragen. Darüber hinaus wird keine Nachricht gesendet, um den Benutzer über diesen Fehler zu benachrichtigen.

Anforderungen

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

Siehe auch

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode-