Uso del driver del bus multifunzione System-Supplied
Se il bus sottostante di un dispositivo supporta uno standard del bus multifunzione, ad esempio scheda PC, il fornitore di un dispositivo multifunzione in una piattaforma basata su NT può usare il driver del bus multifunzione fornito dal sistema (mf.sys) per supportare il dispositivo.
Il driver del bus di mf.sys gestisce l'enumerazione PnP delle funzioni del dispositivo e le risorse arbitrate, ad esempio porte di I/O e IRQs, tra le funzioni. Il driver mf.sys gestisce la gestione delle energia per le funzioni figlio gestendo il dispositivo a più funzioni padre.
Per usare mf.sys, un dispositivo multifunzione deve soddisfare i requisiti seguenti:
Il bus sottostante del dispositivo deve avere uno standard multifunzione.
Il DEVICE_CAPABILITIES delle funzioni figlio deve essere identico e deve corrispondere a quelli del dispositivo padre. Quando viene eseguita una query per le funzionalità del dispositivo di una funzione figlio (IRP_MN_QUERY_CAPABILITIES), il driver di mf.sys segnala le funzionalità del dispositivo del dispositivo padre.
Il driver del bus in cui risiede il dispositivo multifunzione, ad esempio pcmcia.sys, deve gestire eventuali richieste di IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG . Il driver mf.sys passa solo questi IRP al driver del bus padre.
Le funzioni devono essere indipendenti: non possono avere dipendenze di avvio; i requisiti di risorsa per una funzione non possono essere espressi in termini di risorse di un'altra funzione (ad esempio, funzione1 usa la porta I/O X e function2 usa la portaX + 200); e ogni funzione deve essere in grado di funzionare come dispositivo separato, anche se viene eseguita dallo stesso driver come un'altra funzione.
Per usare mf.sys, un fornitore fornisce un inF per il dispositivo multifunzione che specifica mf.sys come driver per il dispositivo. Se un dispositivo è completamente conforme allo standard multifunzione per il suo bus sottostante, il fornitore di tale dispositivo può usare il mf.inf fornito dal sistema. Se un dispositivo non è completamente conforme allo standard, il fornitore deve fornire un INF personalizzato.
In entrambi i casi, il fornitore fornisce anche i driver e i file INF per le singole funzioni nel dispositivo.
Lo scheletro seguente di un INF multifunzione personalizzato illustra la sintassi necessaria per specificare mf.sys come driver per un dispositivo multifunzione:
[Version]
; ...
Class = Multifunction ; the system-defined class for MF devices
ClassGUID = {4d36e971-e325-11ce-bfc1-08002be10318} ; GUID for MF
; ...
; ...
[ControlFlags]
ExcludeFromSelect = * ; don't include PnP devices in a displayed list of
; devices available for manual installation
[Manufacturer]
; ...
; ...
[ModelsSection.NTamd64] ; models section
; ...
; ...
[DDInstall.NT] ; install section
Include = mf.inf ; specify that this device requires mf.sys
Needs = MFINSTALL.mf
; ...
[DDinstall.NT.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services
[DDInstall.NT.HW]
AddReg=DDInstall.RegHW
[DDInstall.RegHW]
; put entries with child function hardware IDs here
; ...
; put override sections here...
; ...
[Strings]
; ...
Prendere in considerazione una combinazione di dispositivo SCHEDA PC/LAN/modem. Senza alcun supporto multifunzione speciale, tale dispositivo potrebbe essere segnalato dal driver del bus PCMCIA come singolo dispositivo modem. Con il supporto aggiuntivo di un INF multifunzione e del driver del bus di mf.sys, entrambe le funzioni del dispositivo vengono enumerate. La figura seguente mostra gli stack di dispositivi di esempio che potrebbero essere creati per una scheda PC combinata con il supporto multifunzione richiesto.
Come illustrato nella figura precedente, il driver del bus in cui risiede il dispositivo multifunzione enumera un dispositivo. L'ID hardware nel file INF multifunzione causa il caricamento del driver del bus di mf.sys come driver di funzione per il dispositivo. Il driver del bus di mf.sys enumera due dispositivi figlio, un dispositivo LAN e un modem.
Il gestore PnP tratta ogni dispositivo figlio come un dispositivo tipico, individuando i file INF, caricando i driver appropriati, chiamando le routine AddDevice e così via fino a quando non viene creato uno stack di dispositivi per ogni dispositivo. Il driver del bus mf.sys arbitra le risorse per i dispositivi figlio e gestisce qualsiasi altro aspetto multifunzione del dispositivo. Il fornitore della scheda multifunzione fornisce driver di funzione e INFS per le funzioni multiple (LAN e modem), proprio come se fossero dispositivi separati.
La figura si concentra sui driver di funzione e sui driver del bus padre e sui relativi oggetti FDO e PDO associati. Qualsiasi driver di filtro (e filtri DO) viene omesso per semplicità.