Condividi tramite


Funzione IoSetMasterIrpStatus (ntddk.h)

La routine IoSetMasterIrpStatus sostituisce in modo condizionale il valore Status in un IRP con il valore NTSTATUS specificato.

Sintassi

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

Parametri

[in, out] MasterIrp

Puntatore all'IRP master. Per altre informazioni, vedere la sezione Osservazioni.

[in] Status

Valore NTSTATUS da confrontare con il membro Status del blocco di stato di I/O nell'IRP master.

Valore restituito

nessuno

Osservazioni

Al ricevimento di un IRP, un driver può creare due o più IRP subordinati per eseguire il lavoro richiesto dall'IRP originale (o master). Al termine degli IRP subordinati, il driver raccoglie i codici di stato di completamento dai provider di integrazione subordinati e li unisce per formare un singolo codice di stato di completamento per l'IRP master.

IoSetMasterIrpStatus implementa un criterio uniforme per unire i codici di stato da più IRP subordinati in un codice di stato per un IRP master. Ad esempio, se un IRP master è suddiviso in due IRP subordinati e uno di questi IRP subordinati ha esito positivo e l'altro ha esito negativo, il codice di stato dell'IRP non riuscito viene usato come codice di stato per l'IRP master. Tuttavia, se entrambi i runtime di integrazione subordinati hanno esito negativo, il codice di errore più grave viene usato come stato per l'IRP master.

Prima della prima chiamata a IoSetMasterIrpStatus, il driver imposta il membro IoStatus.Status nel master IRP su STATUS_SUCCESS (o su STATUS_FT_READ_FROM_COPY nel caso sia previsto). Al termine di ogni IRP subordinato, il driver chiama IoSetMasterIrpStatus per unire il codice di stato da questo IRP con il codice di stato nel master IRP. In questa chiamata il parametro PIRP punta all'IRP master e il parametro Status viene impostato sul valore del membro IoStatus.Status nell'IRP subordinato.

Come regola generale, IoSetMasterIrpStatus sostituisce il codice di stato in PIRP-IoStatus.Status > con il valore Status nei casi seguenti:

  • Il valore di stato in **PIRP* è STATUS_SUCCESS e Status è un codice di errore.
  • Il valore di stato in **PIRP* è un codice di errore, ma Status è un codice di errore più grave.
Esistono due eccezioni alla regola generale. Un valore status di STATUS_VERIFY_REQUIRED sostituisce sempre il valore di stato in **PIRP*. Un valore status di STATUS_FT_READ_FROM_COPY non sostituisce mai il valore di stato in **PIRP*.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 8.
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Qualsiasi livello.

Vedi anche

IRP