2

Pwn16というプログラムを作っています。Intel 8086/Pentium プロセッサと DOS/Win3.x/Win98 システムをエミュレートすることにより、16 ビット アプリケーションを 64 ビット システムで実行できます。Pwn16 は、Windows が「16 ビット互換ではない」メッセージ (CMD からのメッセージを含む) を表示したことを検出する小さなローダー プログラムを使用し、そのメッセージが呼び出されたことに気付くと、それを閉じて、代わりに自動的に Pwn16 を起動します。これらのメッセージを「キャプチャ」して、エラーの代わりに別のことを実行できるライブラリはありますか? 私はこれのほとんどを VB6 で作成しているので、これを実行できるコードも役に立ちます。エミュレーションと GUI を停止しました。あとはこのローダーを完成させるだけです。キャプチャする必要があるメッセージ:

「このファイルのバージョンは、実行中の Windows のバージョンと互換性がありません。コンピューターのシステム情報をチェックして、プログラムの x​​86 (32 ビット) または x64 (64 ビット) バージョンが必要かどうかを確認してから、ソフトウェアの発行元に連絡してください。」

「サポートされていない 16 ビット アプリケーション: 64 ビット バージョンの Windows との互換性がないため、プログラムまたは機能 '(ファイル)' を開始または実行できません。64 ビット Windows 互換バージョンが利用可能かどうかについては、ソフトウェア ベンダーにお問い合わせください。」

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

「(ファイル) アプリケーションは Win32 モードでは実行できません。」

ありがとう。

4

1 に答える 1

2

私の知る限り、Explorer も cmd.exe も実行ファイルの有効性を事前にチェックしていません。代わりに、CreateProcessを呼び出し、失敗した場合は、返されたエラー コードを調べます。

そのため、 CreateProcess (またはおそらく基になるネイティブ API ) への呼び出しをフックすると、Explorer/cmd.exe/whatever に返されるエラー コードをキャプチャして、代わりに処理を実行できるはずです。

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

于 2012-02-09T03:07:53.133 に答える