問題のソフトウェアはネイティブ C++/MFC アプリケーションであり、UDP 経由で大量のデータを受信し、表示、サウンド出力、ディスクへの書き込みなどのためにデータを処理します。アプリケーションの CHM ヘルプ ドキュメントがヘルプ メニューから起動され、ハードウェアからデータを収集しているときにヘルプ ドキュメントをクリックしたときに、最初に問題に遭遇しました。これを再現するために、AutoHotkey スクリプトを使用して、アプリケーションの実行中にヘルプ ドキュメント内をすばやくクリックします。システムで音が発生するとすぐに、エラーが発生し始めました。
サウンドカードを完全に無効にすると、サウンド出力は明らかに無効になりますが、すべてがエラーなしで正常に処理されます。ただし、サウンドを再生すると (このアプリケーション、別のアプリケーション、またはメッセージ ボックスからのビープ音だけでも)、何千ものパケットがドロップされます (各パケットにはタイムスタンプが付けられているため、これはわかっています)。2 番目のテストとして、アプリケーションをまったく使用せず、Wireshark を使用してハードウェアからの着信パケットを監視しました。案の定、Windows でサウンドが再生されるたびに、パケットがドロップされていました。実際、サウンドがアクティブに再生されていなくてもエラーが発生するわけではありません。(DirectSound8 を使用して) バッファを作成しただけで再生を開始しない場合でも、これらのエラーが発生します。
これは、ネットワーク カード (光ファイバーと RJ45 の両方) とサウンド カード (統合カードと個別カードの両方) を複数組み合わせた複数の PC で発生します。また、NIC とサウンド カードごとに異なるドライバー バージョンも試しました。すべてのテストは、Windows 7 32 ビットで行われています。私のアプリケーションはオーディオに DirectSound を使用しているため、さまざまな CooperativeLevels (通常の操作は DSSCL_PRIORITY) を試しましたが、成功しませんでした。
この時点で、それは私のアプリケーションとは何の関係もないことを確信しており、ハードウェア ベンダーや Microsoft と取引を始める前に、この問題の原因を誰か知っているかどうか疑問に思っていました。