다음을 통해 공유


필터 또는 함수 드라이버에서 시스템 Query-Power IRP 처리

필터 또는 함수 드라이버(디바이스의 전원 정책 소유자가 아님)는 다음 단계에서 시스템 쿼리 전원 IRP를 다음 하위 드라이버에 전달해야 합니다.

  1. IoAcquireRemoveLock을 호출하여 현재 IRP를 전달하여 드라이버가 전원 IRP를 처리하는 동안 PnP IRP_MN_REMOVE_DEVICE 요청을 받지 않도록 합니다.

    IoAcquireRemoveLock이 오류 상태 반환하는 경우 드라이버는 IRP를 계속 처리해서는 안 됩니다. 대신 Windows Vista부터 드라이버는 IoCompleteRequest를 호출하여 IRP를 완료하고 오류 상태 반환해야 합니다. Windows Server 2003, Windows XP 및 Windows 2000에서 드라이버는 PoStartNextPowerIrp를 호출하고, IoCompleteRequest를 호출하여 IRP를 완료하고, 오류 상태 반환해야 합니다.

  2. 쿼리에 실패할지 여부를 결정합니다. 지침은 필터 또는 함수 드라이버에서 시스템 Query-Power IRP 실패 및 해당 섹션에 설명된 대로 전체 처리를 참조하세요.

  3. PoStartNextPowerIrp를 호출합니다. (Windows Server 2003, Windows XP 및 Windows 2000만 해당)

  4. IRP 스택 위치(IoSkipCurrentIrpStackLocation 또는 IoCopyCurrentIrpStackLocationToNext)를 설정합니다. 드라이버는 IRP에서 IoCompletion 루틴을 설정할 수 있지만 그렇게 하는 것은 거의 필요하지 않습니다.

  5. IoCallDriver(Windows 7 및 Windows Vista) 또는 PoCallDriver(Windows Server 2003, Windows XP 및 Windows 2000)를 호출하여 IRP를 다음 하위 드라이버에 전달합니다.

  6. IoReleaseRemoveLock을 호출합니다. 그러나 드라이버가 IRP에 대해 IoCompletion 루틴을 설정한 경우 대신 IoCompletion 루틴에서 이 호출을 수행합니다.

  7. DispatchPower 루틴에서 STATUS_PENDING 반환합니다.