Fungsi UrsSetPoHandle (ursdevice.h)

Mendaftarkan dan menghapus pendaftaran driver klien dengan kerangka kerja manajemen daya (PoFx).

Sintaks

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

Parameter

[in] Device

Handel ke objek perangkat kerangka kerja yang diambil driver klien dalam panggilan sebelumnya ke WdfDeviceCreate.

[in] PoHandle

Handel yang mewakili pendaftaran perangkat dengan PoFx. Driver klien menerima handel ini dari WDF dalam fungsi panggilan balik EvtDeviceWdmPostPoFxRegisterDevice dan EvtDeviceWdmPrePoFxUnregisterDevice .

Nilai kembali

Tidak ada

Keterangan

Driver klien untuk pengontrol peran ganda harus menjadi pemilik kebijakan daya. Driver dapat menerima pemberitahuan dari kerangka kerja manajemen daya (PoFx). Untuk melakukannya, setelah memanggil UrsDeviceInitialize, driver harus mendaftarkan fungsi panggilan balik PoFx. Driver klien mendaftarkan perangkat dengan kerangka kerja daya secara langsung atau mendapatkan POHANDLE dari WDF di EvtDeviceWdmPostPoFxRegisterDevice. Setelah pendaftaran berhasil, driver menyediakan handel tersebut ke ekstensi kelas peran ganda USB.

Dalam implementasi driver klien dari fungsi panggilan balik EvtDeviceWdmPostPoFxRegisterDevice , driver diharapkan untuk memanggil UrsSetPoHandle dengan melewati handel yang diterima. Pada beberapa platform, ekstensi kelas mungkin menggunakan POHANDLE untuk mengelola pengontrol secara daya. Sebaliknya, sebelum ekstensi kelas menghapus pendaftaran dengan kerangka kerja daya, ekstensi ini memanggil implementasi EvtDeviceWdmPrePoFxUnregisterDevice driver klien. Driver diharapkan memanggil UrsSetPoHandle dengan melewati NULL sebagai nilai PoHandle.

Contoh



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);
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10
Server minimum yang didukung Server Windows 2016
Target Platform Windows
Versi KMDF minimum 1.15
Header ursdevice.h (termasuk Urscx.h)
Pustaka Urscxstub.lib
IRQL PASSIVE_LEVEL

Lihat juga

EvtDeviceWdmPostPoFxRegisterDevice

EvtDeviceWdmPrePoFxUnregisterDevice