다음을 통해 공유


EVT_UCX_CONTROLLER_USBDEVICE_ADD 콜백 함수(ucxcontroller.h)

새 USB 디바이스가 검색될 때 UCX가 호출하는 클라이언트 드라이버의 구현입니다.

구문

EVT_UCX_CONTROLLER_USBDEVICE_ADD EvtUcxControllerUsbdeviceAdd;

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

매개 변수

[in] UcxController

UcxControllerCreate 메서드에 대한 이전 호출에서 클라이언트 드라이버가 받은 UCX 컨트롤러에 대한 핸들입니다.

[in] UcxUsbDeviceInfo

UCXUSBDEVICE_INFO 구조체에 대한 포인터입니다.

[in] UsbDeviceInit

초기화 정보를 포함하는 불투명 구조체에 대한 포인터입니다. 디바이스 개체에 대한 콜백은 이 구조와 연결됩니다. 이 구조체는 UCX에서 관리됩니다.

반환 값

작업이 성공하면 콜백 함수는 STATUS_SUCCESS 반환하거나 NT_SUCCESS(상태)이 TRUE인 다른 상태 값을 반환해야 합니다. 그렇지 않으면 NT_SUCCESS(상태)이 FALSE와 같은 상태 값을 반환해야 합니다.

설명

UCX 클라이언트 드라이버는 UcxControllerCreate 메서드를 호출하여 EVT_UCX_CONTROLLER_USBDEVICE_ADD 구현을 UCX(USB 호스트 컨트롤러 확장)에 등록합니다.

이 콜백 함수는 새 USB 디바이스 개체를 만들고 UcxUsbDeviceCreate를 호출하여 USB 디바이스 개체 콜백 함수를 등록합니다. 함수는 디바이스 컨텍스트로 사용할 공통 버퍼를 할당해야 할 수 있습니다.

예제

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

요구 사항

요구 사항
대상 플랫폼 Windows
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 ucxcontroller.h(Ucxclass.h 포함)
IRQL PASSIVE_LEVEL

추가 정보

UcxControllerCreate