Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Tutti i driver devono essere portabili in tutte le piattaforme hardware supportate da Windows. Per ottenere la portabilità multipiattaforma, gli sviluppatori di driver devono:
Codice in C (senza linguaggio assembly).
Interagire con Windows usando solo le interfacce di programmazione e le intestazioni fornite nel WDK.
Programmazione dei driver in C
Tutti i driver in modalità kernel devono essere scritti in C in modo che possano essere ricompilati con un compilatore C compatibile con il sistema, ricollegati ed eseguiti in piattaforme Microsoft Windows diverse senza riscrivere o sostituire codice. La maggior parte dei componenti del sistema operativo è codificata interamente in C, con solo piccole parti dei componenti HAL e kernel scritti nel linguaggio assembly, in modo che il sistema operativo sia facilmente portabile tra piattaforme hardware. Non è possibile usare molti costrutti di linguaggio C++ nei driver in modalità kernel, pertanto è consigliabile valutare attentamente l'uso di tali costrutti. Per altre informazioni sui problemi che si verificano quando i driver includono funzionalità C++, vedere il white paper C++ per driver in modalità kernel: vantaggi e svantaggi .
I driver non devono basarsi sulle funzionalità di un particolare compilatore C compatibile con il sistema o sulla libreria di supporto C se tali funzionalità non sono sicuramente supportate da altri compilatori compatibili con il sistema. In generale, il codice del driver deve essere conforme allo standard ANSI C e non dipende da nulla che questo standard descrive come "definito dall'implementazione".
Per scrivere driver portabili, è consigliabile evitare:
Dipendenze dai tipi di dati che possono variare in base alle dimensioni o al layout da una piattaforma a un'altra.
Chiamata di qualsiasi funzione della libreria di runtime C standard che mantiene lo stato.
Richiamare qualsiasi funzione della libreria runtime standard C a cui il sistema operativo fornisce una routine di supporto alternativa.
Uso delle interfacce WDK-Supplied
Ogni componente esecutivo di Windows NT esporta un set di routine di supporto per driver in modalità kernel che vengono chiamate dai driver e da tutti gli altri componenti in modalità kernel. Se l'implementazione sottostante di una routine di supporto cambia nel tempo, i chiamanti rimangono portabili perché l'interfaccia del componente di definizione non cambia.
WdK fornisce un set di file di intestazione che definiscono tipi di dati e costanti specifici del sistema usati dai driver (e da tutti gli altri componenti in modalità kernel) per mantenere la portabilità da una piattaforma a un'altra. Tutti i driver in modalità kernel includono uno dei file di intestazione principali della modalità kernel WDK, Wdm.h o Ntddk.h. I file di intestazione master estraggono non solo le intestazioni fornite dal sistema che definiscono i tipi di base in modalità kernel, ma anche le selezioni appropriate da qualsiasi intestazione specifica dell'architettura del processore quando un driver viene compilato con la direttiva del compilatore corrispondente.
Alcuni driver, ad esempio driver miniport SCSI, driver NDIS e driver miniport video, includono altri file di intestazione forniti dal sistema.
Se un driver richiede definizioni dipendenti dalla piattaforma, è consigliabile isolare tali definizioni all'interno di istruzioni #ifdef , in modo che ogni driver possa essere compilato e collegato per la piattaforma hardware appropriata. Tuttavia, è quasi sempre possibile evitare di implementare codice compilato in modo condizionale in un driver usando le routine di supporto, le macro, le costanti e i tipi forniti dai file di intestazione master WDK.
I driver in modalità kernel possono usare routine RtlXxx in modalità kernel documentate in WDK. I driver in modalità kernel non possono chiamare routine RtlXxx in modalità utente.