EvtDeviceWdmPostPoFxRegisterDevice function
[Applies to KMDF only]
The EvtDeviceWdmPostPoFxRegisterDevice callback function performs device-specific operations after the framework has registered with the power framework.
Syntax
EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDeviceWdmPostPoFxRegisterDevice; NTSTATUS EvtDeviceWdmPostPoFxRegisterDevice( _In_ WDFDEVICE Device, _In_ POHANDLE PoHandle ) { ... }
Parameters
- Device [in]
-
A handle to a framework device object.
- PoHandle [in]
-
A handle that represents the device’s registration with the power framework.
Return value
An NTSTATUS value indicating success or failure of the operations performed in this callback. If failure is returned, the framework in turn will fail IRP_MN_START_DEVICE.
Remarks
If you are writing a KMDF driver for a single-component device that defines multiple functional power states, you can register an EvtDeviceWdmPostPoFxRegisterDevice callback function to receive notification after the framework registers with the power management framework (PoFx).
To register EvtDeviceWdmPostPoFxRegisterDevice, a driver must call WdfDeviceWdmAssignPowerFrameworkSettings.
The POHANDLE received in EvtDeviceWdmPostPoFxRegisterDevice remains valid until the driver returns from EvtDeviceWdmPrePoFxUnregisterDevice.
Your driver can use the POHANDLE to call PoFxSetComponentLatency, PoFxSetComponentResidency, and PoFxSetComponentWake to specify latency, residency, and wake hints to the power framework.
Your driver can also use the POHANDLE to call PoFxPowerControl to send a power control request to PoFx.
A KMDF driver for a multiple component device does not provide EvtDeviceWdmPostPoFxRegisterDevice. Instead, such a driver receives the POHANDLE when it calls PoFxRegisterDevice. For more information, see Supporting Multiple Functional Power States for Multiple-Component Devices.
Examples
To define an EvtDeviceWdmPostPoFxRegisterDevice 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 EvtDeviceWdmPostPoFxRegisterDevice callback function that is named MyDeviceWdmPostPoFxRegisterDevice, use the EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE type as shown in this code example:
EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE MyDeviceWdmPostPoFxRegisterDevice;
Then, implement your callback function as follows.
_Use_decl_annotations_ VOID MyDeviceWdmPostPoFxRegisterDevice ( WDFDEVICE Device, POHANDLE PoHandle ); {...}
The EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE 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_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE 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.11 |
---|---|
Header |
|
IRQL | PASSIVE_LEVEL |
See also