問題タブ [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.
device-driver - WinXPe NDIS 5.1 デバイス ドライバー IPv6
WinXPe NDIS 5.1 デバイス ドライバーの書き込み。DDK からの Intel E100 ドライバー ソースから開始し、Altera の 3 倍速イーサネット コアに適応します。スキャッター ギャザー DMA を介してパケットを受信すると、良好なデータが表示されます。別のスキャッター ギャザー DMA を介してパケットを送信すると、正常に動作していると主張されます。問題は、ipconfig が NIC の IPv6 のみの IP アドレスを表示することです。コントロール パネル、ネットワーク構成、インターネット プロトコルでは、静的 IPv4 IP アドレスが設定されており、DHCP は設定されていません。しかし、ipconfigはそれを認識しません。WinXPe に IPv6 と IPv4 について何かを伝えるように見える OID が見つかりません。コントロール パネルのネットワーク構成は、イーサネットの接続と切断について正しく更新されますが、ipconfig を満足させるものはないようです。ipconfig はどこで IPv6 情報を取得し、ドライバーはどのように影響しますか? ありがとう。
split - 分割NDIS_BUFFER(WDK)
私はドライバープログラミングに不慣れで、おそらく単純な問題の解決策を見つけることができません。wdkの例からndis_protサンプルドライバーを編集しています。現在、パケットはIrpとしてドライバーに送られ、pNdisBufferに格納されます。そのバッファを2つの部分(pNdisBuffer1とpNdisBuffer2)に分割する必要があります。最初にヘッダーを入力し、次にデータを入力して、両方をpNdisPacketにチェーンします。それについての記事はほとんどありませんが、私はこれの例を見つけることができません。ここで説明されているように可能であるはずです
http://blogs.msdn.com/b/ntdebugging/archive/2008/09/19/ndis-part-1.aspx
しかし、wdk(コード)の例を見たいと思います。
PS:なぜ私がこれをする必要があるのか、それを別のものに変えようとするのかと聞かないでください。それはそのように行われなければなりません。手伝ってくれませんか。
windows - NDIS 軽量フィルターをインストールするには、OS の再起動が必要です
NDIS 6.0 軽量フィルターを動的にロードし、後でアンロードするツールを開発しようとしています。問題が発生しました。一部のシステムでは、フィルターのインストール後に再起動が必要です。(INetCfgClassSetup:Install は 0x4A020 NETCFG_S_REBOOT を返します)。ドライバーが読み込まれません。しかし、他のシステムはドライバーをすぐにロードし、すべてが正常に機能します。軽量フィルターは、WinDDK の src\network\ndis\filter にあるサンプルとほぼ同じです。私の推測では、軽量フィルターは OS の再起動を必要とせずにロードされるはずです。これは有効な仮定ですか?はいの場合、再起動が必要なシステムをトラブルシューティングするにはどうすればよいですか?
wireless - その場でWindowsのワイヤレス省電力を無効にする方法は?
ワイヤレスの省電力に問題があります。現在の電源プランで、ワイヤレス アダプター設定の省電力モードを最大パフォーマンスに設定すると、すべての問題が解消されます。ただし、これはバッテリーの寿命に影響を与えます。そのため、プログラムの実行中にのみ、Wi-Fi の省電力をプログラムでオフにする方法を見つけたいと考えています。
OID_DOT11_POWER_MGMT_REQUEST を設定しようとしましたが、NDIS_STATUS_INVALID_OID を意味する 0xC0010017 で失敗しました。ただし、クエリは問題ありません。
もう 1 つの方法は、現在の電源設定を変更することですが、プログラムの実行中にユーザーが電源設定を切り替えると、問題と混乱が生じる可能性があります。
ここの達人はもっと良い方法を知っていますか? 前もって感謝します。
windows - hr0x800f0203デバイス情報セットまたは要素にドライバーが選択されていません
まだLWFドライバーのインストールに取り組んでいます。私は近くにいると思いますが、このエラーが発生しています:
"hr0x800f0203デバイス情報セットまたは要素にドライバーが選択されていません。"
SetupCopyOEMInfA関数を使用して、INFと必要なコンポーネントをコピーしていることを確認しています。前にデバイスにロックがあり、その後のリリースでは、長さの投稿を省略しています。pncClassSetup->Install関数でエラーがスローされています。これはおそらく、componentIdが間違っているためですが、見つけた例でMAX_PATHと比較されているのを見て、INFファイルだと思いました。私が取り組んできた例は次のとおりです。
http://www.boudrand.net/index.php?option=com_content&view=article&id=5 http://stackoverflow.com/questions/10308583/programmatically-installing-ndis-filt er-driver
誰かが何か洞察を持っているなら、私はそれを大いに感謝します!
ioctl - ユーザー モードからの NDIS OID クエリ
WinXPe 用の NDIS 5.1 ドライバーを作成しています。通常の NDIS 送受信機能に加えて、ドライバーは、おそらくカスタム OID のセットを介して、いくつかの個別の IO 値をユーザー プロセスで使用できるようにする必要もあります。Web 上の情報は、IOCTL_NDISUIO_OPEN_DEVICE を示しており、IOCTL_NDISUIO_QUERY_OID_VALUE は完璧ですが、これらの機能は WinXPe ではなく Windows CE に限定されているようです。"\\.\\NdisUio" への CreateFile は成功しますが、IOCTL_NDISUIO_OPEN_DEVICE はコード (50) "要求がサポートされていません" で失敗します。さらに、nuiouser.h は通常の SDK では利用できないため、自分のプロジェクトに nuiouser.h を入れるためだけにチートをしなければなりませんでした。WMI はカスタム パラメータではなく「標準」パラメータのみをサポートしているように見えるため、WMI は役に立たないようです。
必要に応じて、IoCreateDevice と IoCreateSymbolicLink を NDIS ドライバーに実装し、カスタム IOCTL をユーザー プロセスで使用できるようにすることができると思います。しかし、可能であれば、OID ルートを使用したいと思います。
WinXPe ユーザー プロセスは NDIS OID クエリを実行できますか?
visual-studio - NDIS とミニポート ドライバー
Visual Studio 2012 で提供されている WDK ツールを使用して、イーサネット ドライバーを変更しようとしています。
WDK で提供されるサンプルは、特に「ミニポート アダプター」と「NDIS 軽量フィルター」です。私はまだドライバーを書き始めたばかりなので、コードをナビゲートするのは難しいと感じています。
Visual Studio 2012 でビルドした後、ミニポート アダプターをインストールできました [ネットワーク アダプター リストに「Microsoft Virtual Miniport Adapter」として表示されます]。IP アドレスとサブネット マスクも割り当てることができます。これが私のPC上の物理デバイスに接続されていないことを確認してください]。
また、アダプタからのドライバ メッセージをチェックするために、'Debug View' ソフトウェアをセットアップしました。[コードで 'DbgPrint' ステートメントを使用してビルドしました]。
1- メッセージが何度も出力されるのはなぜですか? メッセージは、プログラムの「datapath.c」ファイルからのもので、関数「MPSendNetBufferLists」からのものです。[「Net Buffer」は、ネットワーク上で送受信されるデータを指定します。]
2- Wireshark をセットアップしてアダプター上のデータをキャプチャすると、そこから ARP、HTTP、SSDP、MDNS などからの要求があることがわかります。アダプターと実際に通信しているものを理解できませんか? どうすれば話さないようにできますか?
「ping」を使用して、アダプターに割り当てた IP アドレスに接続があるかどうかを確認できます。アダプターは、すべてのパケットが送信され、パケット損失がなかったことを示す成功を返します。
私の目標は、IP アドレスを介してこのイーサネット アダプターに「データ」パケットを送受信することです。つまり、アダプタに割り当てられた IP アドレスにアプリケーションを接続して、それと通信する必要があります。
3- WDK で提供されているサンプルで実際に実行できますか?
その他の提案やアドバイスは大歓迎です。
PS- Visual Studio 2012 に組み込まれている Windows デバッガーを使用できませんでした。2 台の PC を使用し、「ターゲット」PC に接続してドライバーをインストールすることはできましたが、ブレークポイントなどで何もできませんでした。コードと「ターゲット」PC にドライバーをインストールした後、プログラムは何もしませんでした。これに関する提案はありますか?ドライバーの段階的なデバッグもできると思いました[私が間違っていることはわかっています]。
ありがとうアディティア
ndis - XP OS で NDIS ミニポート ドライバーがクラッシュした原因
Windows DDK のサンプル 'passthru' に基づいて単純なパケット フィルター ドライバーを作成しました。フィルター機能をオンにすると、OS がクラッシュし、WinDbg から次のメッセージが表示されました。
Microsoft (R) Windows Debugger バージョン 6.12.0002.633 X86 Copyright (c) Microsoft Corporation. 全著作権所有。
Loading Dump File [D:\iCheckTool\dump\MEMORY.DMP] Kernel Summary Dump File: カーネルアドレス空間のみ利用可能
警告: パス要素の先頭にある空白記号の検索パスは次のとおりです: D:\iCheckTool\dump; SRV*E:\DebuggingSymbols*http://msdl.microsoft.com/download/symbols;SRV*C:\MyLocalSymbols*http://192.168.20.25/zfprisymbols/ 実行可能な検索パス: Windows XP Kernel Version 2600 (Serviceパック 3) MP (2 procs) 無料 x86 互換 製品: WinNt、スイート: TerminalServer SingleUserTS ビルド: 2600.xpsp_sp3_qfe.120504-1617 マシン名: カーネル ベース = 0x804d8000 PsLoadedModuleList = 0x8055e720 デバッグ セッション時間: Tue Sep 11 09:41: 02.828 2012 (UTC + 8:00) システム稼働時間: 0 日 0:02:30.578 カーネル シンボルの読み込み .......................................... ................................................................................... ................................................... ユーザーシンボルの読み込み PEBページアウトされます (Peb.Ldr = 7ffd800c)。「.hh dbgerr001」と入力します
- *
- バグチェック分析 *
- *
詳細なデバッグ情報を取得するには、!analyze -v を使用します。
バグチェック C5、{4、2、1、8054c10f}
おそらく原因: Pool_Corruption ( nt!ExDeferredFreePool+109 )
補足: Pool_corruption
1: kd> !analyze -v
- *
- バグチェック分析 *
- *
DRIVER_CORRUPTED_EXPOOL (c5) 高すぎる割り込み要求レベル (IRQL) で、ページング可能な (または完全に無効な) アドレスにアクセスしようとしました。これは、システム プールを破損したドライバーが原因です。新しい (または疑わしい) ドライバーに対してドライバー検証ツールを実行し、原因が見つからない場合は、gflags を使用して特別なプールを有効にします。引数: Arg1: 00000004、メモリ参照 Arg2: 00000002、IRQL Arg3: 00000001、値 0 = 読み取り操作、1 = 書き込み操作 Arg4: 8054c10f、メモリを参照したアドレス
デバッグの詳細:
BUGCHECK_STR: 0xC5_2
現在_IRQL: 2
FAULTING_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxDEFAULT_BUCKET_ID: DRIVER_FAULT
PROCESS_NAME: explorer.exe
trap_frame:b42555dc-(.trap 0xffffffffbb4255555555555555555555555555555555555555555555555555555502 EAX = 89CC1C60 EBX = 89E4DED8 ECX = 000001FF EDX = 89CC2A78 ESI = 80565D20 EDI = 855555555555555555555555555555555555555555555555555555 cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010297 nt!ExDeferredFreePool+0x109: 8054c10f 895f04 mov dword ptr [edi+4],ebx ds:0023:00000004=???? ???? デフォルトのスコープのリセット
LOCK_ADDRESS: 8055c4e0 -- (!locks 8055c4e0)
リソース @ nt!PiEngineLock (0x8055c4e0) 利用可能な競合カウント = 1 1 合計ロック
PNP_TRIAGE: ロックアドレス: 0x8055c4e0 スレッド数: 0 スレッドアドレス: 0x00000000 スレッド待機: 0x0
LAST_CONTROL_TRANSFER: 8054c10f から 80545768 へ
STACK_TEXT: b42555dc 8054c10f badb0d00 89cc2a78 b8338538 nt!KiTrap0E+0x238 b4255690 8054c75f 00000001 8055c100 00020019 nt!ExDeferredFreePool+0x109 b42556d0 8058635e 899522e8 00000000 b42557d8 nt!ExFreePoolWithTag+0x47f b42556fc 805878b8 c0000023 00000007 8058758c nt!PiGetDeviceRegistryProperty+0x108 b425578c bf879f40 8a523030 00000001 00000100 nt!IoGetDeviceProperty +0x25e b42558f8 bf879735 00000000 e1b5e008 00000000 win32k!DrvEnumDisplayDevices+0x33b b425591c 8054268c 00000000 00000000 0007ecc4 win32k!NtUserEnumDisplayDevices+0x7c b425591c 7c92e514 00000000 00000000 0007ecc4 nt!KiFastCallEntry+0xfc WARNING: Frame IP not in any known module. 次のフレームは間違っている可能性があります。0007f010 00000000 00000000 00000000 00000000 0x7c92e514
STACK_COMMAND: kb
FOLLOWUP_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxSYMBOL_STACK_INDEX: 1
SYMBOL_NAME: nt!ExDeferredFreePool+109
FOLLOWUP_NAME: Pool_corruption
IMAGE_NAME: Pool_Corruption
DEBUG_FLR_IMAGE_TIMESTAMP: 0
MODULE_NAME: Pool_Corruption
FAILURE_BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
補足: Pool_corruption
この問題の原因と修正方法を教えてもらえますか? ありがとう。
windows-7 - WinXP/7 上の NDIS との通信
1Gbit イーサネット経由で PC に接続されたデバイスがあります。WinXP/7 次の方法でデータをキャプチャしたい:
- PC がデバイスにコマンドを送信 (データ取得を開始)
- デバイスは PC にデータを送信しています
- ユーザーアプリケーションは取得を待ちます
- ドライバはメモリにデータを保存します
- デバイスが取得完了を通知するコマンドを送信
- ドライバーが割り込みを生成し、ユーザー アプリケーションがドライバーからのデータの読み取りを開始します。
それを実装する方法がわかりません。NICドライバがあります。NDISがあります。ユーザー アプリケーションは NDIS と通信できますか? NDIS と通信するために追加のドライバーを作成する必要がありますか?
linux - Linux の NDIS フィルターの類似物は何ですか?
Linux で可能な限りシステムに取り組んでおりas close to real-time
、特定のパケットを受信したらすぐに TCP パケットで約 600 ~ 800 バイトを送信する必要があります。
可能な限り最高のレイテンシーを得るには、受信したパケットがユーザー空間とアプリケーションに到達してから戻るのではなく、このパケットをカーネルから直接送信する必要があります。
私がWindowsを使用していた場合、送信するパケットと一致するパラメーターをキャッシュするNDISフィルターを作成して、受信したパケットをチェックし、一致すると、事前にキャッシュされたパケットを通過せずにネットワークに送信します上位層までの受信パケット。
私の質問は、Linux の NDIS フィルターに最も近いものは何ですか?
私は netfilter について読んだことがあり、おそらくそれを使用するでしょうが、それが可能な限り最良の方法であるかどうかはわかりません.
可能な限り低いレイテンシを達成するために他に何ができますか?
私の現在の純粋なユーザー空間コードは、2.6.3x カーネルで Ubuntu 10.04 を実行している Intel Xeon 3.7 GHz プロセッサで約 80 ~ 100 マイクロ秒を提供します。