EVT_UCX_CONTROLLER_USBDEVICE_ADD fungsi panggilan balik (ucxcontroller.h)

Implementasi driver klien yang dipanggil UCX saat perangkat USB baru terdeteksi.

Sintaks

EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;

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

Parameter

[in] UcxController

Handel ke pengontrol UCX yang diterima driver klien dalam panggilan sebelumnya ke metode UcxControllerCreate .

[in] UcxUsbDeviceInfo

Arahkan ke struktur UCXUSBDEVICE_INFO .

[in] UsbDeviceInit

Penunjuk ke struktur buram yang berisi informasi inisialisasi. Panggilan balik untuk objek perangkat dikaitkan dengan struktur ini. Struktur ini dikelola oleh UCX.

Nilai kembali

Jika operasi berhasil, fungsi panggilan balik harus mengembalikan STATUS_SUCCESS, atau nilai status lain yang NT_SUCCESS(status) sama dengan TRUE. Jika tidak, nilai status harus dikembalikan yang NT_SUCCESS(statusnya) sama dengan FALSE.

Keterangan

Driver klien UCX mendaftarkan implementasi EVT_UCX_CONTROLLER_USBDEVICE_ADD dengan ekstensi pengontrol host USB (UCX) dengan memanggil metode UcxControllerCreate .

Fungsi panggilan balik ini membuat objek perangkat USB baru dan mendaftarkan fungsi panggilan balik objek perangkat USB dengan memanggil UcxUsbDeviceCreate. Fungsi ini mungkin perlu mengalokasikan buffer umum yang akan digunakan sebagai konteks perangkat.

Contoh

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

Persyaratan

Persyaratan Nilai
Target Platform Windows
Versi KMDF minimum 1,0
Versi UMDF minimum 2.0
Header ucxcontroller.h (termasuk Ucxclass.h)
IRQL PASSIVE_LEVEL

Lihat juga

UcxControllerBuat