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 funzioni di 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 risparmio energia (PoFx). A tale scopo, dopo aver chiamato UrsDeviceInitialize, il driver deve registrare le funzioni di callback 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 a doppio ruolo USB.
Nell'implementazione del driver client della EvtDeviceWdmPostPoFxRegisterDevice funzione di callback, il driver dovrebbe chiamare UrsSetPoHandle passando l'handle ricevuto. In alcune piattaforme, l'estensione della classe potrebbe usare POHANDLE per gestire il controller. Al contrario, prima che l'estensione della classe elimini la registrazione con il framework di alimentazione, richiama l'implementazione del driver client EvtDeviceWdmPrePoFxUnregisterDevice. È previsto che il driver chiami UrsSetPoHandle passando NULL come valore PoHandle.
Esempi
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);
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 10 |
server minimo supportato | Windows Server 2016 |
piattaforma di destinazione | Finestre |
versione minima di KMDF | 1.15 |
intestazione | ursdevice.h (include Urscx.h) |
libreria | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
Vedere anche
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice