Partager via


EVT_UCX_CONTROLLER_USBDEVICE_ADD fonction de rappel (ucxcontroller.h)

Implémentation du pilote client qui appelle UCX lorsqu’un nouvel appareil USB est détecté.

Syntaxe

EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;

NTSTATUS EvtUcxControllerUsbdeviceAdd(
  [in] UCXCONTROLLER UcxController,
  [in] PUCXUSBDEVICE_INFO UcxUsbDeviceInfo,
  [in] PUCXUSBDEVICE_INIT UsbDeviceInit
)
{...}

Paramètres

[in] UcxController

Handle du contrôleur UCX reçu par le pilote client lors d’un appel précédent à la méthode UcxControllerCreate.

[in] UcxUsbDeviceInfo

Pointeur vers une structure UCXUSBDEVICE_INFO.

[in] UsbDeviceInit

Pointeur vers une structure opaque contenant des informations d’initialisation. Les rappels pour l’objet d’appareil sont associés à cette structure. Cette structure est gérée par UCX.

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

Le pilote client UCX inscrit son implémentation EVT_UCX_CONTROLLER_USBDEVICE_ADD auprès de l’extension UCX (Host Controller Extension) USB en appelant la méthode UcxControllerCreate.

Cette fonction de rappel crée un objet d’appareil USB et inscrit les fonctions de rappel d’objet périphérique USB en appelant UcxUsbDeviceCreate. La fonction peut avoir besoin d’allouer la mémoire tampon commune qui sera utilisée comme contexte d’appareil.

Exemples

NTSTATUS
UsbDevice_EvtControllerUsbDeviceAdd(
    UCXCONTROLLER       UcxController,
    PUCXUSBDEVICE_INFO  UsbDeviceInfo,
    PUCXUSBDEVICE_INIT  UsbDeviceInit
)

{
    NTSTATUS                        status = STATUS_SUCCESS;

    WDF_OBJECT_ATTRIBUTES           objectAttributes;
    UCX_USBDEVICE_EVENT_CALLBACKS   callbacks;

    UCXUSBDEVICE                    ucxUsbDevice;
    PUCX_USB_DEVICE_CONTEXT         ucxUsbDeviceContext;

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_USB_DEVICE_CONTEXT);

    //
    // Set the event callbacks for the USB device.
    //
    UCX_USBDEVICE_EVENT_CALLBACKS_INIT(&callbacks,
                                       UsbDevice_EvtUcxUsbDeviceEndpointsConfigure,
                                       UsbDevice_EvtUcxUsbDeviceEnable,
                                       UsbDevice_EvtUcxUsbDeviceDisable,
                                       UsbDevice_EvtUcxUsbDeviceReset,
                                       UsbDevice_EvtUcxUsbDeviceAddress,
                                       UsbDevice_EvtUcxUsbDeviceUpdate,
                                       UsbDevice_EvtUcxUsbDeviceHubInfo,
                                       Endpoint_EvtUcxUsbDeviceDefaultEndpointAdd,
                                       Endpoint_EvtUcxUsbDeviceEndpointAdd);

    UcxUsbDeviceInitSetEventCallbacks(UsbDeviceInit, &callbacks);

    //
    // Create the device
    //
    status = UcxUsbDeviceCreate(UcxController,
                                &UsbDeviceInit,
                                &objectAttributes,
                                &ucxUsbDevice);

    if (!NT_SUCCESS(status)) {
        DbgTrace(TL_ERROR, UsbDevice, "UcxUsbDeviceCreate Failed %!STATUS!", status);
        goto EvtControllerUsbDeviceAddEnd;
    }

    ucxUsbDeviceContext = GetUcxUsbDeviceContext(ucxUsbDevice);
    ucxUsbDeviceContext->DeviceSpeed = UsbDeviceInfo->DeviceSpeed;
    ucxUsbDeviceContext->TtHub = UsbDeviceInfo->TtHub;
    RtlCopyMemory(&ucxUsbDeviceContext->PortPath,
                  &UsbDeviceInfo->PortPath,
                  sizeof(USB_DEVICE_PORT_PATH));

    DbgTrace(TL_INFO, UsbDevice, "UsbDevice_EvtControllerUsbDeviceAdd");

EvtControllerUsbDeviceAddEnd:

    return status;
}

Exigences

Exigence Valeur
plateforme cible Windows
version minimale de KMDF 1.0
version minimale de UMDF 2.0
d’en-tête ucxcontroller.h (include Ucxclass.h)
IRQL PASSIVE_LEVEL

Voir aussi

ucxControllerCreate