Funzione UrsDeviceInitialize (ursdevice.h)

Inizializza un oggetto dispositivo framework per supportare le operazioni correlate a un controller a doppio ruolo USB e registra le funzioni di callback degli eventi pertinenti con l'estensione della classe controller a doppio ruolo USB.

Sintassi

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

Parametri

[in] Device

Handle per l'oggetto dispositivo framework recuperato dal driver client nella chiamata precedente a WdfDeviceCreate.

[in] Config

Puntatore a una struttura URS_CONFIG inizializzata dal driver client chiamando URS_CONFIG_INIT.

Valore restituito

Il metodo restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire un codice di errore NTSTATUS appropriato.

Commenti

Il driver client per il controller a doppio ruolo USB deve chiamare questo metodo dopo la chiamata WdfDeviceCreate .

Il driver client chiama questo metodo nell'implementazione EvtDriverDeviceAdd .

Durante questa chiamata, le implementazioni di callback degli eventi fornite dal driver client vengono registrate anche impostando i membri appropriati di URS_CONFIG.

Il metodo crea elenchi di risorse per i ruoli host e di funzione e le code necessarie per gestire le richieste IOCTL inviate al controller. Con ogni operazione di cambio di ruolo, lo stack di dispositivi figlio del ruolo corrente viene eliminato e lo stack di dispositivi per il nuovo ruolo viene caricato. Il metodo UrsDeviceInitialize recupera le informazioni di identificazione usate per compilare tali stack di dispositivi. Il metodo recupera anche informazioni sul dispositivo dal bus sottostante, ad esempio ACPI.

Esempio



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;

    }

...

}

Requisiti

Requisito Valore
Client minimo supportato Windows 10
Server minimo supportato Windows Server 2016
Piattaforma di destinazione Windows
Versione KMDF minima 1.15
Intestazione ursdevice.h (include Urscx.h)
Libreria Urscxstub.lib
IRQL PASSIVE_LEVEL

Vedi anche

URS_CONFIG

URS_CONFIG_INIT