Partager via


UFX_PROPRIETARY_CHARGER_DETECT fonction de rappel (ufxproprietarycharger.h)

Implémentation du pilote de filtre pour détecter si un chargeur est attaché et obtenir des détails sur le chargeur.

Syntaxe

UFX_PROPRIETARY_CHARGER_DETECT UfxProprietaryChargerDetect;

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

Paramètres

[in] Context

Pointeur vers un contexte défini par le pilote.

[out] DetectedCharger

Pointeur vers une structure UFX_PROPRIETARY_CHARGER que le pilote remplit avec les informations du chargeur.

Valeur de retour

Si l’opération réussit, la fonction de rappel doit retourner STATUS_SUCCESS, ou une autre valeur d’état pour laquelle NT_SUCCESS(status) a la valeur TRUE. Sinon, il doit retourner une valeur d’état pour laquelle NT_SUCCESS(status) a la valeur FALSE.

Remarques

Pour prendre en charge la gestion des chargeurs propriétaires, le pilote de filtre inférieur USB doit publier la prise en charge. Pendant le processus de publication, le pilote inscrit également son implémentation de cette fonction de rappel. Pour plus d’informations, consultez pilote de filtre USB pour prendre en charge les chargeurs propriétaires.

Dans cette fonction de rappel, le pilote affecte au chargeur un GUID et définit l’état Dx minimal requis lorsque l’appareil est connecté pour la charge.

Exemples

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;
}

Exigences

Exigence Valeur
plateforme cible Windows
version minimale de KMDF 1.0
version minimale de UMDF 2.0
d’en-tête ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

Voir aussi

pilote de filtre USB pour prendre en charge les chargeurs propriétaires