다음을 통해 공유


유휴 감지를 위한 Power Manager 루틴 사용

전원 관리자는 PoRegisterDeviceForIdleDetectionPoSetDeviceBusy 루틴을 통해 유휴 감지를 지원합니다.

디바이스에 유휴 탐지를 사용하도록 설정하기 위해 디바이스 전원 정책 소유자는 PoRegisterDeviceForIdleDetection을 호출합니다.

  • 시스템이 성능을 최적화할 때 적용할 유휴 시간 제한 값입니다.

  • 시스템이 보존을 위해 최적화할 때 적용할 유휴 시간 제한 값입니다.

  • 유휴 상태일 때 디바이스가 전환되어야 하는 디바이스 전원 상태입니다.

PoRegisterDeviceForIdleDetection 유휴 카운터에 대한 포인터를 반환합니다. 이 포인터는 드라이버가 나중에 유휴 감지를 사용하지 않도록 설정하는 데 사용합니다. PoRegisterDeviceForIdleDetection 호출자는 IRQL < DISPATCH_LEVEL에서 실행 중이어야 합니다.

드라이버는 디바이스가 시작되고 디바이스 전원 IRP를 처리할 준비가 된 후 언제든지 유휴 감지를 위해 디바이스를 등록할 수 있습니다. 예를 들어 드라이버는 PnP 시작 디바이스 IRP에 대한 IoCompletion 루틴의 일부로 유휴 감지를 활성화할 수 있습니다.

지정된 디바이스의 제한 시간 값은 관찰된 디바이스 동작에 따라 디바이스의 전원 작동 대기 시간에 비례해야 합니다. 특정 유형의 디바이스의 경우 드라이버는 -1 보존 및 성능 제한 시간을 지정하여 디바이스 클래스에 대한 표준 전원 정책 제한 시간을 사용할 수 있습니다. 자세한 내용은 디바이스별 설명서를 참조하세요.

디바이스를 사용 중인 경우 드라이버는 PoSetDeviceBusy호출하여 PoRegisterDeviceForIdleDetection반환된 포인터를 전달해야 합니다. PoSetDeviceBusy 유휴 카운터를 다시 설정하여 디바이스에 대한 유휴 카운트다운을 다시 시작합니다. 드라이버는 모든 I/O 작업에서 PoSetDeviceBusy 호출해야 합니다.

전원 관리자는 디바이스가 유휴 상태인지 여부를 확인하기 위해 유휴 카운터의 값을 현재 시스템 전원 정책(보존 또는 성능)에 대해 드라이버가 지정한 유휴 시간 제한 값과 비교합니다. 시스템 전원 정책과 관련된 함수는 Microsoft Windows SDK를 참조하세요.

디바이스가 제한 시간 값을 충족하면 전원 관리자는 드라이버가 PoRegisterDeviceForIdleDetection호출에서 전달한 디바이스 전원 상태를 지정하여 디바이스 세트 전원 IRP를 전송합니다. 전원 관리자는 "set-power IRP"를 보내기 전에 쿼리 IRP를 보내지 않습니다. 스택의 드라이버는 다른 모든 것을 처리할 때와 마찬가지로 설정 전원 IRP를 처리합니다. 적시에 완료해야 하며 실패할 수 없습니다. (장치 Power-Down IRP처리를 참조하세요.)

드라이버가 더 이상 유휴 감지를 필요로 하지 않거나 장치 전원 차단에 대한 IRP를 처리할 준비가 되지 않은 경우, PoRegisterDeviceForIdleDetection을 다시 호출하여 시간 초과 값으로 0을 모두 전달해야 합니다. 제한 시간을 0으로 설정하면 에너지 절약(배터리) 및 성능(AC) 전원 정책 모두에 대한 유휴 감지가 비활성화됩니다. 드라이버는 유휴 검색을 빠르게 다시 활성화할 수 있습니다. 단순히 0이 아닌 시간 제한 값으로 PoRegisterDeviceForIdleDetection을 호출하면 됩니다. 드라이버가 장치를 등록하면, 장치의 전원이 꺼졌다가 다시 깨어났더라도 시간 제한 값을 변경하여 유휴 상태 감지를 사용하거나 사용하지 않도록 설정할 수 있습니다.