[Applies to KMDF and UMDF]

A driver's EvtDeviceArmWakeFromSx event callback function arms (that is, enables) a device so that it can trigger a wake signal while in a low-power device state. The wake signal causes the device to enter its working state (D0) and causes the system to enter its working state (S0).



NTSTATUS EvtDeviceArmWakeFromSx(
  _In_ WDFDEVICE Device
{ ... }


Device [in]

A handle to a framework device object.

Return value

If the EvtDeviceArmWakeFromSx callback function encounters no error, it must return STATUS_SUCCESS or another status value for which NT_SUCCESS(status) equals TRUE. Otherwise it must return a status value for which NT_SUCCESS(status) equals FALSE.

If NT_SUCCESS(status) equals FALSE, the framework calls the driver's EvtDeviceDisarmWakeFromSx callback function. (The framework does not report a device failure to the PnP manager.)


To register an EvtDeviceArmWakeFromSx callback function, a driver must call WdfDeviceInitSetPowerPolicyEventCallbacks. Drivers can register either an EvtDeviceArmWakeFromSx callback function or an EvtDeviceArmWakeFromSxWithReason callback function, but not both.

This callback function handles device-specific operations that are needed to enable the device to detect an external event that triggers a wake signal on the bus. The bus driver's EvtDeviceEnableWakeAtBus callback function handles bus-specific operations, such as enabling the PCI bus's Power Management Event (PME) signal.

If a driver has registered an EvtDeviceArmWakeFromSx or EvtDeviceArmWakeFromSxWithReason callback function, the framework calls it while the device is still in the D0 device power state, before the bus driver lowers the device's power state but after the framework has sent a wait/wake IRP on behalf of the driver.

The process occurs in the following sequence:

  1. The framework determines that the system is about to enter a low-power system state.

  2. The framework calls the driver's EvtDeviceArmWakeFromSx or EvtDeviceArmWakeFromSxWithReason callback function.

  3. The framework asks the driver for the device's bus to lower the device's power.

Immediately before a device enters a low-power state, the framework calls the driver's EvtDeviceD0Exit callback function.

For more information about when the framework calls this callback function, see PnP and Power Management Scenarios.

You do not need to provide an EvtDeviceArmWakeFromSx or EvtDeviceArmWakeFromSxWithReason callback function if your device does not require special hardware operations that enable the device to trigger a wake signal.

For more information about this callback function, see Supporting System Wake-Up.


To define an EvtDeviceArmWakeFromSx callback function, you must first provide a function declaration that identifies the type of callback function you’re defining. Windows provides a set of callback function types for drivers. Declaring a function using the callback function types helps Code Analysis for Drivers, Static Driver Verifier (SDV), and other verification tools find errors, and it’s a requirement for writing drivers for the Windows operating system.

For example, to define an EvtDeviceArmWakeFromSx callback function that is named MyDeviceArmWakeFromSx, use the EVT_WDF_DEVICE_ARM_WAKE_FROM_SX type as shown in this code example:


Then, implement your callback function as follows:

 MyDeviceArmWakeFromSx (
    WDFDEVICE  Device

The EVT_WDF_DEVICE_ARM_WAKE_FROM_SX function type is defined in the Wdfdevice.h header file. To more accurately identify errors when you run the code analysis tools, be sure to add the _Use_decl_annotations_ annotation to your function definition. The _Use_decl_annotations_ annotation ensures that the annotations that are applied to the EVT_WDF_DEVICE_ARM_WAKE_FROM_SX function type in the header file are used. For more information about the requirements for function declarations, see Declaring Functions by Using Function Role Types for KMDF Drivers. For information about _Use_decl_annotations_, see Annotating Function Behavior.


Target platform


Minimum KMDF version


Minimum UMDF version



Wdfdevice.h (include Wdf.h)



See also




Send comments about this topic to Microsoft