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:
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).
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.
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) |