유휴 검색에 Power Manager 루틴 사용
전원 관리자는 PoRegisterDeviceForIdleDetection 및 PoSetDeviceBusy 루틴을 통해 유휴 검색을 지원합니다.
디바이스에 대해 유휴 검색을 사용하도록 설정하기 위해 디바이스 전원 정책 소유자는 PoRegisterDeviceForIdleDetection을 호출하고 다음을 지정합니다.
시스템이 성능을 최적화할 때 적용할 유휴 시간 제한 값입니다.
시스템이 보존에 최적화할 때 적용할 유휴 시간 제한 값입니다.
유휴 상태일 때 디바이스가 전환되어야 하는 디바이스 전원 상태입니다.
PoRegisterDeviceForIdleDetection은 유휴 카운터에 대한 포인터를 반환하며, 드라이버가 나중에 유휴 검색을 사용하지 않도록 설정하는 데 사용합니다. PoRegisterDeviceForIdleDetection의 호출자는 IRQL < DISPATCH_LEVEL 실행되어야 합니다.
드라이버는 디바이스가 시작되고 디바이스 전원 IRP를 처리할 준비가 된 후 언제든지 유휴 검색을 위해 디바이스를 등록할 수 있습니다. 예를 들어 드라이버는 PnP 시작 디바이스 IRP에 대한 IoCompletion 루틴의 일부로 유휴 검색을 사용하도록 설정할 수 있습니다.
지정된 디바이스의 제한 시간 값은 관찰된 디바이스 동작에 따라 디바이스의 전원 켜기 대기 시간에 비례해야 합니다. 특정 유형의 디바이스의 경우 드라이버는 보존 및 성능 제한 시간 값을 -1로 지정하여 디바이스 클래스에 대한 표준 전원 정책 제한 시간을 사용할 수 있습니다. 자세한 내용은 디바이스별 설명서를 참조하세요.
디바이스가 사용 중인 경우 드라이버는 PoSetDeviceBusy를 호출하여 PoRegisterDeviceForIdleDetection에서 반환된 포인터를 전달해야 합니다. PoSetDeviceBusy 는 유휴 카운터를 다시 설정하므로 디바이스의 유휴 카운트다운을 다시 시작합니다. 드라이버는 모든 I/O 작업에서 PoSetDeviceBusy 를 호출해야 합니다.
디바이스가 유휴 상태인지 여부를 확인하기 위해 전원 관리자는 유휴 카운터의 값을 현재 시스템 전원 정책(보존 또는 성능)에 대해 드라이버가 지정한 유휴 시간 제한 값과 비교합니다. 시스템 전원 정책과 관련된 함수는 Microsoft Windows SDK 참조하세요.
디바이스가 제한 시간 값을 충족하면 전원 관리자는 디바이스 세트 전원 IRP를 보내 드라이버가 PoRegisterDeviceForIdleDetection에 대한 호출에서 전달한 디바이스 전원 상태를 지정합니다. 전원 관리자는 set-power IRP를 보내기 전에 쿼리 IRP를 보내지 않습니다. 스택의 드라이버는 다른 모든 IRP를 처리하므로 설정 전원 IRP를 처리합니다. 적시에 완료해야 하며 실패할 수 없습니다. ( 디바이스 Power-Down IRP 처리를 참조하세요.)
드라이버가 더 이상 유휴 검색을 필요로 하지 않거나 디바이스 전원이 꺼진 IRP를 처리할 준비가 되지 않은 경우 PoRegisterDeviceForIdleDetection 을 다시 호출하여 두 시간 제한 값 모두에 대해 0을 전달해야 합니다. 제한 시간을 0으로 설정하면 보존(배터리) 및 AC(성능) 전원 정책 모두에 대한 유휴 검색이 비활성화됩니다. 드라이버는 유휴 검색을 빠르게 다시 활성화할 수 있습니다. 단순히 0이 아닌 시간 제한 값으로 PoRegisterDeviceForIdleDetection 을 호출합니다. 드라이버가 디바이스를 등록하면 디바이스의 전원이 꺼지고 다시 깨어났더라도 시간 제한 값을 변경하여 유휴 검색을 사용하거나 사용하지 않도록 설정할 수 있습니다.