Partager via


Fonction IoRaiseHardError (ntddk.h)

La routine IoRaiseHardError entraîne l’affichage d’une boîte de dialogue qui avertit l’utilisateur qu’une erreur d’E/S d’appareil s’est produite, ce qui peut indiquer qu’un appareil physique échoue.

Syntaxe

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

Paramètres

[in] Irp

Pointeur vers l’IRP qui a échoué en raison d’une erreur d’E/S d’appareil.

[in, optional] Vpb

Pointeur vers le bloc de paramètres de volume (VPB), le cas échéant, pour l’objet de fichier monté. Ce paramètre est null si aucun VPB n’est associé à l’objet de l’appareil.

[in] RealDeviceObject

Pointeur vers l’objet d’appareil qui représente l’appareil physique sur lequel l’opération d’E/S a échoué.

Valeur de retour

Aucun

Remarques

Pilotes de niveau supérieur, en particulier les pilotes de système de fichiers, appellent IoRaiseHardError.

Avertissement

Étant donné que IoRaiseHardError utilise un APC noyau normal pour créer une boîte de dialogue utilisateur, un interblocage peut se produire si des API de noyau normales sont désactivées lorsqu’une erreur d’appareil se produit. Par exemple:

  1. Un pilote de filtre de niveau supérieur appelle KeEnterCriticalRegion (qui désactive les API de noyau normales) et envoie une requête d’E/S à un pilote de système de fichiers. Le pilote de filtre attend la fin de la requête par le pilote du système de fichiers avant que le pilote de filtre appelle KeLeaveCriticalRegion (qui réenable les API de noyau normales).

  2. Une erreur se produit sur le système de fichiers et le pilote du système de fichiers appelle IoRaiseHardError pour signaler l’erreur à l’utilisateur. Le pilote du système de fichiers attend dans la boîte de dialogue.

  3. Interblocage existe maintenant : l’APC du noyau normal créé par IoRaiseHardError pour créer la boîte de dialogue attend que les API de noyau normales soient activées. Le système de fichiers attend dans la boîte de dialogue avant de terminer la requête d’E/S. Le pilote de filtre attend la fin de la requête d’E/S avant d’appeler KeLeaveCriticalRegion (qui réenable les API de noyau normales).

Le comportement de cette routine dépend de l’état actuel des erreurs difficiles pour le thread en cours d’exécution. Si des erreurs difficiles ont été désactivées en appelant IoSetThreadHardErrorMode, cette routine termine l’IRP spécifiée par Irp sans transférer de données dans des mémoires tampons utilisateur. En outre, aucun message n’est envoyé pour avertir l’utilisateur de cet échec.

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ntddk.h (include Ntddk.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm)

Voir aussi

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode