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 ha esito negativo.

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

I driver di livello più alto, in particolare i driver del file system, chiamano IoRaiseHardError.

Avviso

Poiché IoRaiseHardError usa un APC del kernel normale per creare una finestra di dialogo dell'utente, può verificarsi un deadlock se le NORMALI API del kernel sono disabilitate quando si verifica un errore del dispositivo. Ad 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 consente di riabilitare 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 ora esistente: il normale APC del kernel creato da IoRaiseHardError per creare la finestra di dialogo attende l'abilitazione delle normali APC 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 consente di riabilitare 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.

Requisiti

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 HwStorPortProhibitedDDDIs(storport), IrqlIoApcLte(wdm)

Vedi anche

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode