Функция UcxControllerCreate (ucxcontroller.h)

Создает объект контроллера узла.

Синтаксис

NTSTATUS UcxControllerCreate(
  [in]           WDFDEVICE              Device,
  [in]           PUCX_CONTROLLER_CONFIG Config,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [out]          UCXCONTROLLER          *Controller
);

Параметры

[in] Device

Дескриптор объекта устройства платформы, который драйвер клиента извлек в предыдущем вызове WdfDeviceCreate.

[in] Config

Указатель на структуру, выделенную вызывающим объектом UCX_CONTROLLER_CONFIG , инициализированную драйвером клиента путем вызова UCX_CONTROLLER_CONFIG_INIT. Структура содержит сведения о конфигурации, необходимые для создания объекта .

[in, optional] Attributes

Указатель на структуру, выделенную вызывающим объектом WDF_OBJECT_ATTRIBUTES , которая задает атрибуты для объекта контроллера.

[out] Controller

Указатель на переменную, которая получает дескриптор нового объекта контроллера.

Возвращаемое значение

Метод возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть один соответствующий код ошибки NTSTATUS .

Комментарии

Драйвер клиента для хост-контроллера должен вызывать этот метод после вызова WdfDeviceCreate . Родительским объектом нового хост-контроллера является объект устройства платформы.

Во время этого вызова также регистрируются реализации обратного вызова событий, предоставляемые драйвером клиента. Предоставьте указатели функций на эти функции, задав соответствующие члены UCX_CONTROLLER_CONFIG.

Если родительский тип — PCI, инициализируйте UCX_CONTROLLER_CONFIG , вызвав UCX_CONTROLLER_CONFIG_SET_PCI_INFO. Если родительским элементом является ACPI, вместо этого вызовите UCX_CONTROLLER_CONFIG_SET_ACPI_INFO .

Метод создает различные очереди, необходимые для обработки запросов IOCTL, отправляемых на USB-устройство.

Метод регистрирует интерфейс устройства GUID_DEVINTERFACE_USB_HOST_CONTROLLER и символьную ссылку, чтобы компоненты пользовательского режима могли открыть дескриптор для контроллера.

Примеры


    WDF_OBJECT_ATTRIBUTES                   objectAttributes;
    UCX_CONTROLLER_CONFIG                   ucxControllerConfig;
    UCXCONTROLLER                           ucxController;
    PUCX_CONTROLLER_CONTEXT                 ucxControllerContext;

    // Create the controller
    //
    UCX_CONTROLLER_CONFIG_INIT(&ucxControllerConfig, "");
    ucxControllerConfig.EvtControllerUsbDeviceAdd = UsbDevice_EvtControllerUsbDeviceAdd;
    ucxControllerConfig.EvtControllerQueryUsbCapability = Controller_EvtControllerQueryUsbCapability;
    ucxControllerConfig.EvtControllerReset = Controller_EvtControllerReset;
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&objectAttributes, UCX_CONTROLLER_CONTEXT);
    
    status = UcxControllerCreate(wdfDevice,
        &ucxControllerConfig,
        &objectAttributes,
        &ucxController);

    if (!NT_SUCCESS(status)) {
        DbgTrace(TL_ERROR, Controller, "UcxControllerCreate Failed %!STATUS!", status);
        goto Controller_WdfEvtDeviceAddEnd;
    }

    DbgTrace(TL_INFO, Controller, "UCX Controller created.");

    controllerContext->UcxController = ucxController;

    ucxControllerContext = GetUcxControllerContext(ucxController);
    ucxControllerContext->WdfDevice = wdfDevice;

Требования

Требование Значение
Минимальная версия клиента Windows 10
Целевая платформа Windows
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть ucxcontroller.h (включая Ucxclass.h)
IRQL PASSIVE_LEVEL

См. также раздел

WdfDeviceCreate