Il existe deux types de drivers sous Windows NT: les User-mode Driver et les Kernel-mode Driver. Les User-mode Driver s’exécutent comme leur nom le précise au niveau User du système, c’est à dire qu’ils peuvent accéder à l’ensemble des fonctionnalités de l’API Windows NT telle une application. Toutefois, ils reposent sur des interfaces clairement définies correspondant aux caractéristiques attendues du type de périphérique qu’ils pilotent. Parmi les User-mode Driver les plus connus on peut citer les pilotes d’écrans, d’imprimantes, de périphériques SCSI... S’ils sont faciles à implémenter – le plus gros du travail commun étant réalisé par le système, il ne reste qu’à écrire les spécificités propres au périphérique interfacé – ils ne permettent pas l’écriture de pilotes de cartes non habituelles. Dans notre cas, la carte à interfacer au système est la DAS-1601. Cette carte d’acquisition ne présente aucune caractéristique commune aux User-mode drivers. De plus, l’accès direct à la carte que nécessite son pilotage, implique de se situer à un niveau plus bas du système, au niveau du Kernel.
L’écriture d’un Kernel-mode driver n’est pas une chose facile. En effet, elle nécessite l’apprentissage d’une API totalement différente de celle du niveau User qui lui est interdit. Cette API est celle du DDK (Driver Development Kit) ; elle permet d’effectuer la totalité des opérations nécessaires à l’accès au matériel. De plus, la structure de Windows NT permet de concevoir le driver sans même devoir se préoccuper du type de processeur qui équipera la machine. En effet, la seule couche du système dépendante de l’architecture hardware, est ce que l’on appelle le HAL (Hardware Abstraction Layer). Par conséquent, en écrivant un driver pour Windows NT à l’aide des fonctions du DDK, on est assuré de sa recompilation immédiate sur toute les plates-formes supportant le système. En d’autres termes, développer un driver de la DAS-1601 pour un système à base de I386 revient, à l’heure actuelle, à développer ce driver également pour les processeurs Mips, Alpha et Power PC. Bien sûr, tout cela demande un effort de développement important ne serait-ce que pour accéder à la carte: ce qui se fait en une instruction sous DOS demande plusieurs pages de code d’initialisation sous Windows NT. Mais est-il nécessaire de rappeler les avantages de performance et de sécurité qui en découle ?
Partant donc à zéro quant au développement du driver de la DAS-1601, j’ai décidé de constituer mes propres interfaces de programmation. La raison qui m’a amené à ne m’inspirer que de loin des interfaces de la librairie de Keithley, est que celles-ci ne sont pas adaptées à nos besoins. Une fois de plus, rien n'a été pensé pour une exploitation temps réel . Bien au contraire, il semblerait qu’elles aient été développées pour s’appliquer à une démarche en deux temps: d’abord l’acquisition, ensuite l’analyse des données échantillonnées. Ne voulant pas me placer dans une quelconque position, j’ai décidé de concevoir une première couche n’étant rien d’autre que le reflet exact des possibilités de la carte. Par conséquent, nous distinguerons dans ma conception 4 grands axes: