estrutura IO_STATUS_BLOCK (wdm.h)

Um driver define o bloco de status de E/S de um IRP para indicar o status final de uma solicitação de E/S, antes de chamar IoCompleteRequest para o IRP.

Sintaxe

typedef struct _IO_STATUS_BLOCK {
  union {
    NTSTATUS Status;
    PVOID    Pointer;
  };
  ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

Membros

Status

Esse é o status de conclusão, STATUS_SUCCESS se a operação solicitada foi concluída com êxito ou um valor informativo, aviso ou erro STATUS_XXX. Para obter mais informações, consulte Usando valores NTSTATUS.

Pointer

Reservado. Apenas para uso interno.

Information

Isso é definido como um valor dependente de solicitação. Por exemplo, após a conclusão bem-sucedida de uma solicitação de transferência, isso é definido como o número de bytes transferidos. Se uma solicitação de transferência for concluída com outro STATUS_XXX, esse membro será definido como zero.

Comentários

A menos que a rotina de expedição de um driver conclua um IRP com um valor de status de erro, o driver de nível mais baixo da cadeia frequentemente define o bloco de E/S do IRP status para os valores que serão retornados ao solicitante original da operação de E/S.

As rotinas de IoCompletion de drivers de nível superior geralmente marcar o bloco de status de E/S em IRPs concluído por drivers inferiores. Por design, o bloco de status de E/S em um IRP é a única informação passada do driver de dispositivo subjacente para todas as rotinas de IoCompletion de drivers de nível superior.

O sistema operacional implementa rotinas de suporte que gravam valores IO_STATUS_BLOCK em buffers de saída fornecidos pelo chamador. Por exemplo, consulte ZwOpenFile ou NtOpenFile. Essas rotinas retornam códigos status que podem não corresponder aos códigos de status nas estruturas de IO_STATUS_BLOCK. Se uma dessas rotinas retornar STATUS_PENDING, o chamador deverá aguardar a conclusão da operação de E/S e, em seguida, marcar o código de status na estrutura IO_STATUS_BLOCK para determinar o status final da operação. Se a rotina retornar um código status diferente de STATUS_PENDING, o chamador deverá contar com esse código status em vez do código status na estrutura IO_STATUS_BLOCK.

Para obter mais informações, consulte Blocos de status de E/S.

Requisitos

Requisito Valor
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Confira também

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine