NDIS Connection-less Protocol Driver Sample をインストールする

今回は、NDIS プロトコル ドライバのサンプルNDIS Connection-less Protocol Driver Sample をご紹介します。   このサンプルは、コネクションレス型の、NDIS 6.0 プロトコル ドライバの実装を確認できるサンプルです。プロトコル ドライバについては、さなえすさんの以前の記事「Windows の Network Driver」をご参照ください。Connection-less プロトコルの例としては、UDP があります。これは、トランシーバーの様に明示的な接続をしなくても、通信ができます。そして、Connection-oriented の例としては、TCP があります。こちらは、電話のように相手が着信して初めて接続が確立し、通信ができます。このサンプルは、ユーザーモードからのReadFile/WriteFile で Raw イーサネット フレームを送受信できます。また、イーサネット アダプタへのバインドを確立したり破棄したりできます。   NDIS Connection-less Protocol Driver Sample では、ドライバーに加え、そのドライバーとのやり取りを行うテストアプリケーションがあるので、すぐに検証を行うことができます。   今回は、このサンプル プロトコル ドライバをビルドして、ターゲット側 PC の Windows 10 (1703) x86 にインストールします。そして、本サンプルの test フォルダでビルドする prottest.exe サンプルアプリケーションで、このプロトコル ドライバがバインドされたイーサネット アダプタを列挙し、パケットを送受信するところまでを確認します。サンプルをビルドする、開発側のPC は Windows 10 (1703) x64…


WFP Layer 2 Filtering について

こんにちは、紫陽花がきれいな季節になりましたね。WDK サポートチームのいわいだです。 Windows 8 から Layer 2 の MAC ヘッダー領域を Windows Filtering Platform のコールアウト ドライバーでフィルターできるようになっております。 今回は、その WFP Layer 2 Filtering についてご紹介します。 が、その前に一旦おさらいです。ネットワーク関連のフィルターには、    1. NDIS 中間ドライバー (NDIS IM)    2. NDIS フィルター ドライバー (NDIS Light Weight フィルター)    3. WFP コールアウト ドライバー というようにそれぞれフィルター機能を有するドライバー インターフェイスが提供されています。 ざっくりと各種フィルターの役割や用途などについて説明すると、次のようになっています。このあたりについては、過去の Blog エントリ 「Windows の Network Driver」 にもありますのであわせてご参照ください。​ 種類 1. NDIS 中間ドライバー 2….


NDIS Virtual Miniport Driver (netvmini) サンプルをインストールする

今回は、ネットワークアダプタ (または Network Interface Card: NIC) のドライバのサンプル NDIS Virtual Miniport Driver (netvmini) サンプルをご紹介します。   このサンプルは、物理 NIC を必要とせずに、NDIS ミニポートドライバの実装を確認できるサンプルです。ミニポートドライバについては、さなえすさんの以前の記事「Windows の Network Driver」をご参照ください。   今回は、このサンプルをビルドして、ターゲット側 PC の Windows 10 (1607) x86 にインストールし、デバイスマネージャー上で表示されるところまでを確認します。サンプルをビルドする、開発側の PC は Windows 10 (1607) x64 に Visual Studio 2015 と WDK 10 がインストールされています。   1. サンプルの入手   NDIS Virtual Miniport Driver (netvmini) サンプルは、以下のサイトの右側の緑色の [Clone…


Windows Filtering Platform Sample をインストールする

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、約 2 時間川下りしたことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話】までどうぞ。   さて、今回は、Windows Filtering Platform Sample を Windows 10 にインストールしてみたいと思います。 具体的な手順として、以下の流れで進めます。   (1) サンプルの入手 (2) Visual Studio 2015 でソリューションファイルを開く (3) 構成とプラットフォームを編集 (4) ユーザーモードアプリケーション、ライブラリ、サービスのランタイムライブラリを設定 (5) サンプルインストールスクリプトの再起動の設定を編集 (6) ソリューションのビルド (7) ビルドで生成されたモジュールの確認とテスト署名 (8) ターゲット PC の準備 (9) ドライバとサービスのインストール (10) ユーザーモードアプリケーションの実行 (11) TraceView でのログ採取   それでは、以下、各手順の詳細を説明していきます。 前提として、開発用 PC として Windows 10 x64 (build 10586)、テスト用ターゲット PC…


Bindview とINetCfg API

みなさま、お久しぶりです。さなえすです。   ローカル エリア接続のプロパティから、チェックボックスのチェックを入れる・はずすといった手順で、IPv6 の有効・無効の切り替えなどを行うことができます。では、似たような操作を、プログラムで行いたい場合どうすればよいのでしょうか?     INetCfg インターフェースは、ネットワーク関連のモジュールのセットアップや、コンフィグレーションを行うための機能を提供しています。なので、この INetCfg インターフェースを使用してプログラムを実装すれば、IPv6 のコンポーネントを有効・無効にすることもできるようになります。INetCfg インターフェースの使用方法については、Windows Driver Kit (WDK) で、技術ドキュメントとサンプル コード (Bindview) を公開していますので、実際のコードを見たい方は、WDK の下記のディレクトリを直接ご参照ください。         Bindview Sample       %BaseDir%\src\network\config\bindview   何はともあれ、まずはサンプルを動かしてみてください。使用方法はこんなかんじです。  1. サンプルをビルドし、 Bindview.exe を管理者権限で起動  2. [Show Bindings For] のプルダウンより、列挙するネットワーク機能の種類を選択       例えば IPv6 の設定を変更したい場合、[All Protocols] を選択し、"インターネット プロトコル バージョン 6 (TCP/IPv6) " を選択  3.条件に該当する Bind Path を展開/選択して右クリックし、[Enable]/[Disable] を実施…


NDIS のトレース

こんにちは、さなえすです。暑くなってきましたが、皆さまいかがお過ごしですか?「梅雨(つゆ)」の語源は諸説あるようですが、梅の実が熟す時期の雨という意味もあるそうです。今年は私も梅シロップと梅酒を漬けてみました。これで夏を乗り切りつつ、暑さがおさまる頃には美味しい梅酒が飲めるといいなぁーと、楽しみにしております♪   先日、NDIS チームのブログで NDIS.sys の TMF (Trace Format) ファイルが公開されていました。実際の記事はこちら (→ ”TMF download page”) です。以前 K 里さんの投稿でも USB のイベントトレーシングについて書かれていましたが、NDIS.sys ドライバーも同様に ETW の機能を利用してトレースをとる事ができます。今日は TMF ファイルを使った NDIS の ETW トレース の出力・デコードの方法を皆さまにご紹介いたします。   ※注意 なお、NDISチームのブログでも記載がありますが、”TMF download page” で公開されている TMF ファイルは、Windows 7 と Windows Server 2008 R2 においての以下のバージョンの NDIS のものです。全ての修正モジュールに対応しておりませんので、お使いの NDIS バージョンに該当しているかどうか、ご注意ください。   –     RTM –     KB977927 –     KB981765 –     KB2471472 –     KB2482122 –     SP1…


Windows の Network Driver II ~ Bind は制御できるか? ~

お久しぶりです。さなえすです。   今日は前回 8 月の投稿でお約束した、ネットワークのバインド (Bind) について書こうと思います。   ● バインド (Bind) とは? 英語の “bind” のそもそもの意味は、バラバラになっているものを紐などを使って「束ねる」ことを指しますが、ネットワークにおけるバインドの概念も同じことです。システム上には、ネットワークモジュールが複数存在していて、かつ、異なるレイヤーに位置していることは前回お話しました。バインドという動作は、それらのバラバラになっているモジュールを束ねて、どのようなネットワークパスを構成するかという結びつきを表します。通常、ネットワークドライバーは、インストールされただけでは動作せず、バインドされた時点で動作開始とみなしますし、その分、上下のドライバーに依存して動作しています。また、NDIS 6 以降からは新たなステータス管理の仕組みがサポートされ、動的なバインドも行われるようになりました。このため、適切な実装をしていないドライバーは、バインドができずに動作しないばかりか、BugCheck という最悪のシナリオさえ引き起こしてしまうこともあり得ます。このようなわけで、バインドはネットワーク ドライバーの特徴の 1 つでもあるとともに、動作上重要な役割を担っています。       まず手始めに、ネットワークのプロパティのダイアログボックスをご紹介します。Windows Internals 5th Edition でもネットワークのバインドの説明で、バインドの確認や、バインド順を変更するための方法として紹介されていました。ドライバー開発者以外の方であれば、こちらのインターフェースのほうが、“ネットワークのバインド“ として馴染みがあるかもしれません。   1.[ネットワーク接続]を開く    コントロール パネル   > ネットワークとインターネット    > ネットワークと共有センター     > アダプターの設定変更     2.エクスプローラーのメニューの [詳細設定(N)] から [詳細設定(S)…] を選択     (エクスプローラーのメニューが表示されていない場合は、’Alt’ キーを押下して表示させてください)    この方法では、ローカルエリア接続に紐づいているバインド情報の一部を確認することができます。  さらに、プロトコルを選択して、右の矢印を押下すると、バインドの順番を変更することも可能となっています。        …


Windows の Network Driver

お久しぶりです。さなえすです。8月ももう終わりですね。 私事ですが、この間の週末は高円寺の阿波踊りに「マイクロソフト連」として参加させていただきました。“Windows 7”  を掛け声に踊ったんですけど、腕も足も痛いし、汗は目に入るしで大変でした。最後まで頑張れたのは、沿道のみなさんから「マイクロソフトぉ~頑張れ~!」「せぶんせぶんせぶん~」と温かい声援をかけていただいたおかげです。お祭りを通じて、地域のみなさんとの距離がぐっと近くなる感じが、とっても良かったです♪ さて、皆さまのこの夏の思い出は何でしたか?   今日は、ずーっと書きたいなと思っていたトピック、ネットワークについて書こうと思います。Windows のネットワークに含まれるトピックは沢山あります。なので、その中でドライバーだけを取ってみても……やっぱり沢山あります。私が、初めて Windows の ネットワークドライバーの世界に触れた時、ドライバーの名称だけでも様々なものがあると感じました。例えば、ミニポートドライバー・NICドライバー・LANドライバー、ネットワーク フィルタードライバー、中間層ドライバー、TDI ドライバー、プロトコル ドライバー、…………などなど、たくさんありますが、少しずつお伝えできればいいなと思っています。     今日はまず、「NDIS ドライバー」のお話。   この Blog を書くにあたって、Windows Internals 5th Edition を参照したところ、NDISライブラリー含め、NDIS スタック上で動作するドライバーのことをまとめて「NDIS ドライバー」と称していました。このBlogでもそう呼ばせてもらおうと思います。ちなみにですが、NDISと書いて、通常「エヌディス」と読みますよ。     ●NDIS ライブラリー (Ndis.sys) まず、Windows 上のネットワークドライバーを理解する上で、大きなポイントとなるのが NDISです。NDIS とは、Network Driver Interface Specification の略で、1989年に3Comとマイクロソフトによって共同で開発された、読んで字の如く、ネットワーク ドライバーにおけるインターフェースの仕様です。Windows 上では、NDIS ライブラリー(※ 仕様自体と分けるため NDIS ライブラリーと明記しましたが、以降 NDIS と称します)として実装されていて、実際のファイルは Drivers フォルダーの下にあります (\%SystemRoot%\System32\Drivers\Ndis.sys)。   NDISでは OSI参照モデル…