Função IoSetMasterIrpStatus (ntddk.h)

A rotina IoSetMasterIrpStatus substitui condicionalmente o valor status em um IRP pelo valor NTSTATUS especificado.

Sintaxe

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

Parâmetros

[in, out] MasterIrp

Um ponteiro para o IRP master. Para obter mais informações, consulte Comentários.

[in] Status

Um valor NTSTATUS a ser comparado ao membro Status do bloco de E/S status no IRP master.

Retornar valor

Nenhum

Comentários

Ao receber um IRP, um driver pode criar dois ou mais IRPs subordinados para executar o trabalho solicitado pelo IRP original (ou master). Quando os IRPs subordinados são concluídos, o driver coleta a conclusão status códigos dos IRPs subordinados e os mescla para formar um único código de status de conclusão para o IRP master.

IoSetMasterIrpStatus implementa uma política uniforme para mesclar os códigos status de vários IRPs subordinados em um código status para um IRP master. Por exemplo, se um IRP master for dividido em dois IRPs subordinados e um desses IRPs subordinados for bem-sucedido e o outro falhar, o código status do IRP com falha será usado como o código status para o IRP master. No entanto, se ambos os IRPs subordinados falharem, o código de falha mais grave será usado como o status para o IRP master.

Antes da primeira chamada para IoSetMasterIrpStatus, o driver define o membro IoStatus.Status no IRP master como STATUS_SUCCESS (ou para STATUS_FT_READ_FROM_COPY caso seja esperado). Em seguida, conforme cada IRP subordinado é concluído, o driver chama IoSetMasterIrpStatus para mesclar o código status desse IRP com o código status no IRP master. Nessa chamada, o parâmetro PIRP aponta para o MASTER IRP e o parâmetro Status é definido como o valor do membro IoStatus.Status no IRP subordinado.

Como regra geral, IoSetMasterIrpStatus substitui o código status em PIRP-IoStatus.Status > pelo valor Status nos seguintes casos:

  • O valor status em **PIRP* é STATUS_SUCCESS e Status é um código de erro.
  • O valor status em **PIRP* é um código de erro, mas Status é um código de erro mais grave.
Há duas exceções à regra geral. Um valor status de STATUS_VERIFY_REQUIRED sempre substitui o valor status em **PIRP*. Um valor status de STATUS_FT_READ_FROM_COPY nunca substitui o valor status em **PIRP*.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 8.
Plataforma de Destino Universal
Cabeçalho ntddk.h (inclua Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Qualquer nível.

Confira também

IRP