Fonction UrsSetPoHandle (ursdevice.h)
Inscrit et supprime l’inscription du pilote client auprès de l’infrastructure de gestion de l’alimentation (PoFx).
Syntaxe
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
Paramètres
[in] Device
Handle de l’objet de périphérique d’infrastructure que le pilote client a récupéré lors de l’appel précédent à WdfDeviceCreate.
[in] PoHandle
Handle qui représente l’inscription de l’appareil auprès de PoFx. Le pilote client reçoit ce handle de WDF dans les fonctions de rappel EvtDeviceWdmPostPoFxRegisterDevice et EvtDeviceWdmPrePoFxUnregisterDevice .
Valeur de retour
None
Remarques
Le pilote client du contrôleur à double rôle doit être le propriétaire de la stratégie d’alimentation. Le pilote peut recevoir des notifications de l’infrastructure de gestion de l’alimentation (PoFx). Pour ce faire, après avoir appelé UrsDeviceInitialize, le pilote doit inscrire des fonctions de rappel PoFx. Le pilote client inscrit directement l’appareil auprès de l’infrastructure d’alimentation ou obtient un POHANDLE auprès de WDF dans EvtDeviceWdmPostPoFxRegisterDevice. Une fois l’inscription réussie, le pilote fournit ce handle à l’extension de classe à double rôle USB.
Dans l’implémentation du pilote client de la fonction de rappel EvtDeviceWdmPostPoFxRegisterDevice , le pilote est censé appeler UrsSetPoHandle en passant le handle reçu. Sur certaines plateformes, l’extension de classe peut utiliser POHANDLE pour gérer le contrôleur sous tension. À l’inverse, avant que l’extension de classe supprime l’inscription auprès de Power Framework, elle appelle l’implémentation EvtDeviceWdmPrePoFxUnregisterDevice du pilote client. Le pilote est censé appeler UrsSetPoHandle en passant NULL comme valeur PoHandle.
Exemples
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);
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 |
Serveur minimal pris en charge | Windows Server 2016 |
Plateforme cible | Windows |
Version KMDF minimale | 1.15 |
En-tête | ursdevice.h (include Urscx.h) |
Bibliothèque | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
Voir aussi
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice