0

みんな。WinPcap を NDIS 6 プロトコルから NDIS 6 フィルターに移植している私です :) バグに遭遇し、2 日間閉じ込められました。npf6x.sys ドライバー (元の名前は npf.sys) をインストールした後、"net start npf" でサービスを開始できます。次に、Wireshark を開きました。その後、ネットワークがダウンしました (トレイ アイコンの感嘆符)。リモート デバッグの後、FilterReceiveNetBufferLists ルーチンが呼び出されないことがわかりました。ここでRXリンクが壊れたと思います。ただし、FilterSendNetBufferLists は正常に呼び出されます。FilterAttach が正常に呼び出され、現在 FilterUnload が呼び出されていないことは確かです。したがって、フィルター モジュールはまだその場所にあるはずです。ただし、RX パスでは機能しません。そこでWiresharkの「開始」ボタンをクリックすると、思いがけずネットワークが復旧したことがわかりました。次に、現在のキャプチャを停止して「Interface List」をクリックすると、ネットワークが再びダウンしました。とても奇妙です。

ドライバーの実行中のプロセスでハンドラー ポインターを変更しませんでした。ドライバーもロックでブロックされていないようです。実行中に NDIS がフィルターの FilterReceiveNetBufferLists を呼び出さないようにするケースがあるかどうか、誰か教えてもらえますか?

また、NDIS 6 プロトコルから NDIS 6 フィルターに移植する方法を説明している公式ドキュメントはありますか? NDIS 5 から NDIS 6 への移植に関するドキュメントしか見つかりませんでした。

ありがとう。

4

1 に答える 1

1

LWF からプロトコルへの移行はあまり一般的ではないため、LWF からプロトコルへの公式ドキュメントはありません。

多くの原因が考えられるため、ネットワークがダウンした原因を特定することは困難です。最善の方法は、カーネル デバッガーを使用して、.xml で分析を開始すること!ndiskd.miniportです。ネットワークがダウンしたときに確認する一般的なチェックリストを次に示します。

  • ミニポートは正常な状態ですか? STATE!ndiskd.miniport領域のすべてが緑色または通常の外観で表示されていることを確認します。データパスが正常 (バイパスされていない) であり、メディア接続状態が接続されていることを確認してください。
  • フィルター ドライバーは、ロードする必要があると思われる場所にロードされていますか? !ndiskd.miniportBINDINGSセクションにフィルタが表示されていることを確認します。新しい Windows 8.1 WDK を使用している場合は、フィルターのバインドが "拒否" されていないことも確認してください。
  • ミニポートの受信フィルターは、通常の一連の着信パケットを許可しますか? !ndiskd.miniport -filterdbミニポートに少なくとも DIRECTED および MULTICAST トラフィックが許可されていることを確認します。
  • ミニポートはトラフィックを表示しようとしていますか? にブレークポイントを設定しndis!NdisMIndicateReceiveNetBufferLists、NIC が受信したパケットを OS に提​​供しているため、ブレークポイントが頻繁にヒットすることを確認します。
  • TCPIP はトラフィックを送信しようとしていますか? TCPIP がトラフィックを送信していない場合、受信する応答はありません。ブレークポイントをオンndis!NdisSendNetBufferListsに設定して、TCPIP がトラフィックを送信しているかどうかを確認します。そうである場合は、ミニポート送信ハンドラーに別のブレークポイントを設定し (!ndiskd.minidriverそのハンドラーを見つけるために使用しますMiniportSendNetBufferLists)、送信パケットが NIC に到達していることを確認します。
  • ミニポートの受信パケットのプールは空ですか? その場合、NBL が不足しているため、ミニポートはそれ以上のパケットを示すことができません。!ndiskd.pendingnblsまだ返されていない NBL があるかどうかを確認するために使用します。保留中の NBL が 0 個または 1 個見つかるのが一般的です。何百も見つかった場合は、フィルターに NBL リークがあります。
  • ミニポートは何か問題に気づきましたか? ミニポート統計を確認します。Windows 8 ではGet-NetAdapterStatistics、PowerShell から使用します。

Windows カーネル ネットワークのデバッグに慣れていない場合は、見た目が良いか悪いかを判断するのが難しいでしょう。理想的には、デバッグする別の動作中のコンピューターを用意して、「通常」がどのように見えるかを確認できるようにします。

検索しても有用なものが見つからない場合は、別のアプローチとして、行ったコードの変更に対してバイナリ検索を実行します。まず、フィルターの受信パスに加えたすべての変更をコメントアウトし、サンプルとまったく同じように復元します。それで問題は解決しますか?もしそうなら、続けてください。. . .

于 2013-08-14T17:50:34.450 に答える