estructura IO_STATUS_BLOCK (wdm.h)

Un controlador establece el bloque de estado de E/S de IRP para indicar el estado final de una solicitud de E/S, antes de llamar a IoCompleteRequest para irP.

Sintaxis

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

Miembros

Status

Este es el estado de finalización, ya sea STATUS_SUCCESS si la operación solicitada se completó correctamente o un valor informativo, de advertencia o de error STATUS_XXX . Para obtener más información, vea Uso de valores NTSTATUS.

Pointer

Reservado. Solo para uso interno.

Information

Se establece en un valor dependiente de la solicitud. Por ejemplo, al completar correctamente una solicitud de transferencia, se establece en el número de bytes transferidos. Si se completa una solicitud de transferencia con otro STATUS_XXX, este miembro se establece en cero.

Comentarios

A menos que la rutina de distribución de un controlador complete un IRP con un valor de estado de error, el controlador de nivel más bajo de la cadena establece con frecuencia el bloque de estado de E/S del IRP en los valores que se devolverán al solicitante original de la operación de E/S.

Las rutinas de IoCompletion de los controladores de nivel superior suelen comprobar el bloque de estado de E/S en irP completados por controladores inferiores. Por diseño, el bloque de estado de E/S en un IRP es la única información que se pasa del controlador de dispositivo subyacente a todas las rutinas de IoCompletion de los controladores de nivel superior.

El sistema operativo implementa rutinas de soporte que escriben valores IO_STATUS_BLOCK en búferes de salida proporcionados por el autor de la llamada. Por ejemplo, vea ZwOpenFile o NtOpenFile. Estas rutinas devuelven códigos de estado que podrían no coincidir con los códigos de estado de las estructuras de IO_STATUS_BLOCK . Si una de estas rutinas devuelve STATUS_PENDING, el autor de la llamada debe esperar a que se complete la operación de E/S y, a continuación, compruebe el código de estado en la estructura IO_STATUS_BLOCK para determinar el estado final de la operación. Si la rutina devuelve un código de estado distinto de STATUS_PENDING, el autor de la llamada debe basarse en este código de estado en lugar del código de estado de la estructura IO_STATUS_BLOCK .

Para obtener más información, consulte Bloques de estado de E/S.

Requisitos

Requisito Valor
Header wdm.h (incluye Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Consulte también

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine