Partager via


Fonction IoSetMasterIrpStatus (ntddk.h)

La routine IoSetMasterIrpStatus remplace de manière conditionnelle la valeur Status dans un IRP par la valeur NTSTATUS spécifiée.

Syntaxe

void IoSetMasterIrpStatus(
  [in, out] PIRP     MasterIrp,
  [in]      NTSTATUS Status
);

Paramètres

[in, out] MasterIrp

Pointeur vers l’IRP master. Pour plus d'informations, consultez la section Notes.

[in] Status

Valeur NTSTATUS à comparer au membre Status du bloc d’E/S status dans l’IRP master.

Valeur de retour

None

Remarques

À la réception d’un IRP, un pilote peut créer au moins deux IPS subordonnés pour effectuer le travail demandé par l’IRP d’origine (ou master). Une fois les IRP subordonnés terminés, le pilote collecte les codes status d’achèvement à partir des IRP subordonnés et les fusionne pour former un code status d’achèvement unique pour le master IRP.

IoSetMasterIrpStatus implémente une stratégie uniforme pour fusionner les codes status de plusieurs IP subordonnés dans un code status pour un IRP master. Par exemple, si un IRP master est divisé en deux IRP subordonnés, et que l’un de ces IRP subordonnés réussit et que l’autre échoue, le code status de l’IRP défaillant est utilisé comme code status pour l’IRP master. Toutefois, si les deux IRP subordonnés échouent, le code d’échec le plus grave est utilisé comme status pour l’IRP master.

Avant le premier appel à IoSetMasterIrpStatus, le pilote définit le membre IoStatus.Status dans l’IRP master sur STATUS_SUCCESS (ou pour STATUS_FT_READ_FROM_COPY si cela est attendu). Ensuite, à mesure que chaque IRP subordonné se termine, le pilote appelle IoSetMasterIrpStatus pour fusionner le code status de cet IRP avec le code status dans l’IRP master. Dans cet appel, le paramètre PIRP pointe vers le master IRP, et le paramètre Status est défini sur la valeur du membre IoStatus.Status dans l’IRP subordonné.

En règle générale, IoSetMasterIrpStatus remplace le code status dans PIRP-IoStatus.Status > par la valeur Status dans les cas suivants :

  • La valeur status dans **PIRP* est STATUS_SUCCESS et Status est un code d’erreur.
  • La valeur status dans **PIRP* est un code d’erreur, mais Status est un code d’erreur plus grave.
Il existe deux exceptions à la règle générale. Une valeur Status de STATUS_VERIFY_REQUIRED remplace toujours la valeur status dans **PIRP*. Une valeur Status de STATUS_FT_READ_FROM_COPY ne remplace jamais la valeur status dans **PIRP*.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.
Plateforme cible Universal
En-tête ntddk.h (inclure Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL N’importe quel niveau.

Voir aussi

IRP