Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il sistema operativo basato su Microsoft Windows NT è basato su oggetti. Vari componenti nell'esecutivo definiscono uno o più tipi di oggetto. Ogni componente esporta routine di supporto in modalità kernel che gestiscono le istanze dei relativi tipi di oggetto. Nessun componente può accedere direttamente agli oggetti di un altro componente. Per usare gli oggetti di un altro componente, un componente deve chiamare le routine di supporto esportate.
Questa progettazione consente al sistema operativo di essere sia portabile che flessibile. Ad esempio, è possibile che una versione futura del sistema operativo contenga un componente kernel codificato che definisce gli stessi tipi di oggetto, ma con strutture interne completamente diverse. Se questa versione ipotetica recoded del kernel esporta un set di routine di supporto con gli stessi nomi e parametri del set esistente, le modifiche interne non avranno alcun effetto sulla portabilità di qualsiasi altro componente esecutivo nel sistema esistente.
Allo stesso modo, per rimanere portabile e configurabile, i driver devono comunicare con il sistema operativo e tra loro usando solo le routine di supporto e altre interfacce descritte in WDK.
Analogamente al sistema operativo, anche i driver sono basati su oggetti. Per esempio:
Gli oggetti file rappresentano la connessione di un'applicazione in modalità utente a un dispositivo.
Gli oggetti dispositivo rappresentano i dispositivi logici, virtuali o fisici di ogni driver.
Gli oggetti driver rappresentano l'immagine di caricamento di ogni driver.
Il gestore I/O definisce la struttura e le interfacce per gli oggetti file, gli oggetti dispositivo e gli oggetti driver.
Analogamente a qualsiasi altro componente esecutivo, i driver usano oggetti chiamando routine di supporto in modalità kernel esportate dal gestore di I/O e da altri componenti di sistema. Le routine di supporto in modalità kernel in genere hanno nomi che identificano l'oggetto specifico che ogni routine modifica e l'operazione eseguita da ogni routine su tale oggetto. Questi nomi di routine di supporto hanno il formato seguente:
PrefixOperationObject
where
Prefisso Identifica il componente in modalità kernel che esporta la routine di supporto e, in genere, il componente che ha definito il tipo di oggetto. La maggior parte dei prefissi ha due lettere.
Operazione Descrive le operazioni eseguite per l'oggetto .
Oggetto Identifica il tipo di oggetto.
Ad esempio, la routine IoCreateDevice del gestore di I/O crea un oggetto dispositivo per rappresentare un dispositivo fisico, logico o virtuale come destinazione delle richieste di I/O.
Un componente di sistema può esportare routine che chiamano routine di supporto di un altro componente. Ciò può ridurre il numero di chiamate che un driver deve effettuare. Il gestore di I/O, in particolare, esporta determinate routine che semplificano lo sviluppo di driver. Ad esempio, IoConnectInterruptEx, che i driver di livello più basso chiamano per registrare i loro ISRs, chiama le routine di supporto del kernel per gli oggetti di interrupt.
Opacità dell'oggetto
Alcuni oggetti definiti dal sistema sono opachi: solo il componente di sistema che definisce è a conoscenza della struttura interna di tale oggetto e può accedere direttamente a tutti i dati contenuti da un oggetto. Il componente di sistema che definisce un oggetto opaco esporta routine di supporto che i driver e altri componenti in modalità kernel possono chiamare per manipolare tale oggetto. I driver non accedono mai direttamente alle strutture di oggetti opache.
Nota Per mantenere la portabilità dei driver, i driver devono usare le routine di supporto fornite dal sistema per modificare gli oggetti definiti dal sistema. Il componente di sistema che definisce può modificare la struttura interna dei relativi tipi di oggetto in qualsiasi momento.