UFX_PROPRIETARY_CHARGER_DETECT 콜백 함수(ufxproprietarycharger.h)

충전기가 연결되어 있는지 감지하고 충전기에 대한 세부 정보를 가져오는 필터 드라이버의 구현입니다.

구문

UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;

NTSTATUS UfxProprietaryChargerDetect(
  [in]  PVOID Context,
  [out] PUFX_PROPRIETARY_CHARGER DetectedCharger
)
{...}

매개 변수

[in] Context

드라이버 정의 컨텍스트에 대한 포인터입니다.

[out] DetectedCharger

드라이버가 충전기 정보로 채우는 UFX_PROPRIETARY_CHARGER 구조체에 대한 포인터입니다.

반환 값

작업이 성공하면 콜백 함수는 STATUS_SUCCESS 반환하거나 NT_SUCCESS(상태)이 TRUE인 다른 상태 값을 반환해야 합니다. 그렇지 않으면 NT_SUCCESS(상태)가 FALSE와 같은 상태 값을 반환해야 합니다.

설명

독점 충전기 처리를 지원하려면 USB 하위 필터 드라이버가 지원을 게시해야 합니다. 게시 프로세스 중에 드라이버는 이 콜백 함수의 구현도 등록합니다. 자세한 내용은 독점 충전기를 지원하기 위한 USB 필터 드라이버를 참조하세요.

이 콜백 함수에서 드라이버는 충전기에 GUID를 할당하고 디바이스가 충전을 위해 연결되면 필요한 최소 Dx 상태를 설정합니다.

예제

NTSTATUS
UsbLowerFilter_ProprietaryChargerDetect(
    __in PVOID Context,
    __out PUFX_PROPRIETARY_CHARGER DetectedCharger
    )
{
    NTSTATUS Status = STATUS_SUCCESS;

    PPDCP_CONTEXT PdcpContext = NULL;


    PAGED_CODE();

    PdcpContext = DeviceGetUsbLowerFilterContext((WDFDEVICE)Context);


    // Clear our event
     KeClearEvent(&PdcpContext>AbortOperation);


    // Wait for a while
     Timeout.QuadPart = WDF_REL_TIMEOUT_IN_MS(PdcpContext>DetectionDelayInms);

    Status = KeWaitForSingleObject(
        &PdcpContext>AbortOperation,
        Executive,
        KernelMode,
        FALSE,
        &Timeout);

    switch (Status)
    {
    case STATUS_SUCCESS:

        // The abort event was set. Abort.

        Status = STATUS_REQUEST_ABORTED;
        break;

    case STATUS_TIMEOUT:

        // Timed out, detection has completed successfully.
        // Check if we want to fail this.

        if (PdcpContext>RejectNextRequest)
        {
            PdcpContext->RejectNextRequest = FALSE;
            Status = STATUS_UNSUCCESSFUL;
        }
        else if (!PdcpContext->PdcpChargerAttached)
        {
            Status = STATUS_NOT_FOUND;
        }
        else
        {
            Status = STATUS_SUCCESS;
        }
        break;

    default:
        break;
    }

    if (NT_SUCCESS(Status))
    {
        PdcpContext->PdcpChargerDetected = TRUE;
        DetectedCharger->ChargerId = GUID_USBFN_PROPRIETARY_CHARGER;
        DetectedCharger->DxState = PowerDeviceD2;
    }

    return Status;
}

요구 사항

요구 사항
대상 플랫폼 Windows
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

추가 정보

독점 충전기를 지원하기 위한 USB 필터 드라이버