Función UrsDeviceInitialize (ursdevice.h)
Inicializa un objeto de dispositivo de marco para admitir operaciones relacionadas con un controlador de doble rol USB y registra las funciones de devolución de llamada de eventos pertinentes con la extensión de clase de controlador de doble rol USB.
Sintaxis
NTSTATUS UrsDeviceInitialize(
[in] WDFDEVICE Device,
[in] PURS_CONFIG Config
);
Parámetros
[in] Device
Identificador del objeto de dispositivo de marco que el controlador de cliente recuperó en la llamada anterior a WdfDeviceCreate.
[in] Config
Puntero a una estructura de URS_CONFIG que inicializó el controlador de cliente mediante una llamada a URS_CONFIG_INIT.
Valor devuelto
El método devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver un código de error NTSTATUS adecuado.
Comentarios
El controlador de cliente para el controlador de doble rol USB debe llamar a este método después de la llamada WdfDeviceCreate .
El controlador cliente llama a este método en su implementación EvtDriverDeviceAdd .
Durante esta llamada, las implementaciones de devolución de llamada de eventos proporcionadas por el controlador cliente también se registran estableciendo los miembros adecuados de URS_CONFIG.
El método crea listas de recursos para los roles de host y función y las colas necesarias para controlar las solicitudes IOCTL que se envían al controlador. Con cada operación de cambio de rol, la pila de dispositivos secundarios del rol actual se desmonta y se carga la pila de dispositivos para el nuevo rol. El método UrsDeviceInitialize recupera la información de identificación que se usa para compilar esas pilas de dispositivos. El método también recupera información sobre el dispositivo desde el bus subyacente, como ACPI.
Ejemplos
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;
}
...
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10 |
Servidor mínimo compatible | Windows Server 2016 |
Plataforma de destino | Windows |
Versión mínima de KMDF | 1.15 |
Encabezado | ursdevice.h (incluya Urscx.h) |
Library | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |