Функция 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 |
Целевая платформа | Windows |
Минимальная версия KMDF | 1.15 |
Верхняя часть | ursdevice.h (включая Urscx.h) |
Библиотека | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |