Функция UrsDeviceInitialize (ursdevice.h)

Инициализирует объект устройства платформы для поддержки операций, связанных с контроллером двойной роли USB, и регистрирует соответствующие функции обратного вызова событий с расширением класса контроллера двойной роли USB.

Синтаксис

NTSTATUS UrsDeviceInitialize(
  [in] WDFDEVICE   Device,
  [in] PURS_CONFIG Config
);

Параметры

[in] Device

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

[in] Config

Указатель на структуру URS_CONFIG, которая инициализирована драйвером клиента путем вызова URS_CONFIG_INIT.

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

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

Замечания

Драйвер клиента для контроллера двойной роли USB должен вызывать этот метод после вызова WdfDeviceCreate.

Драйвер клиента вызывает этот метод в реализации EvtDriverDeviceAdd.

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

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

Примеры



EVT_URS_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtUrsFilterResourceRequirements;
EVT_URS_SET_ROLE EvtUrsSetRole;

EvtDriverDeviceAdd (
    _In_ WDFDRIVER Driver,
    _Inout_ PWDFDEVICE_INIT DeviceInit
    )
{
...

    WDFDEVICE device;
    NTSTATUS status;
    WDF_OBJECT_ATTRIBUTES attributes;
    URS_CONFIG ursConfig;
...
 
    status = UrsDeviceInitInitialize(DeviceInit);
    if (!NT_SUCCESS(status)) {
        //UrsDeviceInitInitialize failed.
        return status;
    }
   
    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DRIVER_CONTEXT);
    status = WdfDeviceCreate(&DeviceInit, &attributes, &device);
    if (!NT_SUCCESS(status)) {
        // WdfDeviceCreate failed.
        return status;
    }
    URS_CONFIG_INIT(&ursConfig, UrsHostInterfaceTypeXhci, EvtUrsFilterResourceRequirements);
    
    ursConfig.EvtUrsSetRole = EvtUrsSetRole;
    status = UrsDeviceInitialize(device, &ursConfig);

    if (!NT_SUCCESS(status)) {
        // UrsDeviceInitialize failed.
        return status;

    }

...

}

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10
минимальный поддерживаемый сервер Windows Server 2016
целевая платформа Виндоус
минимальная версия KMDF 1.15
заголовка ursdevice.h (include Urscx.h)
библиотеки Urscxstub.lib
IRQL PASSIVE_LEVEL

См. также

URS_CONFIG

URS_CONFIG_INIT