Функция 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 |