Panoramica del driver Miniport di Sintetizzatore
Sia un synth che un sink sono necessari per il supporto DirectMusic. Le implementazioni predefinite di ognuna vengono fornite con DirectMusic. Il sintetizzatore software Microsoft in modalità utente viene fornito come synth predefinito e DirectSound è il sink di onda predefinito. Questi forniscono l'emulazione hardware completa, ma è in genere possibile ottenere ulteriori miglioramenti delle prestazioni con implementazioni hardware o software in modalità kernel.
Se si implementa il supporto per l'hardware, l'unica scelta consiste nel scrivere un driver in modalità kernel. In modalità kernel, il sink d'onda viene fornito dal driver di porta DMus in PortCls e non deve essere sostituito per le implementazioni personalizzate (come avviene talvolta in modalità utente).
Per i driver DirectMusic in modalità kernel, il file di intestazione più importante è dmusicks.h. Contiene le principali interfacce in modalità kernel necessarie per implementare il driver miniport. Queste interfacce sono:
Le ultime tre di queste interfacce vengono implementate in PortCls.sys.
Altri due file di intestazione di interesse sono dmusprop.h, che contiene elementi di proprietà DirectMusic e dmusbuff.h, che contiene la struttura IRP principale, DMUS_EVENTHEADER.
Il diagramma seguente mostra la relazione tra il driver dell'adattatore IHV e il resto del sistema DirectMusic.
Al livello superiore, il driver viene esposto tramite un driver di porta DirectMusic (un'istanza dell'interfaccia IDirectMusicPort ). Questo è il modo in cui un'applicazione comunica con DirectMusic. Questo driver di porta comunica verso il basso a un'istanza di pin tramite chiamate di streaming del kernel standard tramite la funzione DeviceIoControl (descritta nella documentazione di Microsoft Windows SDK).
Si noti che il termine "porta" ha due significati in conflitto nella figura precedente. Evitare di confondere l'utilizzo del termine porta tramite l'API DirectMusic, in modalità utente precedente, con il driver di porta DMus in modalità kernel. I termini hanno significati simili ma leggermente diversi nei due contesti. In particolare, si noti che l'interfaccia IDirectMusicPort nella parte superiore della figura presenta un'astrazione di una singola istanza di pin implementata dal driver di porta DMus nella metà inferiore della figura.
Ogni oggetto driver miniport è connesso a un oggetto driver di porta corrispondente. L'oggetto driver di porta fornisce servizi di base al driver miniport. Ogni istanza di pin mappata a un'istanza aperta del dispositivo include servizi come la conversione del formato, la sequenziazione e la "thruing" (per una descrizione dell'interfaccia IDirectMusicThru, vedere la descrizione dell'interfaccia IDirectMusicThru nella documentazione di Windows SDK). I pin possono essere destinazioni o origini e possono supportare più formati e intervalli di dati. Ogni istanza del pin specifica la destinazione o l'origine e specifica il formato e l'intervallo di dati supportati.
L'oggetto driver miniport viene creato dal driver dell'adattatore IHV. Anche se è presente un'istanza del pin e sequencer per ogni istanza aperta del driver, è presente una sola coppia di driver port-miniport per ogni componente hardware (o sintetizzatore software kernel caricato). La comunicazione con il driver miniport è attraverso un flusso di eventi passati al driver miniport e da elementi di proprietà supportati dal driver miniport.
La sezione DirectMusic Miniport Driver Interface presenta i dettagli di un'implementazione del driver miniport DirectMusic.