다음을 통해 공유


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 또는 XXX값에 STATUS_ 정보, 경고 또는 오류 중 하나의 완료 상태입니다. 자세한 내용은 NTSTATUS 값 사용을 참조하세요.

Pointer

예약. 내부 전용입니다.

Information

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

발언

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

상위 수준 드라이버의 IoCompletion 루틴은 일반적으로 낮은 드라이버에서 완료된 I/O 상태 블록을 IRP에서 확인합니다. 기본적으로 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