디바이스가 Low-Power 상태로 들어갑니다.

다음 중 하나가 발생하면 디바이스가 작동 중(D0) 상태를 벗어나 저전력 상태로 들어갑니다.

  • 디바이스는 유휴 상태(즉, 액세스되지 않음)이며 시스템이 작동 중(S0) 상태로 유지되는 동안 저전력 유휴 상태를 입력할 수 있습니다.

  • 시스템의 전원 상태가 작동 상태(S0)에서 저전력 상태로 변경되었습니다. (드라이버는 WdfDeviceGetSystemPowerAction 을 호출하여 시스템의 전원 상태가 변경되는 이유를 확인할 수 있습니다.)

디바이스를 지원하는 각 함수 및 필터 드라이버에 대해 프레임워크는 드라이버 스택에서 가장 높은 드라이버부터 시작하여 한 번에 하나의 드라이버를 순서대로 수행합니다.

  1. 드라이버가 자체 관리형 I/O를 사용하는 경우 프레임워크는 드라이버의 EvtDeviceSelfManagedIoSuspend 콜백 함수를 호출합니다.

  2. 프레임워크는 드라이버의 모든 전원 관리형 I/O 큐를 중지하고 EvtIoStop 콜백 함수(있는 경우)를 호출합니다.

  3. 드라이버가 디바이스의 전원 정책 소유자인 경우 프레임워크는 EvtDeviceArmWakeFromS0, EvtDeviceArmWakeFromSx 또는 EvtDeviceArmWakeFromSxWithReason 콜백 함수를 호출합니다.

  4. 하드웨어 및 드라이버가 DMA를 지원하는 경우 프레임워크는 생성된 각 DMA 채널에 대해 드라이버의 EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlushEvtDmaEnablerDisable 콜백 함수(있는 경우)를 호출합니다.

  5. 프레임워크는 드라이버의 EvtDeviceD0ExitPreInterruptsDisabled 콜백 함수(있는 경우)를 호출한 다음 각 인터럽트에 대해 드라이버의 EvtInterruptDisable 콜백 함수(있는 경우)를 호출하여 드라이버가 디바이스 인터럽트를 비활성화할 수 있도록 합니다.

  6. 프레임워크는 드라이버의 EvtDeviceD0Exit 콜백 함수(있는 경우)를 호출합니다.

버스 드라이버는 마지막으로 호출되는 스택의 드라이버입니다. 프레임워크가 버스 드라이버의 EvtDeviceD0Exit 콜백 함수를 호출할 때 콜백 함수는 디바이스의 전원 상태(버스의 자식 디바이스)를 저전력 상태로 설정합니다. 이 프레임워크는 전원 정책 소유자가 다른 저전력 상태를 지정하지 않는 한 D3 저전력 상태를 지정합니다.

참고

버스 드라이버에서 자식 디바이스의 전원 상태를 설정하는 데 사용하는 방법은 버스에 따라 다릅니다. 예를 들어 PCI 버스 전원 관리 사양은 PMCSR(16비트 전원 관리 제어/상태 등록)을 정의합니다. 가장 낮은 두 비트("PowerState")는 디바이스의 현재 전원 상태를 결정하며 디바이스를 새 전원 상태로 설정하는 데 사용됩니다. PDO가 pci.sys IRP_MN_SET_POWER/D3을 받으면 PMCSR을 읽고, PowerState 비트를 11b(전원 수준 D3)로 변경하고, PMCSR을 다시 씁니다.