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(status) が TRUE に等しい別の状態値を返す必要があります。 それ以外の場合は、NT_SUCCESS(status) が 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
Header ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

専用充電器をサポートするためのUSBフィルタドライバ