2012-02-09 9 views
2

私はPwn16というプログラムを作っています。これにより、インテル8086/PentiumプロセッサーとDOS/Win3.x/Win98システムをエミュレートすることにより、64ビット・システム上で16ビット・アプリケーションを実行することができます。 Pwn16は、Windowsが「16ビット互換ではない」メッセージ(CMDからのメッセージを含む)を与える時を検出し、そのメッセージが召喚されたことに気がついたら、それを閉じて代わりに自動的にPwn16を起動する小型ローダプログラムを使用する。 これらのメッセージを「キャプチャ」し、エラーの代わりに何か他のことをするライブラリがありますか?私はVB6でこれを最大限に活用しているので、これを行うことができるコードも役に立ちます。私はエミュレーションとGUIをダウンしている、私はちょうどそれを完了するためにこのローダーを完了する必要があります。 メッセージキャプチャする必要がある:Windowsメッセージをトラップするにはどうすればよいですか?

"このファイルのバージョンは、実行しているWindowsのバージョンと互換性がありません。コンピュータのシステム情報を確認して、x86(32ビット)またはx64 64ビット版)のバージョンを入手し、ソフトウェアの発行元に問い合わせてください。

"サポートされていない16ビットアプリケーション:64ビットバージョンのWindowsとの互換性がないため、プログラムまたは機能 '(ファイル)'が起動または実行できない64ビットWindows互換バージョン利用可能です。"

"これは有効なWin32アプリケーションではありません。"

"(ファイル)アプリケーションをWin32モードで実行することはできません。"

ありがとうございました。

答えて

2

私が知る限り、エクスプローラもcmd.exeも、実行可能ファイルの有効性を事前にチェックしていません。代わりに、彼らはCreateProcessを呼び出し、失敗した場合は、返されたエラーコードを見てください。

したがって、hookがCreateProcess(またはおそらくthe underlying native API)を呼び出すと、Explorer/cmd.exe/whateverに返されるエラーコードをキャプチャして、代わりに処理する必要があります。

私はメッセージをキャプチャしてユーザに提示するのは役に立たないと思います。すべてのダイアログボックスと、すべてのコンソールに書き込まれたすべてのテキストを調べて、探しているメッセージが含まれているかどうかを調べる際の非効率性を除けば、ユーザーが実行しようとしていたファイルをどのように特定しますか?

関連する問題