2

我正在制作一个名为 Pwn16 的程序。它通过模拟 Intel 8086/Pentium 处理器和 DOS/Win3.x/Win98 系统,允许 16 位应用程序在 64 位系统上运行。Pwn16 使用一个小型加载程序来检测 Windows 何时给出“不兼容 16 位”消息(包括来自 CMD 的消息),当它注意到所述消息被召唤时,它将关闭它并自动启动 Pwn16。是否有任何库可以让我“捕获”这些消息并做其他事情来代替错误?我在 VB6 中完成了大部分工作,因此任何可以做到这一点的代码也会有所帮助。我已经完成了仿真和 GUI,我只需要完成这个加载程序即可完成它。我需要捕获的消息:

“此文件的版本与您运行的 Windows 版本不兼容。检查您计算机的系统信息以查看您是否需要 x86(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 回答