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 de UFX_PROPRIETARY_CHARGER que le pilote remplit avec les informations du chargeur.

Valeur retournée

Si l’opération réussit, la fonction de rappel doit retourner STATUS_SUCCESS ou une autre valeur status pour laquelle NT_SUCCESS(status) est égal à TRUE. Sinon, il doit retourner une valeur status pour laquelle NT_SUCCESS(status) est 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 enregistre également son implémentation de cette fonction de rappel. Pour plus d’informations, consultez Pilote de filtre USB pour la prise en charge des 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 le chargement.

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

Configuration requise

Condition requise Valeur
Plateforme cible Windows
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête ufxproprietarycharger.h
IRQL PASSIVE_LEVEL

Voir aussi

Pilote de filtre USB pour la prise en charge des chargeurs propriétaires