The SystemWake member of DEVICE_CAPABILITIES contains the lowest (least-powered) system power state from which the device can wake the system, or PowerSystemUnspecified if the device cannot wake the system.

The bus driver sets this value at when it enumerates the device. A higher-level driver can change the value to a higher-powered state but cannot change it to a lower-powered state. For example, if the bus driver sets SystemWake to S3 but a driver further up the device stack supports wake-up only from S2, the higher-level driver can change the value to S2. If a driver changes SystemWake, it might also have to change DeviceWake, as explained in the next section.

Drivers rarely need to propagate changed values back down the device stack. Because changes make the device capabilities more restrictive, lower drivers do not see requests that they cannot handle. In the previous example, a higher-level driver fails any request to wake the system from a lower-powered state than S2, so lower drivers never see such a request. However, if a lower driver must be aware of any changes, it can send a PnP IRP_MN_QUERY_CAPABILITIES to its own device stack during its processing of an IRP_MN_START_DEVICE.

If both the SystemWake and DeviceWake members are nonzero (that is, not PowerSystemUnspecified), then the device and its drivers support wake-up on this system.

On non-ACPI hardware, this member always contains zero (PowerSystemUnspecified).



Send comments about this topic to Microsoft

© 2015 Microsoft