IoRaiseHardError 함수(ntddk.h)

IoRaiseHardError 루틴은 사용자에게 디바이스 I/O 오류가 발생했음을 경고하는 대화 상자를 표시합니다. 이는 물리적 디바이스가 실패했음을 나타낼 수 있습니다.

구문

void IoRaiseHardError(
  [in]           PIRP           Irp,
  [in, optional] PVPB           Vpb,
  [in]           PDEVICE_OBJECT RealDeviceObject
);

매개 변수

[in] Irp

디바이스 I/O 오류로 인해 실패한 IRP에 대한 포인터입니다.

[in, optional] Vpb

탑재된 파일 개체에 대한 VPB(볼륨 매개 변수 블록)에 대한 포인터입니다(있는 경우). 디바이스 개체와 연결된 VPB가 없는 경우 이 매개 변수는 NULL 입니다.

[in] RealDeviceObject

I/O 작업이 실패한 물리적 디바이스를 나타내는 디바이스 개체에 대한 포인터입니다.

반환 값

없음

설명

최고 수준의 드라이버, 특히 파일 시스템 드라이버는 IoRaiseHardError를 호출합니다.

경고

IoRaiseHardError는 일반 커널 APC를 사용하여 사용자 대화 상자를 만들기 때문에 디바이스 오류가 발생할 때 일반 커널 APC를 사용하지 않도록 설정하면 교착 상태가 발생할 수 있습니다. 예를 들면 다음과 같습니다.

  1. 상위 수준 필터 드라이버는 KeEnterCriticalRegion (일반 커널 APC를 사용하지 않도록 설정)을 호출하고 파일 시스템 드라이버에 I/O 요청을 보냅니다. 필터 드라이버는 필터 드라이버가 KeLeaveCriticalRegion (일반 커널 APC를 다시 활성화)을 호출하기 전에 파일 시스템 드라이버의 요청 완료를 기다립니다.

  2. 파일 시스템에서 오류가 발생하고 파일 시스템 드라이버가 IoRaiseHardError 를 호출하여 사용자에게 오류를 보고합니다. 파일 시스템 드라이버가 대화 상자에서 대기합니다.

  3. 교착 상태가 이제 존재합니다. 대화 상자를 만들기 위해 IoRaiseHardError에서 만든 일반 커널 APC는 일반 커널 APC가 사용하도록 설정될 때까지 기다립니다. 파일 시스템은 I/O 요청을 완료하기 전에 대화 상자에서 대기합니다. 필터 드라이버는 I/O 요청이 완료될 때까지 기다린 후 KeLeaveCriticalRegion (일반 커널 APC를 다시 활성화)을 호출합니다.

이 루틴의 동작은 실행 중인 스레드에 대한 하드 오류의 현재 상태에 따라 달라집니다. IoSetThreadHardErrorMode를 호출하여 하드 오류를 사용하지 않도록 설정한 경우 이 루틴은 데이터를 사용자 버퍼로 전송하지 않고 Irp에서 지정한 IRP를 완료합니다. 또한 사용자에게 이 실패를 알리는 메시지가 전송되지 않습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntddk.h(Ntddk.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlIoApcLte(wdm)

추가 정보

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode