私のソフトウェアの新しいリリースのベータテストで、何人かのユーザーがアプリの実行時に例外を報告しました。どちらの場合も、「アプリケーションを正しく起動できませんでした(0xc0000142)」です。私もそれを0xc0000005として見ました。このエラーのあるローカルシステムも見つかりました。デバッガーで実行すると、「datamngr.dll」にアクセス違反があり、ヒープへの割り当てに失敗しました。「datamngr.dll」がスパイウェアであり、システムのAppInitにあるようにロードされていることをすぐに発見しました。
AppInit regキーをクリアすると、この問題は解消されました。Process Monitorを介してチェックアウトしましたが、このDLLが挿入されるたびに、アプリケーションがクラッシュしました。ひどく書かれたスパイウェアだと思っていましたが、それ以来、他のDLLが同じことをしているのを見つけました(正規のソフトウェアであるacaptuser32.dllなど)。私にとって奇妙なのは、私のソフトウェアの以前のバージョンがクラッシュしないことです。2つのバージョンの間には多くの変更が加えられているため、それが何であるかを判断するのは困難です。
ここからどこから始めればいいですか?一部のオンライン探索では、FirefoxなどのアプリがLoadLibraryに取って代わり、DLLが挿入されないようにブラックリストに登録しています。しかし、もっと基本的なことから始めたいと思います。以前はクラッシュしなかったのに、なぜアプリケーションがクラッシュするのでしょうか。
これは非常に曖昧だと思いますが、それはかなり避けられません。私が間違って行っているプロジェクトのプロパティに明らかな何かがあることを願っています。ASLRのオンとオフ、DEPのオンとオフを試しました... user32.dllの遅延ロードを試し、LoadLibrary(エラーを無視するようにSetErrorModeを設定)を介して手動でロードしましたが、何も機能しません。これは、WindowsXPおよびWindows7(32ビットおよび64ビット)で発生します。
どこから始めればよいかについてのポインタをいただければ幸いです。他の詳細が必要な場合は、できるだけ多くの情報を提供します。
乾杯