Condividi tramite


Funzione IoRaiseHardError (ntddk.h)

La routine IoRaiseHardError fa sì che venga visualizzata una finestra di dialogo che avvisa l'utente che si è verificato un errore di I/O del dispositivo, che potrebbe indicare che un dispositivo fisico non riesce.

Sintassi

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

Parametri

[in] Irp

Puntatore all'IRP non riuscito a causa di un errore di I/O del dispositivo.

[in, optional] Vpb

Puntatore al blocco di parametri del volume (VPB), se presente, per l'oggetto file montato. Questo parametro è null se nessun VPB è associato all'oggetto dispositivo.

[in] RealDeviceObject

Puntatore all'oggetto dispositivo che rappresenta il dispositivo fisico in cui l'operazione di I/O non è riuscita.

Valore restituito

Nessuno

Osservazioni

Driver di livello più elevato, in particolare driver di file system, chiamare IoRaiseHardError.

Avvertimento

Poiché IoRaiseHardError usa un normale APC del kernel per creare una finestra di dialogo utente, un deadlock può verificarsi se le NORMALI API del kernel vengono disabilitate quando si verifica un errore del dispositivo. Per esempio:

  1. Un driver di filtro di livello superiore chiama KeEnterCriticalRegion (che disabilita le NORMALI API del kernel) e invia una richiesta di I/O a un driver del file system. Il driver di filtro attende il completamento della richiesta dal driver del file system prima che il driver del filtro chiami KeLeaveCriticalRegion (che riabilita le NORMALI API del kernel).

  2. Si verifica un errore nel file system e il driver del file system chiama IoRaiseHardError per segnalare l'errore all'utente. Il driver del file system attende nella finestra di dialogo.

  3. Deadlock esiste ora: il normale kernel APC creato da IoRaiseHardError per creare la finestra di dialogo attende l'abilitazione delle NORMALI API del kernel. Il file system attende nella finestra di dialogo prima di completare la richiesta di I/O. Il driver di filtro attende il completamento della richiesta di I/O prima di chiamare KeLeaveCriticalRegion (che riabilita le NORMALI API del kernel).

Il comportamento di questa routine dipende dallo stato corrente degli errori rigidi per il thread in esecuzione. Se gli errori rigidi sono stati disabilitati chiamando IoSetThreadHardErrorMode, questa routine completa l'IRP specificato da Irp senza trasferire dati nei buffer utente. Inoltre, non viene inviato alcun messaggio per notificare all'utente l'errore.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione ntddk.h (include Ntddk.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm)

Vedere anche

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode