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 筛选器驱动程序