Функция 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 |
целевая платформа | Виндоус |
минимальная версия KMDF | 1.0 |
минимальная версия UMDF | 2.0 |
заголовка | ucxcontroller.h (include Ucxclass.h) |
IRQL | PASSIVE_LEVEL |