从 32 位到 64 位

Posted

技术标签:

【中文标题】从 32 位到 64 位【英文标题】:Going from 32-bit to 64-bit 【发布时间】:2012-08-06 17:58:29 【问题描述】:

细节: VC++ 7;程序在 XP 上运行,但在 Win7 上崩溃;使用 VS2003.NET 开发(老我知道,但这是我必须使用的,它工作得很好,非常感谢)

我有一个在 XP(32 位)上运行良好的程序。但是,我最近用 Win7 对其进行了测试,各种杂乱无章。我强烈怀疑我的程序如何处理注册表项。

注意:程序不会创建或销毁键,只会查询键并返回有趣的值。 (“有趣”如下所述)

在最简单的形式中,程序从 SCSI 连接设备读取数据,并将数据保存到主机 PC 上的文件中。程序查询 SCSI 适配器的注册表并返回程序用来访问设备的适配器 ID。

在我看来,从 XP 到 Win7 的注册表结构并没有改变,但不是 100% 确定的。任何对此的见解都会很棒:)

另外,我读到:http://www.techsupportalert.com/content/how-windows7-vista64-support-32bit-applications.htm Win7 做事的方式就像一种反射。这会改变我应该如何查询密钥吗?如果是这样,任何有关如何构造查询的信息都会很棒。

我想我需要知道的是:

是否像在 RegQueryValueEx 方法中更改 hKey(或 lpValueName)一样简单? 或者这是否意味着我需要更改 RegQueryValueEx 方法的其他方面? 或者完全是别的什么?

提前谢谢你!

【问题讨论】:

你没有更多信息然后“它崩溃了”吗?您应该能够(至少在 Win7 机器上进行调试构建)更好地了解它在何处以及如何表现不同。具体哪些 API 调用失败。 啊。我已经放弃了那部分......截至目前,我只允许在 Windows 7 盒子上进行测试......>:|我的困境的一部分,但我正在努力让开发人员获得特权。繁文缛节 sigh 因此,我没有真正的调试权限......而且由于我们的管理员处理事情的方式,我无法在机器上运行调试版本,嗯? 至于用户在程序中点击 SCSI 设备时“崩溃”,windows 抱怨出现错误,想知道我是否要报告它...lol 如果只有我居然可以让它向我报告!哈哈。无论如何......程序只是关闭。 ...而且我通常必须重新登录才能让程序再次打开... 也许看看这个:***.com/questions/1547211/… @rene 我喜欢 - MiniDumpWriteDump 方法看起来会是一个非常有用的工具。谢谢你。不过,我仍在寻找有关注册表的更多信息。 【参考方案1】:

首先在您自己的机器上通过Application Verifier 运行您的应用程序是值得的。特别感兴趣的是LuaPriv 部分,它将突出显示您的应用程序正在执行在 Vista 或 Win-7 中无法正常运行的操作的实例。这应该可以捕捉到您可能正在咨询与 XP 不同的注册表位置的任何时间。

需要注意的一点是,如果您正在读取由另一个应用程序创建的注册表项,那么它们可能位于不同的位置,例如在 32 位或 64 位视图中,或者虚拟化到每个- 用户位置(如果一个进程运行时认为它可以在任何地方写入,但没有管理员权限,则通常会发生这种情况,因此 Windows 会将注册表写入沙箱到虚拟化区域)。

【讨论】:

以上是关于从 32 位到 64 位的主要内容,如果未能解决你的问题,请参考以下文章

从16位到32位再到64位,为何16年过去,依然没有128位系统出现?

32 位到 16 位浮点转换

线性 PCM 16 位到 8 位

位到十进制转换的集合

如何读取和写入位到字节数组

NEON 加速 12 位到 8 位