IoSetMasterIrpStatus 함수(ntddk.h)

IoSetMasterIrpStatus 루틴은 IRP의 Status 값을 지정된 NTSTATUS 값으로 조건부로 바꿉니다.

구문

void IoSetMasterIrpStatus(
  [in, out] PIRP     MasterIrp,
  [in]      NTSTATUS Status
);

매개 변수

[in, out] MasterIrp

master IRP에 대한 포인터입니다. 자세한 내용은 설명 부분을 참조하세요.

[in] Status

master IRP에서 I/O 상태 블록상태 멤버와 비교할 NTSTATUS 값입니다.

반환 값

없음

설명

IRP를 받으면 드라이버는 원본(또는 master) IRP에서 요청한 작업을 수행하기 위해 두 개 이상의 하위 IRP를 만들 수 있습니다. 하위 IRP가 완료되면 드라이버는 하위 IRP에서 완성 상태 코드를 수집하고 병합하여 master IRP에 대한 단일 완성 상태 코드를 형성합니다.

IoSetMasterIrpStatus는 여러 하위 IRP의 상태 코드를 master IRP에 대한 상태 코드로 병합하기 위한 균일한 정책을 구현합니다. 예를 들어 master IRP가 두 개의 하위 IRP로 분할되고 이러한 하위 IRP 중 하나가 성공하고 다른 하나는 실패하는 경우 실패한 IRP의 상태 코드가 master IRP에 대한 상태 코드로 사용됩니다. 그러나 두 하위 IRP가 모두 실패하면 더 심각한 오류 코드가 master IRP에 대한 상태 사용됩니다.

IoSetMasterIrpStatus에 대한 첫 번째 호출 전에 드라이버는 master IRP의 IoStatus.Status 멤버를 STATUS_SUCCESS(또는 예상되는 경우 STATUS_FT_READ_FROM_COPY)로 설정합니다. 다음으로, 각 하위 IRP가 완료되면 드라이버는 IoSetMasterIrpStatus를 호출하여 이 IRP의 상태 코드를 master IRP의 상태 코드와 병합합니다. 이 호출에서 PIRP 매개 변수는 master IRP를 가리키고 Status 매개 변수는 하위 IRP의 IoStatus.Status 멤버 값으로 설정됩니다.

일반적으로 IoSetMasterIrpStatus는 PIRP-IoStatus.Status>의 상태 코드를 다음 경우 상태 값으로 바꿉니다.

  • **PIRP*의 상태 값은 STATUS_SUCCESS 상태 오류 코드입니다.
  • **PIRP*의 상태 값은 오류 코드이지만 상태는 더 심각한 오류 코드입니다.
일반 규칙에는 두 가지 예외가 있습니다. 상태 값 STATUS_VERIFY_REQUIRED 항상 **PIRP*의 상태 값을 바꿉니다. 상태 값 STATUS_FT_READ_FROM_COPY **PIRP*의 상태 값을 대체하지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 시작해서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 모든 수준.

추가 정보

IRP