Compartilhar via


Função IoSetMasterIrpStatus (ntddk.h)

A rotina IoSetMasterIrpStatus substitui condicionalmente o valor de 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 domestre. Para obter mais informações, consulte Comentários.

[in] Status

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

Valor de retorno

Nenhum

Observações

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

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

Antes da primeira chamada para IoSetMasterIrpStatus, o driver define o membro IoStatus.Status no IRP mestre como STATUS_SUCCESS (ou 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 de status desse IRP com o código de status no IRP mestre. Nesta chamada, o parâmetro PIRP aponta para o IRP mestre e o parâmetro status é definido como o valor do membro IoStatus.Status no IRP subordinado.

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

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

Requisitos

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

Consulte também

IRP