Función IoSetMasterIrpStatus (ntddk.h)

La rutina IoSetMasterIrpStatus reemplaza condicionalmente el valor status de un IRP por el valor NTSTATUS especificado.

Sintaxis

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

Parámetros

[in, out] MasterIrp

Puntero al IRP maestro. Para obtener más información, vea la sección Comentarios.

[in] Status

Valor NTSTATUS que se va a comparar con el miembro Status del bloque de estado de E/S en el IRP maestro.

Valor devuelto

None

Observaciones

Al recibir un IRP, un controlador puede crear dos o más IRP subordinados para realizar el trabajo solicitado por el IRP original (o maestro). Cuando se completan los IRP subordinados, el controlador recopila los códigos de estado de finalización de los IRP subordinados y los combina para formar un único código de estado de finalización para el IRP maestro.

IoSetMasterIrpStatus implementa una directiva uniforme para combinar los códigos de estado de varios IRP subordinados en un código de estado para un IRP maestro. Por ejemplo, si un IRP maestro se divide en dos IRP subordinados y uno de estos IRP subordinados se ejecuta correctamente y el otro produce un error, el código de estado del IRP con errores se usa como código de estado para el IRP maestro. Sin embargo, si se produce un error en ambos IRP subordinados, se usa el código de error más grave como estado del IRP maestro.

Antes de la primera llamada a IoSetMasterIrpStatus, el controlador establece el miembro IoStatus.Status en el IRP maestro en STATUS_SUCCESS (o en STATUS_FT_READ_FROM_COPY en caso de que se espere). A continuación, a medida que se completa cada IRP subordinado, el controlador llama a IoSetMasterIrpStatus para combinar el código de estado de este IRP con el código de estado en el IRP maestro. En esta llamada, el parámetro PIRP apunta al IRP maestro y el parámetro Status se establece en el valor del miembro IoStatus.Status en el IRP subordinado.

Como regla general, IoSetMasterIrpStatus reemplaza el código de estado en PIRP-IoStatus.Status > por el valor Status en los casos siguientes:

  • El valor de estado de **PIRP* es STATUS_SUCCESS y Status es un código de error.
  • El valor de estado en **PIRP* es un código de error, pero El estado es un código de error más grave.
Hay dos excepciones a la regla general. Un valor status de STATUS_VERIFY_REQUIRED siempre reemplaza el valor de estado en **PIRP*. Un valor status de STATUS_FT_READ_FROM_COPY nunca reemplaza el valor de estado en **PIRP*.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.
Plataforma de destino Universal
Encabezado ntddk.h (include Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL Cualquier nivel.

Consulte también

IRP