Funzione UrsSetPoHandle (ursdevice.h)
Registra ed elimina la registrazione del driver client con il framework di risparmio energia (PoFx).
Sintassi
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
Parametri
[in] Device
Handle per l'oggetto dispositivo framework recuperato dal driver client nella chiamata precedente a WdfDeviceCreate.
[in] PoHandle
Handle che rappresenta la registrazione del dispositivo con PoFx. Il driver client riceve questo handle da WDF in EvtDeviceWdmPostPoFxRegisterDevice e EvtDeviceWdmPrePoFxUnregisterDevice callback.
Valore restituito
nessuno
Osservazioni
Il driver client per il controller a doppio ruolo deve essere il proprietario dei criteri di alimentazione. Il driver può ricevere notifiche dal framework di gestione energia (PoFx). A tale scopo, dopo aver chiamato UrsDeviceInitialize, il driver deve registrare le funzioni di callback di PoFx. Il driver client registra il dispositivo con il framework di alimentazione direttamente o ottiene un POHANDLE da WDF in EvtDeviceWdmPostPoFxRegisterDevice. Al termine della registrazione, il driver fornisce tale handle all'estensione della classe dual-role USB.
Nell'implementazione del driver client della funzione di callback evtDeviceWdmPostPoFxRegisterDevice , il driver deve chiamare UrsSetPoHandle passando l'handle ricevuto. In alcune piattaforme, l'estensione della classe potrebbe usare POHANDLE per gestire il controller. Al contrario, prima dell'estensione della classe elimina la registrazione con il framework di alimentazione, richiama l'implementazione evtDeviceWdmPrePoFxUnregisterDevice del driver client. Il driver dovrebbe chiamare UrsSetPoHandle passando NULL come valore PoHandle.
Esempio
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);
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 10 |
Server minimo supportato | Windows Server 2016 |
Piattaforma di destinazione | Windows |
Versione KMDF minima | 1.15 |
Intestazione | ursdevice.h (includere Urscx.h) |
Libreria | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
Vedi anche
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice