IO_STATUS_BLOCK 구조체(wdm.h)

드라이버는 IRP에 대해 IoCompleteRequest를 호출하기 전에 IRP의 I/O 상태 블록을 설정하여 I/O 요청의 최종 상태 나타냅니다.

구문

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

멤버

Status

이는 요청된 작업이 성공적으로 완료된 경우 STATUS_SUCCESS 또는 정보, 경고 또는 오류 STATUS_XXX 값 중 하나의 완료 상태. 자세한 내용은 NTSTATUS 값 사용을 참조하세요.

Pointer

예약되어 있습니다. 내부 전용입니다.

Information

요청 종속 값으로 설정됩니다. 예를 들어 전송 요청이 성공적으로 완료되면 전송된 바이트 수로 설정됩니다. 다른 STATUS_XXX로 전송 요청이 완료되면 이 멤버는 0으로 설정됩니다.

설명

드라이버의 디스패치 루틴이 오류 상태 값으로 IRP를 완료하지 않는 한 체인의 최저 수준 드라이버는 IRP의 I/O 상태 블록을 I/O 작업의 원래 요청자에게 반환되는 값으로 자주 설정합니다.

상위 수준 드라이버의 IoCompletion 루틴은 일반적으로 낮은 드라이버에서 완료된 I/O 상태 블록을 검사. 기본적으로 IRP의 I/O 상태 블록은 기본 디바이스 드라이버에서 모든 상위 수준 드라이버의 IoCompletion 루틴으로 다시 전달되는 유일한 정보입니다.

운영 체제는 호출자가 제공하는 출력 버퍼에 IO_STATUS_BLOCK 값을 쓰는 지원 루틴을 구현합니다. 예를 들어 ZwOpenFile 또는 NtOpenFile을 참조하세요. 이러한 루틴은 IO_STATUS_BLOCK 구조의 상태 코드와 일치하지 않을 수 있는 상태 코드를 반환합니다. 이러한 루틴 중 하나가 STATUS_PENDING 반환하는 경우 호출자는 I/O 작업이 완료되기를 기다린 다음 IO_STATUS_BLOCK 구조의 상태 코드를 검사 작업의 최종 상태 결정해야 합니다. 루틴이 STATUS_PENDING 이외의 상태 코드를 반환하는 경우 호출자는 IO_STATUS_BLOCK 구조의 상태 코드 대신 이 상태 코드를 사용해야 합니다.

자세한 내용은 I/O 상태 블록을 참조하세요.

요구 사항

요구 사항
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h 포함)

추가 정보

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSetCompletionRoutine