IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

La richiesta di I /O IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE registra il driver di un dispositivo a più funzioni USB (driver composito) con lo stack di driver USB sottostante.

Questa richiesta viene inviata da un driver che sostituisce il driver composito fornito da Microsoft, Usbccgp.sys e implementa la funzionalità di sospensione e riattivazione remota, in base alla specifica USB (Universal Serial Bus) 3.0.

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE è una richiesta di controllo di I/O in modalità kernel. Questa richiesta è destinata all'oggetto dispositivo fisico (PDO) dell'hub USB. Questa richiesta deve essere inviata a livello di richiesta di interrupt (IRQL) di PASSIVE_LEVEL.

Codice principale

IRP_MJ_INTERNAL_DEVICE_CONTROL

Buffer di input

Parameters.Others.Argument1 è un puntatore a una struttura allocata e inizializzata del chiamante REGISTER_COMPOSITE_DEVICE< contenente informazioni sul driver padre. Per inizializzare la struttura, chiamare la routine USBD_BuildRegisterCompositeDevice .

Il membro AssociatedIrp.SystemBuffer punta a un buffer allocato dal chiamante sufficientemente grande da contenere una matrice di handle di funzione (tipizzata USBD_FUNCTION_HANDLE) per le funzioni nel dispositivo composito USB. Il numero di elementi nella matrice è indicato dal membro FunctionCount di REGISTER_COMPOSITE_DEVICE. Per ottenere il numero di funzioni, esaminare i descrittori restituiti da una richiesta di configurazione get.

Lunghezza del buffer di input

Dimensione di una struttura REGISTER_COMPOSITE_DEVICE .

Buffer di output

Nell'output il buffer a cui punta il membro AssociatedIrp.SystemBuffer viene riempito con handle di funzione per le funzioni nel dispositivo a più funzioni.

Lunghezza del buffer di output

Dimensioni degli handle di funzione per le funzioni nel dispositivo.

Blocco dello stato

Lo stack di driver USB imposta Irp-IoStatus.Status> su STATUS_SUCCESS se la richiesta viene completata correttamente. STATUS_SUCCESS indica che gli handle di funzione sono validi.

In caso di errore, Irp-IoStatus.Status> contiene uno stato di errore appropriato. Ad esempio, se il driver composito invia la richiesta più volte, lo stato è impostato su STATUS_INVALID_DEVICE_REQUEST.

Commenti

Lo scopo di IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE è che il driver composito invii una richiesta di registrazione allo stack di driver USB. Nella richiesta di registrazione il driver composito specifica il numero di funzioni supportate dal dispositivo. Pertanto, è necessario inviare la richiesta di IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE dopo aver determinato il numero di funzioni. In genere, tali informazioni vengono recuperate nella routine del dispositivo di avvio del driver composito IRP_MN_START_DEVICE. Si noti che il numero di interfacce in una configurazione può indicare il numero di funzioni, ma non sempre. Alcuni dispositivi a più funzioni espongono più interfacce correlate a una sola funzione. Per ottenere il numero di funzioni, è necessario esaminare vari descrittori correlati a una configurazione specifica. Questi descrittori possono essere ottenuti tramite una richiesta get-descriptor.

In risposta alla richiesta di registrazione, lo stack di driver USB fornisce un elenco di handle per le funzioni nel dispositivo. Per un esempio di codice, vedere Come registrare un dispositivo composito.

Dopo la registrazione del driver composito, il driver può configurare la funzionalità di riattivazione remota. Usando l'handle di funzione, il driver composito può inviare una richiesta IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION per ricevere notifiche di riattivazione remota dallo stack di driver USB, quando la funzione associata invia un segnale di ripresa.

Per rimuovere l'associazione del driver composito allo stack di driver USB e rilasciare tutte le risorse allocate per la registrazione, il driver deve inviare la richiesta di IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE .

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Intestazione usbioctl.h (include Usbioctl.h)
IRQL PASSIVE_LEVEL

Vedi anche

Come registrare un dispositivo composito

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE