UrsSetPoHandle-Funktion (ursdevice.h)
Registriert und löscht die Registrierung des Clienttreibers beim Power Management Framework (PoFx).
Syntax
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
Parameter
[in] Device
Ein Handle für das Framework-Geräteobjekt, das der Clienttreiber im vorherigen Aufruf von WdfDeviceCreate abgerufen hat.
[in] PoHandle
Ein Handle, das die Registrierung des Geräts bei PoFx darstellt. Der Clienttreiber empfängt dieses Handle von WDF in den Rückruffunktionen EvtDeviceWdmPostPoFxRegisterDevice und EvtDeviceWdmPrePoFxUnregisterDevice .
Rückgabewert
Keine
Bemerkungen
Der Clienttreiber für den Controller mit zwei Rollen muss der Besitzer der Energierichtlinie sein. Der Treiber kann Benachrichtigungen vom Power Management Framework (PoFx) empfangen. Dazu muss der Treiber nach dem Aufruf von UrsDeviceInitialize PoFx-Rückruffunktionen registrieren. Der Clienttreiber registriert das Gerät direkt beim Energieframework oder ruft ein POHANDLE von WDF in EvtDeviceWdmPostPoFxRegisterDevice ab. Nach erfolgreicher Registrierung stellt der Treiber dieses Handle für die USB-Doppelrollenklassenerweiterung bereit.
In der Implementierung der Rückruffunktion EvtDeviceWdmPostPoFxRegisterDevice durch den Clienttreiber wird erwartet, dass der Treiber UrsSetPoHandle aufruft, indem er das empfangene Handle übergibt. Auf einigen Plattformen kann die Klassenerweiterung den POHANDLE verwenden, um den Controller mit Energie zu verwalten. Im Gegensatz dazu ruft die Klassenerweiterung vor dem Löschen der Registrierung mit dem Power Framework die EvtDeviceWdmPrePoFxUnregisterDevice-Implementierung des Clienttreibers auf. Es wird erwartet, dass der Treiber UrsSetPoHandle aufruft , indem er NULL als PoHandle-Wert übergibt.
Beispiele
EVT_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDevicePostPoFxRegister;
EVT_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDevicePrePoFxUnregister;
EvtDriverDeviceAdd (
_In_ WDFDRIVER Driver,
_Inout_ PWDFDEVICE_INIT DeviceInit
)
{
...
WDFDEVICE device;
NTSTATUS status;
...
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS idleSettings;
WDF_POWER_FRAMEWORK_SETTINGS poFxSettings;
...
TRY {
WDF_POWER_FRAMEWORK_SETTINGS_INIT(&poFxSettings);
poFxSettings.EvtDeviceWdmPostPoFxRegisterDevice = EvtDevicePostPoFxRegister;
poFxSettings.EvtDeviceWdmPrePoFxUnregisterDevice = EvtDevicePrePoFxUnregister;
status = WdfDeviceWdmAssignPowerFrameworkSettings(device, &poFxSettings);
if (!NT_SUCCESS(status)) {
// WdfDeviceWdmAssignPowerFrameworkSettings failed.
}
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(&idleSettings, IdleCannotWakeFromS0);
idleSettings.IdleTimeoutType = SystemManagedIdleTimeout;
status = WdfDeviceAssignS0IdleSettings(device, &idleSettings);
if (!NT_SUCCESS(status)) {
// WdfDeviceAssignS0IdleSettings failed.
}
} FINALLY {
}
..
}
NTSTATUS
EvtDevicePostPoFxRegister (
_In_ WDFDEVICE Device,
_In_ POHANDLE PoHandle
)
{
UrsSetPoHandle(Device, PoHandle);
return STATUS_SUCCESS;
}
VOID
EvtDevicePrePoFxUnregister (
_In_ WDFDEVICE Device,
_In_ POHANDLE PoHandle
)
{
UNREFERENCED_PARAMETER(PoHandle);
UrsSetPoHandle(Device, NULL);
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10 |
Unterstützte Mindestversion (Server) | Windows Server 2016 |
Zielplattform | Windows |
KMDF-Mindestversion | 1.15 |
Kopfzeile | ursdevice.h (include Urscx.h) |
Bibliothek | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
Weitere Informationen
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice