다음을 통해 공유


디바이스가 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 버스 전원 관리 사양은 16비트 PMCSR(전원 관리 제어/상태 등록)을 정의합니다. 가장 낮은 두 비트("PowerState")는 모두 디바이스의 현재 전원 상태를 확인하고 디바이스를 새 전원 상태로 설정하는 데 사용됩니다. PDO가 pci.sys IRP_MN_SET_POWER/D3을 받으면 PMCSR을 읽고 PowerState 비트를 11b(전원 수준 D3)로 변경하고 PMCSR을 다시 씁니다.