NDISwrapperは、 Windows XPのネットワークデバイスドライバ( PCIカード、USBモデム、ルーターなどのデバイス用)をLinuxオペレーティングシステムで使用できるようにするフリーソフトウェアのドライバラッパーです。NDISwrapperは、WindowsカーネルとNDIS APIを実装し、 Windowsネットワークドライバをこの実装に動的にリンクすることで動作します。そのため、Windowsがサポートする命令セットアーキテクチャ、すなわちIA-32とx86-64に基づくシステムでのみ動作します。
一部のネットワークアダプタでは、メーカーが独自のインターフェースを採用し、クロスプラットフォームドライバを作成しないため、Linux上でネイティブドライバが利用できません。NDISwrapperを使用すると、ほぼすべての最新PCネットワークアダプタに対応したWindowsドライバを使用できます。
手順は3つあります。Linuxドライバの作成、インストール、そして使用です。NDISwrapperは主に2つの部分で構成されています。1つはインストール時に使用されるコマンドラインツール、もう1つはアプリケーションがWi-Fiサブシステムを呼び出す際に使用されるWindowsサブシステムです。
NDISwrapper のインストール結果には、Linux アプリケーションと連携できる何らかの Linux ドライバが生成されるため、ユーザーが最初に行う作業は、数個の Windows ファイルと NDISwrapper 版の Windows DDK を Linux カーネル モジュールに「コンパイル」することです。これは「ndiswrapper」というツールを使用して行います。生成された Linux ドライバは、OS に(多くの場合手動で)インストールされます。その後、Linux アプリケーションはこの Linux ドライバにリクエストを送信し、ドライバは自動的に必要な調整を行い、内部の Windows ドライバと DDK を呼び出します。
この「コンパイル」を実行するには、NDISwrapper は、Windows ドライバーの一部として必ず付属する「.inf」ファイルと「.sys」ファイルを少なくとも必要とします。たとえば、ドライバー名が「mydriver」で、ファイル mydriver.inf と mydriver.sys、vendorid:productid が 0000:0000 の場合、NDISwrapper はドライバーを/etc/ndiswrapper/mydriver/にインストールします。このディレクトリには次の 3 つのファイルが含まれています。

NDISwrapperには、NdisgtkやNdisConfigなどのグラフィカルなフロントエンドがあり、これらを使用すると、コンソールコマンドではなくグラフィカルユーザーインターフェースを使用してNDISwrapperをインストールできます。
NDISwrapperは、UnixライクなシステムでWindowsのNDISおよびWIFIドライバを使用できるようにするものです。これは、一般的なWi-Fiカード用のLinux Wi-Fiドライバが存在しなかった時代に役立ちました。構成要素は以下のとおりです。
NdiswrapperはWindows INFファイルを使用します。[ 1 ]
Linux アプリケーションが、Linux 上で NDISwrapper デバイスとして登録されているデバイスを呼び出すと、NDISwrapper はどの Windows ドライバが対象であるかを判断します。次に、Linux クエリを Windows の用語に変換し、Windows ドライバを呼び出し、結果を待って、それを Linux の用語に変換してから、結果を Linux アプリケーションに返します。Linux ドライバ (NDISwrapper は Linux ドライバです) から Windows ドライバを呼び出すことができるのは、両者が同じアドレス空間(Linux カーネルと同じ) で実行されるためです。Windows ドライバが階層化されたドライバ (たとえば、イーサネット用ドライバが USB 用ドライバの上に配置されているなど) で構成されている場合、呼び出されるのは上位レイヤーのドライバであり、この上位レイヤーは「mini ntoskrnl」を呼び出すことで新しい呼び出し (Windows 用語では IRP) を作成します。したがって、「mini ntoskrnl」は他のドライバが存在することを認識している必要があり、Windows の「.inf」ファイルを読み取って、それらを内部データベースに事前に登録しておく必要があります。