Функция UrsSetPoHandle (ursdevice.h)
Регистрирует и удаляет регистрацию драйвера клиента с помощью платформы управления питанием (PoFx).
Синтаксис
void UrsSetPoHandle(
[in] WDFDEVICE Device,
[in] POHANDLE PoHandle
);
Параметры
[in] Device
Дескриптор объекта устройства платформы, полученный драйвером клиента при предыдущем вызове WdfDeviceCreate.
[in] PoHandle
Дескриптор, представляющий регистрацию устройства с помощью PoFx. Драйвер клиента получает этот дескриптор из WDF в функциях обратного вызова EvtDeviceWdmPostPoFxRegisterDevice и EvtDeviceWdmPrePoFxUnregisterDevice .
Возвращаемое значение
None
Remarks
Драйвер клиента для контроллера с двойной ролью должен быть владельцем политики питания. Драйвер может получать уведомления от платформы управления питанием (PoFx). Для этого после вызова UrsDeviceInitialize драйвер должен зарегистрировать функции обратного вызова PoFx. Драйвер клиента регистрирует устройство непосредственно в power framework или получает POHANDLE из WDF в EvtDeviceWdmPostPoFxRegisterDevice. После успешной регистрации драйвер предоставляет такую дескрипторную обработку для расширения класса с двумя ролами USB.
В реализации драйвером клиента функции обратного вызова EvtDeviceWdmPostPoFxRegisterDevice драйвер должен вызвать UrsSetPoHandle , передав полученный дескриптор. На некоторых платформах расширение класса может использовать POHANDLE для управления питанием контроллера. И наоборот, прежде чем расширение класса удаляет регистрацию в power framework, оно вызывает реализацию EvtDeviceWdmPrePoFxUnregisterDevice драйвера клиента. Ожидается, что драйвер вызовет UrsSetPoHandle , передав значение NULL в качестве значения PoHandle.
Примеры
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);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 |
Минимальная версия сервера | Windows Server 2016 |
Целевая платформа | Windows |
Минимальная версия KMDF | 1.15 |
Верхняя часть | ursdevice.h (включая Urscx.h) |
Библиотека | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |
См. также раздел
EvtDeviceWdmPostPoFxRegisterDevice
EvtDeviceWdmPrePoFxUnregisterDevice