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