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