Expand Minimize

EvtDeviceArmWakeFromSx function

[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).

Syntax


EVT_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx;

NTSTATUS EvtDeviceArmWakeFromSx(
  _In_  WDFDEVICE Device
)
{ ... }

Parameters

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.)

Remarks

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.

Examples

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:


EVT_WDF_DEVICE_ARM_WAKE_FROM_SX MyDeviceArmWakeFromSx;

Then, implement your callback function as follows:



_Use_decl_annotations_
NTSTATUS
 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.

Requirements

Minimum KMDF version

1.0

Minimum UMDF version

2.0

Header

Wdfdevice.h (include Wdf.h)

IRQL

PASSIVE_LEVEL

See also

EvtDeviceArmWakeFromS0
EvtDeviceArmWakeFromSxWithReason
EvtDeviceDisarmWakeFromSx

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft. All rights reserved.