c# - 拦截与获取Windows版本相关的API调用

标签 c# c++ c api call

我一直在玩 Homeworld 1,要运行它,您需要在 Windows NT 4 兼容模式下运行它。

Windows 8 出于某种原因没有这个,这很烦人。

使用 Microsoft Application Compatibility Toolkit 我发现 Homeworld 执行 API 调用以获取 Windows 版本,它似乎停止工作,除非它认为它在 Windows NT 上运行(使用调试器我可以看到它调用 GetVersion和 GetVersionEx)。

http://technet.microsoft.com/en-us/library/cc749574(v=ws.10).aspx

使用上面的 Microsoft Applocation Compat Toolkit 修复了这个错误,但是我在很多不同的电脑上玩这个游戏,有些不能使用上面的方法。

我有什么方法可以制作某种包装器来拦截 API 调用并使用上述链接结构返回它们,以便程序认为它在 NT 上运行?我见过很多放在文件夹中的 DLL,它可以拦截某些调用,但我不确定它们是如何工作的,我假设它们是用 C、C++ 编写的。

我真正了解的唯一语言是 C#,我认为它不能做我想做的事,所以如果有人能给我指出正确的方向,请帮忙,给我提示或指出我在哪里如果我能得到更多帮助那就太好了!

感谢您的宝贵时间!

最佳答案

您可以使用 api Hook 库,这里是 tutorial对于著名的 easyhook 库。

为您的应用程序挂接 GetVersionEx api 并返回您想要的内容。

关于c# - 拦截与获取Windows版本相关的API调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15198268/

相关文章:

c# - 以编程方式设置浏览器 cookie (Firefox)

c# - 请求新的访问 token 并重新提交 api 请求

c# - 从 C# 调用非托管 (C++) 函数时出现 PInvoke 错误

c++ - 使用 C++ 获取特定时区的当前时间

c++ - If 语句返回错误的输出 C++

c - wait() 在 Unix 上做什么?

c# - 仅当页面具有母版页时,在 IE 中单击 Microsoft Chart 控件时图像映射才可见

c++ - 当线程安全容器上有大量计算和推送/弹出时,来自 boost asio 的同步或异步更好吗?

c++ - C Header 定义顺序/位置

c++ - 在 C/C++ 中创建 Windows NTFS 目录连接时出现问题