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.
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. |