共用方式為


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資訊的 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 篩選驅動程式,可支援專屬的電源