Object-Based

Il sistema operativo basato su Microsoft Windows NT è basato su oggetti. Vari componenti dell'esecutivo definiscono uno o più tipi di oggetto. Ogni componente esporta routine in modalità kernel che modificano le istanze dei 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.

Analogamente, per rimanere portatili e configurabili, i driver devono comunicare con il sistema operativo e tra loro usando solo le routine di supporto e altre interfacce descritte nel WDK.

Come il sistema operativo, i driver sono anche basati su oggetti. Ad 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.

La gestione I/O definisce la struttura e le interfacce per oggetti file, oggetti dispositivo e oggetti driver.

Come qualsiasi altro componente esecutivo, i driver usano oggetti chiamando routine di supporto in modalità kernel che la gestione I/O e altri componenti di sistema esportano. Le routine di supporto in modalità kernel in genere hanno nomi che identificano l'oggetto specifico che ogni routine modifica e l'operazione eseguita su tale oggetto. Questi nomi di routine di supporto hanno il modulo seguente:

PrefixOperationObject

dove

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 all'oggetto.

Oggetto Identifica il tipo di oggetto.

Ad esempio, la routine I/O manager IoCreateDevice 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 I/O, in particolare, esporta determinate routine che semplificano lo sviluppo di driver. Ad esempio, IoConnectInterruptEx, che chiama i driver di livello più basso per registrare i propri ISR, chiama le routine di supporto del kernel per gli oggetti di interruzione.

Opacità dell'oggetto

Alcuni oggetti definiti dal sistema sono opachi: solo il componente di sistema definito è consapevole della struttura interna di un oggetto e può accedere direttamente a tutti i dati contenuti da un oggetto. Il componente di sistema che definisce un oggetto opaco esporta supporta le routine che i driver e altri componenti in modalità kernel possono chiamare per modificare tale oggetto. I driver non accedono mai direttamente alle strutture di oggetti opache.

Nota Per mantenere la portabilità del driver, i driver devono usare le routine di supporto fornite dal sistema per modificare gli oggetti definiti dal sistema. Il componente di sistema di definizione può modificare la struttura interna dei tipi di oggetti in qualsiasi momento.