0

Windows API に影響するメモリ破損のバグを見つける必要があります。基本的に、プログラムをしばらく実行した後、CreateWindowEx関数はNULLハンドルをGetLastError()返し、「ウィンドウ クラスが見つかりません」を意味する 1407 を返します。パラメータを確認したlpClassNameところ問題なく、クラスはすでに登録されていました。実際、プログラムはそのクラスの多くのウィンドウを正常CreateWindowExに作成しますが、突然新しいウィンドウの作成を拒否し、エラー 1407 を返します。このプログラムにはスレッドが 1 つしかなくUnregisterClass、問題のウィンドウ クラスが登録された後にへの呼び出しはないと確信しています。 .

USER32私たちのプログラムが何らかのWindows データ構造を破壊していると思われます。しかし、Application VerifierVisual C++ 用の Visual Leak Detector を使用して実行したところ、リークやメモリの破損は見つかりませんでした。リソースの使用率も低く、ウィンドウ ハンドルの数が 2k を超えることはなく、コミットされたメモリが 50 MB を超えることもありません。

これは、この質問のタイトルにつながります: 特定のプロセスの Windows データ構造の状態をオンデマンドまたは継続的にチェックできる Windows API または Windows 構成オプションはありますか? すでに多くのチェックを有効にして Application Verifier を使用していますが、エラーはまったく検出されません。

4

1 に答える 1

0

まったく同じパラメーターを使用して、失敗した呼び出しの直後に CreateWindowEx への新しい呼び出しを実行するハックを行いました。驚いたことに、2 回目の呼び出しは成功しました。おそらく、これはタイミングの問題に関連しています。

于 2013-03-03T18:22:17.877 に答える