UrsSetPoHandle 함수(ursdevice.h)

PoFx(전원 관리 프레임워크)를 사용하여 클라이언트 드라이버의 등록을 등록하고 삭제합니다.

구문

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

매개 변수

[in] Device

WdfDeviceCreate에 대한 이전 호출에서 클라이언트 드라이버가 검색한 프레임워크 디바이스 개체에 대한 핸들입니다.

[in] PoHandle

PoFx를 사용하여 디바이스 등록을 나타내는 핸들입니다. 클라이언트 드라이버는 EvtDeviceWdmPostPoFxRegisterDeviceEvtDeviceWdmPrePoFxUnregisterDevice 콜백 함수의 WDF에서 이 핸들을 받습니다.

반환 값

없음

설명

이중 역할 컨트롤러의 클라이언트 드라이버는 전원 정책 소유자여야 합니다. 드라이버는 PoFx(전원 관리 프레임워크)에서 알림을 받을 수 있습니다. 이렇게 하려면 UrsDeviceInitialize를 호출한 후 드라이버가 PoFx 콜백 함수를 등록해야 합니다. 클라이언트 드라이버는 디바이스를 전원 프레임워크에 직접 등록하거나 EvtDeviceWdmPostPoFxRegisterDevice의 WDF에서 POHANDLE을 가져옵니다. 등록에 성공하면 드라이버는 USB 이중 역할 클래스 확장에 대한 핸들을 제공합니다.

클라이언트 드라이버의 EvtDeviceWdmPostPoFxRegisterDevice 콜백 함수 구현에서 드라이버는 수신된 핸들을 전달하여 UrsSetPoHandle 을 호출해야 합니다. 일부 플랫폼에서 클래스 확장은 POHANDLE을 사용하여 컨트롤러의 전원을 관리할 수 있습니다. 반대로 클래스 확장이 전원 프레임워크를 사용하여 등록을 삭제하기 전에 클라이언트 드라이버의 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