Fonction UrsSetPoHandle (ursdevice.h)
Inscrit et supprime l’inscription du pilote client avec 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 d’appareil framework 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 avec PoFx. Le pilote client reçoit ce handle de WDF dans EvtDeviceWdmPostPoFxRegisterDevice et EvtDeviceWdmPrePoFxUnregisterDevice fonctions de rappel.
Valeur de retour
Aucun
Remarques
Le pilote client pour le 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 les fonctions de rappel PoFx. Le pilote client inscrit l’appareil auprès de l’infrastructure d’alimentation directement ou obtient un POHANDLE auprès de WDF dans EvtDeviceWdmPostPoFxRegisterDevice. Une fois l’inscription réussie, le pilote fournit cette poignée à 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. À l’inverse, avant que l’extension de classe supprime l’inscription avec l’infrastructure d’alimentation, 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);
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows 10 |
serveur minimum pris en charge | Windows Server 2016 |
plateforme cible | Windows |
version minimale de KMDF | 1.15 |
d’en-tête | ursdevice.h (include Urscx.h) |
bibliothèque | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
Voir aussi
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice