Fonction IoRaiseHardError (ntddk.h)

La routine IoRaiseHardError fait apparaître 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 est défaillant.

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 a la valeur NULL si aucun VPB n’est associé à l’objet d’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

None

Remarques

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

Avertissement

Étant donné qu’IoRaiseHardError utilise un APC de noyau normal pour créer une boîte de dialogue utilisateur, un blocage peut se produire si des API de noyau normaux sont désactivés 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 normaux) et envoie une demande d’E/S à un pilote de système de fichiers. Le pilote de filtre attend l’achèvement de la requête par le pilote de système de fichiers avant que le pilote de filtre appelle KeLeaveCriticalRegion (qui réactive les API de noyau normaux).

  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 APC de noyau normaux soient activés. Le système de fichiers attend dans la boîte de dialogue avant de terminer la demande d’E/S. Le pilote de filtre attend l’achèvement de la demande d’E/S avant d’appeler KeLeaveCriticalRegion (qui réactive les API de noyau normaux).

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

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ntddk.h (inclure 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