UrsSetPoHandle-Funktion (ursdevice.h)
Registriert und löscht die Registrierung des Clienttreibers mit dem 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 WdfDeviceCreateabgerufen hat.
[in] PoHandle
Ein Handle, das die Registrierung des Geräts bei PoFx darstellt. Der Clienttreiber empfängt dieses Handle von WDF in EvtDeviceWdmPostPoFxRegisterDevice und EvtDeviceWdmPrePoFxUnregisterDevice Rückruffunktionen.
Rückgabewert
Nichts
Bemerkungen
Der Clienttreiber für den Dual-Role-Controller muss der Besitzer der Energierichtlinie sein. Der Treiber kann Benachrichtigungen vom Power Management Framework (PoFx) empfangen. Dazu muss der Treiber nach dem Aufrufen UrsDeviceInitializePoFx-Rückruffunktionen registrieren. Der Clienttreiber registriert das Gerät direkt mit dem Power Framework oder ruft einen POHANDLE aus WDF in EvtDeviceWdmPostPoFxRegisterDevice. Nachdem die Registrierung erfolgreich war, stellt der Treiber dieses Handle für die USB-Erweiterung der Dual-Role-Klasse bereit.
In der Clienttreiberimplementierung der EvtDeviceWdmPostPoFxRegisterDevice Rückruffunktion wird erwartet, dass der Treiber UrsSetPoHandle- aufrufen wird, indem das empfangene Handle übergeben wird. Auf einigen Plattformen kann die Klassenerweiterung den POHANDLE verwenden, um den Controller zu verwalten. Umgekehrt ruft sie vor dem Löschen der Registrierung mit dem Power Framework die EvtDeviceWdmPrePoFxUnregisterDevice Implementierung des Clienttreibers auf. Der Treiber wird erwartet, dass UrsSetPoHandle- aufgerufen wird, indem NULL als PoHandle-Wert übergeben wird.
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 |
---|---|
mindestens unterstützte Client- | Windows 10 |
mindestens unterstützte Server- | Windows Server 2016 |
Zielplattform- | Fenster |
Minimale KMDF-Version | 1.15 |
Header- | ursdevice.h (include Urscx.h) |
Library | Urscxstub.lib |
IRQL- | PASSIVE_LEVEL |
Siehe auch
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice