問題タブ [ndis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - ドライバのスレッドがパケットを送信しない
この NDIS Filter Driverがあります。10 秒ごとにパケットを送信するスレッドをドライバーで開始しようとしました。
そのために、次のコードを使用します。
関数はPsCreateSystemThread
in で始まりましたDriverEntry
。
しかし、これは私のパケットを送信しません。
私はこれを使用しようとします:
このコードは、パケットをノンストップで送信します。
次のコードは、10 秒ごとに私のパケットで新しいファイルを作成します (CreateFileS は私の関数です)が、私のパケットは送信しません:
10 秒ごとにパケットを送信するにはどうすればよいですか?
windows - ProtocolBindAdapterルーチンの外でNdisOpenAdapterExまたは代替を呼び出す方法は?
有名なパケット キャプチャ ソフトウェアである WinPcap を NDIS 5.0 から NDIS 6.x に移植しています。すべての NDIS 5.0 機能を 6.0 バージョンに変換しようとしました。WinPcap ソースコード関数では、NdisOpenAdapter が Openclos.c の NPF_OpenAdapter によって呼び出されます。NDIS 6.0 の NdisOpenAdapterEx に変換しました。しかし、4 番目のパラメーター BindContext を設定する方法が見つかりません。NdisOpenAdapterEx の宣言はここにあります: http://msdn.microsoft.com/en-us/library/windows/hardware/ff563715(v=vs.85).aspx
また、MS は、「プロトコル ドライバーは、ProtocolBindAdapterEx 関数から NdisOpenAdapterEx を呼び出す必要があります。NDIS は、ProtocolBindAdapterEx のコンテキスト外で NdisOpenAdapterEx を呼び出そうとしても失敗します」と述べています。そのため、NPF_OpenAdapter で NdisOpenAdapterEx を呼び出すことはできないようです。NPF_BindAdapterEx 関数で呼び出す必要があります。ドライバー npf.sys を独自のバージョンに置き換え、Wireshark (パケット キャプチャ フロントエンド) を開始し、NPF_BindAdapterEx にブレークポイントを設定し、NPF_BindAdapterEx が NPF_OpenAdapter の前に呼び出されたことがないことを発見しました。したがって、NdisOpenAdapterEx を呼び出す前に BindContext パラメータを取得することは不可能です。
できるだけ小さな変更を加えて、WinPcap を NDIS 6.0 に移行したいだけです。この問題を解決するにはどうすればよいですか?</p>
これがOpenclos.cのコードです
windows - NDIS プロトコル ドライバー (WinPcap の npf.sys) を LWF または WFP に移植できますか?
みんな。WinPcap の改善を行っています。これで、npf.sys ドライバーを NDIS5.0 から NDIS6.0 に移植しました。LWF (Light-Weight Filter) や WFP (Windows Filter Platform) への移植など、このドライバーを改善する余地はまだありますか? より新しく、より優れたフレームワークを確実に使用したいだけです。
その他の質問は次のとおりです。
LWF は Vista 時代の製品のようで、今では Microsoft からあまり言及されていませんが、本当ですか?
LWF または WFP ドライバーは、NDIS プロトコル ドライバーが実行できることを実行できますか?
LWF や WFP は WDF (Windows Driver Framework) と関係がありますか、それとも WDF と WDM フレームワークの両方と互換性がありますか?
これが移植可能である場合、難易度はどうですか?以前にいくつかの NDIS 中間ドライバーを開発したことがありますが、LWF または WFP はそれより難しいですか、それとも簡単ですか?
ありがとう!
visual-studio - Visual Studio 2012 での NDIS ドライバーのコンパイル エラー! :(
Visual Studio 2012 Express for Desktop を使用して NDIS ドライバーをコンパイルしようとしています。既に WDK 8.1 をインストールしましたが、まだ取得できませんでした...
MSbuild ツールのパスをどこかに含める必要があるのではないかと思いますが、残念ながら理想的な方法はありません。
これはエラーメッセージです:
エラー MSB8020: WindowsKernelModeDriver8.1 (プラットフォーム ツールセット = 'WindowsKernelModeDriver8.1') のビルド ツールが見つかりません。WindowsKernelModeDriver8.1 ビルド ツールを使用してビルドするには、[プロジェクト] メニューをクリックするか、ソリューションを右クリックして、[VC++ プロジェクトの更新...] を選択します。WindowsKernelModeDriver8.1 ビルド ツールを使用してビルドするには、WindowsKernelModeDriver8.1 をインストールします。C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets 44 5 ndisprot630
c - NDIS フィルターが NdisFSendNetBufferLists を使用するには、FilterSendNetBufferLists ハンドラーが必須ですか?
皆さん、WinPcap を NDIS6 プロトコルから NDIS6 フィルターに移植しています。ほぼ完成しましたが、まだいくつか質問があります。
ndislwf のコメントには、「FilerSendNetBufferList ハンドラーを提供しないフィルターは、それ自体で送信を開始することはできません」とありました。NdisFSendNetBufferLists 関数を使用した場合、FilerSendNetBufferList ハンドラーを提供する必要があるということですか? 私のドライバーは、NdisFSendNetBufferLists によって自己構築されたパケットを送信しますが、他のプログラムの送信パケットをフィルター処理したくありません。
FilterReturnNetBufferLists と同様に、「FilterReturnNetBufferLists ハンドラーを提供しないフィルターは、それ自体で受信指示を発信することはできません」と述べています。「受信指示を発信する」とはどういう意味ですか? NdisFIndicateReceiveNetBufferLists または NdisFReturnNetBufferLists またはその両方? また、私のドライバーでは、返されたパケットではなく、受信したパケットのみをキャプチャしたいと考えています。したがって、可能であれば、パフォーマンスの目的で FilterReturnNetBufferLists 関数を提供したくありません。
別の類似したケースは FilterOidRequestComplete と NdisFOidRequest です。実際、フィルター ドライバーは、他のユーザーから送信された Oid 要求をフィルタリングするのではなく、NdisFOidRequest によって Oid 要求自体を送信したいだけです。FilterOidRequest、FilterCancelOidRequest、および FilterOidRequestComplete を NULL のままにできますか? または、NdisFOidRequest を使用するために必要なものはどれですか?
どうも。
c - NDIS フィルター ドライバーの FilterReceiveNetBufferLists ハンドラーが呼び出されないのはなぜですか?
みんな。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 への移植に関するドキュメントしか見つかりませんでした。
ありがとう。
c - NDIS フィルター ドライバーの FilterReceiveNetBufferLists ハンドラーが呼び出されない
NDIS フィルター ドライバーを開発してFilterReceiveNetBufferLists
いますが、特定の条件下 (Wireshark を開くか、その [インターフェイス リスト] ボタンをクリックするなど) では呼び出されない (ネットワークがブロックされている) ことがわかります。しかし、キャプチャを開始すると、FilterReceiveNetBufferLists
正常になります (ネットワークが復元されます)。これは非常に奇妙です。
WinPcap ドライバー (NPF_IoControl の BIOCQUERYOID & BIOCSETOID スイッチ ブランチ) の OID 発信元NDIS_STATUS_FAILURE
の関数に手動で戻ると、ドライバーがネットワークをブロックしないことがわかりました (また、winpcap は機能しません)。NdisFOidRequest
NdisFOidRequest
呼び出しに何か問題がありますか?
OID 要求を発信する Packet.c の DeviceIO ルーチン:
3 つのフィルター OID ルーチン: