共用方式為


ursSetPoHandle 函式 (ursdevice.h)

向電源管理架構註冊並刪除用戶端驅動程序的註冊, (PoFx) 。

語法

void UrsSetPoHandle(
  [in] WDFDEVICE Device,
  [in] POHANDLE  PoHandle
);

參數

[in] Device

用戶端驅動程式在先前呼叫 WdfDeviceCreate 中所擷取之架構裝置物件的句柄。

[in] PoHandle

句柄,表示向PoFx註冊裝置。 用戶端驅動程式會從 EvtDeviceWdmPostPoFxRegisterDeviceDeviceEvtDeviceWdmPrePoFxUnregisterDevice 回 呼函式中的 WDF 接收此句柄。

傳回值

備註

雙角色控制器的用戶端驅動程式必須是電源原則擁有者。 驅動程式可以從電源管理架構接收通知, (PoFx) 。 若要這樣做,在呼叫 UrsDeviceInitialize 之後,驅動程式必須註冊 PoFx 回呼函式。 用戶端驅動程式會直接向電源架構註冊裝置,或從 EvtDeviceWdmPostPoFxRegisterDevice 中的 WDF 取得 POHANDLE。 註冊成功之後,驅動程式會提供USB雙角色類別延伸模組的句柄。

在用戶端驅動程序實作 EvtDeviceWdmPostPoFxRegisterDevice 回呼函式中,驅動程式應該藉由傳遞收到的句柄來呼叫 UrsSetPoHandle 。 在某些平臺上,類別延伸模組可能會使用POHANDLE來電源管理控制器。 相反地,在類別延伸模組刪除Power Framework的註冊之前,它會叫用客戶端驅動程式的 EvtDeviceWdmPrePoFxUnregisterDevice 實作。 驅動程式預期會傳遞 NULL 作為 PoHandle 值來呼叫 UrsSetPoHandle

範例



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