디바이스가 저전력 상태로 전환되면, 프레임워크는 I/O 처리를 위한 인터럽트를 연결 해제하거나 비활성으로 보고합니다. WINDOWS 8.1에서 실행되는 KMDF 1.13 및 UMDF 2.0부터 WDF 드라이버는 디바이스가 저전력 상태로 전환될 때 활성 상태로 유지되는 프레임워크 인터럽트 개체를 만든 다음 디바이스를 각성하고 완전히 D0 상태로 복원하는 데 사용할 수 있습니다.
SoC(System on a Chip) 플랫폼용 WDF 드라이버를 개발하는 경우 이러한 인터럽트를 사용하여 기존의 절전 모드 해제 신호 메커니즘을 제공하지 않는 디바이스를 각성할 수 있습니다. 이 기능을 사용하려면 디바이스에 ACPI를 통해 노출되는 웨이크업 인터럽트를 위한 하드웨어 지원이 있어야 합니다. 인터럽트를 만드는 드라이버는 장치의 전원 정책 소유자여야 합니다.
디바이스가 저전력 상태로 전환될 때 프레임워크는 절전 모드 해제 가능으로 식별된 인터럽트 연결을 끊지 않습니다. 디바이스가 중단되면 프레임워크는 IRQL = PASSIVE_LEVEL에서 드라이버의 EvtDeviceD0Entry 및 EvtInterruptIsr 콜백 루틴을 호출합니다.
드라이버가 I/O 처리를 위해 수동 수준 인터럽트 개체 이미 만든 경우 절전 모드 해제 기능에 대해 동일한 인터럽트 개체를 공유하는 것이 좋습니다. 이 시나리오에서 드라이버의 EvtInterruptIsr 콜백 루틴은 I/O 관련 인터럽트 및 웨이크 처리에 대한 조건부 논리를 구현하여 해당 처리를 수행합니다.
그러나 드라이버가 디바이스의 IRQL(DIRQL)에서 처리해야 하는 인터럽트를 사용하는 경우 절전 모드 해제 기능을 제공하기 위해 추가 프레임워크 인터럽트 개체를 만드는 것이 좋습니다.
다음 단계에 따라 KMDF 또는 UMDF 드라이버에서 절전 모드 해제 가능 인터럽트 개체를 만듭니다.
WdfDeviceAssignS0IdleSettings은 일반적으로 EvtDriverDeviceAdd에서 호출되며, IdleCaps 매개 변수에 IdleCanWakeFromS0을 지정합니다.
필요에 따라 WdfDeviceInitSetPowerPolicyEventCallbacks을 호출하여 시스템 깨우기 지원에 설명된 콜백 함수를 등록합니다.
WDF_INTERRUPT_CONFIG_INIT 호출하여 WDF_INTERRUPT_CONFIG 구조를 초기화합니다. 수동 수준에서 호출할 EvtInterruptIsr 콜백 함수를 제공합니다. 구성 구조에서 PassiveHandling 및 CanWakeDevice을(를) TRUE로 설정하세요. 그런 다음 드라이버의 EvtDevicePrepareHardware 콜백 함수에서 WdfInterruptCreate 호출하여 프레임워크 인터럽트 개체를 만듭니다.
WdfDeviceAssignSxWakeSettings 호출하여 저전력 상태에서 시스템을 절전 모드로 전환하도록 디바이스를 구성합니다.
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&wakeSettings); wakeSettings.DxState = PowerDeviceD3; wakeSettings.UserControlOfWakeSettings = WakeDoNotAllowUserControl; wakeSettings.Enabled = WdfTrue; status = WdfDeviceAssignSxWakeSettings(Device, &wakeSettings); if (!NT_SUCCESS(status)) { Trace(TRACE_LEVEL_ERROR,"WdfDeviceAssignSxWakeSettings failed %x\n", status); return status; }디바이스가 저전력 상태로 전환되면 프레임워크는 깨우기 가능한 인터럽트에 대해 EvtInterruptDisable을 호출하지 않습니다. 프레임워크는 드라이버가 제공한 경우 EvtDeviceArmWakeFromS0 호출합니다.
디바이스가 웨이크업 인터럽트를 신호로 보낼 때, 프레임워크는 드라이버의 EvtDeviceD0Entry 콜백 루틴을 호출합니다.
드라이버의 EvtDeviceD0Entry 콜백이 성공을 반환하면 프레임워크는 수동 수준에서 드라이버의 EvtInterruptIsr 콜백을 호출합니다. 인터럽트 처리기가 반환되기 전에 인터럽트 컨트롤러에서 인터럽트를 중지해야 합니다. 드라이버가 EvtDeviceD0Entry에서 오류 코드를 반환하면 프레임워크는 인터럽트 연결을 끊고, 드라이버가 제공한 경우 EvtInterruptDisable 콜백을 호출합니다.
프레임워크는, 드라이버가 제공한 경우, 다음 웨이크 이벤트 콜백 루틴을 호출합니다.
프레임워크는 함수 또는 필터 드라이버 에 대한Power-Up 시퀀스에 설명된 대로 일반적인 전원 증가 콜백 시퀀스로 계속됩니다.
!wdfkd.wdfinterrupt 디버거 확장을 사용하여 특정 인터럽트가 절전 모드 해제 가능으로 구성되었는지 여부를 표시할 수 있습니다.
절전 모드 해제 기능은 USB 선택적 일시 중단과 함께 사용할 수 없습니다.