Share via


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

Consulte también

URS_CONFIG

URS_CONFIG_INIT