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 le IRP principal. Pour plus d’informations, consultez Remarques.

[in] Status

Valeur NTSTATUS à comparer au membre Status du bloc d’état d’E/S dans l’IRP maître.

Valeur de retour

Aucun

Remarques

À la réception d’un IRP, un pilote peut créer deux irps subordonnés ou plus pour effectuer le travail demandé par l’IRP d’origine (ou maître). Une fois les IRP subordonnés terminés, le pilote collecte les codes d’état d’achèvement des fournisseurs d’intégration subordonnés et les fusionne pour former un code d’état d’achèvement unique pour l’IRP maître.

IoSetMasterIrpStatus implémente une stratégie uniforme pour fusionner les codes d’état de plusieurs IRPs subordonnés dans un code d’état pour un IRP maître. Par exemple, si un IRP principal 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 d’état de l’IRP défaillant est utilisé comme code d’état pour l’IRP maître. Toutefois, si les deux IRP subordonnés échouent, le code d’échec le plus grave est utilisé comme état pour l’IRP maître.

Avant le premier appel à IoSetMasterIrpStatus, le pilote définit le membre IoStatus.Status dans l’IRP maître sur STATUS_SUCCESS (ou pour STATUS_FT_READ_FROM_COPY dans le cas où il est prévu). Ensuite, à mesure que chaque IRP subordonné se termine, le pilote appelle IoSetMasterIrpStatus pour fusionner le code d’état de cet IRP avec le code d’état dans le protocole IRP principal. Dans cet appel, le paramètre PIRP pointe vers l’IRP maître, 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 d’état dans PIRP ->IoStatus.Status par la valeur Status dans les cas suivants :

  • La valeur d’état dans **PIRP* est STATUS_SUCCESS et Status est un code d’erreur.
  • La valeur d’état 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 toujours remplace la valeur d’état dans **PIRP*. Une valeur Status de STATUS_FT_READ_FROM_COPY ne jamais remplace la valeur d’état dans **PIRP*.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 8.
plateforme cible Universel
d’en-tête ntddk.h (include Ntddk.h, Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL N’importe quel niveau.

Voir aussi

IRP