EVT_UCX_CONTROLLER_USBDEVICE_ADD Rückruffunktion (ucxcontroller.h)

Die Implementierung des Clienttreibers, die UCX aufruft, wenn ein neues USB-Gerät erkannt wird.

Syntax

EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;

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

Parameter

[in] UcxController

Ein Handle für den UCX-Controller, den der Clienttreiber bei einem vorherigen Aufruf der UcxControllerCreate-Methode empfangen hat.

[in] UcxUsbDeviceInfo

Zeiger auf eine UCXUSBDEVICE_INFO-Struktur .

[in] UsbDeviceInit

Zeiger auf eine undurchsichtige Struktur, die Initialisierungsinformationen enthält. Rückrufe für das Geräteobjekt sind dieser Struktur zugeordnet. Diese Struktur wird von UCX verwaltet.

Rückgabewert

Wenn der Vorgang erfolgreich ist, muss die Rückruffunktion STATUS_SUCCESS oder einen anderen status Wert zurückgeben, für den NT_SUCCESS(status) true entspricht. Andernfalls muss ein status Wert zurückgegeben werden, für den NT_SUCCESS(status) false entspricht.

Hinweise

Der UCX-Clienttreiber registriert seine EVT_UCX_CONTROLLER_USBDEVICE_ADD Implementierung bei der USB-Hostcontrollererweiterung (UCX), indem er die UcxControllerCreate-Methode aufruft .

Diese Rückruffunktion erstellt ein neues USB-Geräteobjekt und registriert die Rückruffunktionen des USB-Geräteobjekts durch Aufrufen von UcxUsbDeviceCreate. Die Funktion muss möglicherweise den allgemeinen Puffer zuordnen, der als Gerätekontext verwendet wird.

Beispiele

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

Anforderungen

Anforderung Wert
Zielplattform Windows
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile ucxcontroller.h (include Ucxclass.h)
IRQL PASSIVE_LEVEL

Weitere Informationen

UcxControllerCreate