NDISwrapper est un wrapper de pilote logiciel gratuit qui permet l'utilisation de pilotes de périphériques réseau Windows XP (pour des périphériques tels que des cartes PCI , des modems USB et des routeurs ) sur les systèmes d'exploitation Linux. NDISwrapper fonctionne en implémentant le noyau Windows et les API NDIS et en liant dynamiquement les pilotes réseau Windows à cette implémentation. Par conséquent, il ne fonctionne que sur les systèmes basés sur les architectures de jeu d'instructions prises en charge par Windows, à savoir IA-32 et x86-64 .
Les pilotes natifs de certaines cartes réseau ne sont pas disponibles sous Linux, car certains fabricants conservent des interfaces propriétaires et n'écrivent pas de pilotes multiplateformes. NDISwrapper permet l'utilisation de pilotes Windows, qui sont disponibles pour pratiquement toutes les cartes réseau PC modernes.
Utiliser
Il y a trois étapes : créer un pilote Linux, l'installer et l'utiliser. NDISwrapper est composé de deux parties principales, un outil de ligne de commande utilisé au moment de l'installation et un sous-système Windows utilisé lorsqu'une application appelle le sous-système Wi-Fi .
Comme le résultat d'une installation de NDISwrapper doit être une sorte de pilote Linux pour pouvoir fonctionner avec des applications Linux, la première action de l'utilisateur est de « compiler » un ou plusieurs fichiers Windows et la version de NDISwrapper du DDK Windows dans un module de noyau Linux. Cela se fait avec un outil appelé « ndiswrapper ». Le pilote Linux résultant est ensuite installé (souvent manuellement) dans le système d'exploitation. Une application Linux peut alors envoyer une requête à ce pilote Linux qui effectue automatiquement les adaptations nécessaires pour appeler son pilote Windows et son DDK, désormais internes.
Pour réaliser cette « compilation », NDISwrapper requiert au moins les fichiers « .inf » et « .sys » fournis invariablement avec le pilote Windows. Par exemple, si le pilote s'appelle « mydriver », avec les fichiers mydriver.inf et mydriver.sys et vendorid:productid 0000:0000, alors NDISwrapper installe le pilote dans /etc/ndiswrapper/mydriver/ . Ce répertoire contient trois fichiers :
- 0000:0000.conf , qui contient des informations extraites du fichier inf
- mydriver.inf (le fichier inf d'origine)
- mydriver.sys (le fichier du pilote)
Interfaces graphiques

Il existe des interfaces graphiques pour NDISwrapper, telles que Ndisgtk et NdisConfig, qui permettent d'installer NDISwrapper à l'aide d'une interface utilisateur graphique plutôt que de commandes de console.
Architecture
NDISwrapper permet à un système de type Unix d'utiliser des pilotes Windows de type NDIS et WIFI. Il était utile à une époque où il n'existait pas de pilotes Wi-Fi Linux pour les cartes Wi-Fi courantes. Il est composé de :
- Un pilote NDIS, qui est une sorte de superposition pour les pilotes de périphériques Ethernet .
- Un gestionnaire Wi-Fi, pour contrôler la partie radio et sécurité de la carte Wi-Fi. Il expose une interface "extension sans fil".
- Un gestionnaire USB et un gestionnaire PnP pour permettre d'utiliser des cartes Wi-Fi embarquées dans des clés USB. Le gestionnaire USB est composé de deux parties, d'abord une petite implémentation USBD (pile USB) puis un simple pilote USB Windows Driver Model (WDM) lui-même composé de deux parties : La partie avant va recevoir les appels de la pile USB NDISwrapper (en fait des appels provenant du pilote Windows d'origine qui étaient normalement destinés à aller vers la pile USB Windows) et la partie arrière utilise la pile USB Linux.
- Un Ntoskrnl minimal simulant le DDK pour :
- gestion des appels depuis le pilote Windows.
- gestion de l'IRP sur le pilote Windows (WDM uniquement pour le moment)
- gérer les pilotes de filtre de manière simpliste
- chargement/déchargement des pilotes Windows
- Un wrapper convertissant les appels Linux vers Windows et inversement, gérant également les résultats et les codes d'erreur
Comment ça marche
Ndiswrapper utilise les fichiers INF Windows .
Lorsqu'une application Linux appelle un périphérique enregistré sous Linux comme périphérique NDISwrapper, le NDISwrapper détermine quel pilote Windows est ciblé. Il convertit ensuite la requête Linux en langage Windows, appelle le pilote Windows, attend le résultat et le traduit en langage Linux puis renvoie le résultat à l'application Linux. Il est possible à partir d'un pilote Linux (NDISwrapper est un pilote Linux) d'appeler un pilote Windows car ils s'exécutent tous les deux dans le même espace d'adressage (le même que le noyau Linux). Si le pilote Windows est composé de pilotes en couches (par exemple un pour Ethernet au-dessus d'un pour USB) c'est le pilote de couche supérieure qui est appelé, et cette couche supérieure va créer de nouveaux appels (IRP dans le langage Windows) en appelant le "mini ntoskrnl". Le "mini ntoskrnl" doit donc savoir qu'il existe d'autres pilotes, il doit les avoir enregistrés dans sa base de données interne a priori en lisant les fichiers ".inf" de Windows.
Programmes similaires
- DriverLoader Archivé le 17/05/2007 sur la Wayback Machine est un outil commercial produit par Linuxant pour Linux qui semble fournir les mêmes fonctionnalités que NDISwrapper.
- Indépendamment du projet NDISwrapper, mais à peu près simultanément avec celui-ci, Bill Paul de Wind River Systems a développé un système similaire, connu sous le nom de Project Evil ou The NDISulator , pour FreeBSD . Il a depuis été porté sur DragonFly BSD et NetBSD .
Limites
- NDISwrapper s'appuie sur les anciennes « extensions sans fil » pour permettre aux applications d'accéder au Wi-Fi.
- Comme NDISwrapper s'appuie sur les pilotes Windows, il ne prend en charge que les architectures i386 et x86_64 .
- NDISwrapper n'implémente pas encore NDIS 6 ( version Windows Vista ), limitant les pilotes à Windows XP. En octobre 2013 , une branche de code sur le site du projet est en cours de développement depuis 2006, mais une demande de fonctionnalité de 2009 n'a pas été attribuée.
- Bien que cela ne soit pas un problème majeur pour l'architecture x86 en raison de la popularité de Windows XP x86-32 , de nombreux fournisseurs choisissent de créer des versions de pilotes 64 bits uniquement pour Windows Vista, ce qui signifie que les systèmes Linux utilisant l'architecture x86-64 ne peuvent pas utiliser de tels périphériques réseau (ils ne peuvent ni utiliser XP x86-32 NDIS5 car ce sont des systèmes 64 bits, ni les pilotes NDIS6 64 bits car ils ne peuvent pas utiliser NDIS6). Il est toujours possible d'utiliser les pilotes Windows XP 64 bits qui implémentent NDIS5, cependant, il existe moins de pilotes disponibles pour xp64 (NDIS5/64 bits) que pour XP32 (NDIS5/32 bits).
- Depuis 2006, la plupart des pilotes Windows sont compatibles avec Windows Driver Foundation (WDF), que NDISWrapper ne peut pas utiliser. Cela rend NDISWrapper obsolète, car il ne prend en charge que l'infrastructure de pilotes WDM précédente.