获取Windows体系结构(32/64位版本)

2024-01-02

我有一个小问题:

我正在尝试获取操作系统的体系结构,问题是我的编程语言不支持此类功能。因此我需要从 Windows dll 中读取此信息(如 kernel32.dll)
我确实尝试获取有关功能的信息GetNativeSystemInfo/GetVersionEx/GetSystemInfo.
不幸的是我无法获得架构:/

是否还有其他一些函数可以读取 Windows dll 中的体系结构?
(它不需要是kernel32,它可以是任何dll,但它必须存在于win xp+中)

作为信息:我正在使用 Gupta(SQL Windows/团队开发人员)

Edit1:

typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    struct {
      WORD wProcessorArchitecture;
      WORD wReserved;
    } ;
  } ;
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO;

这就是来自的信息MSDN http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx,我尝试使用 10 和 12 个参数调用此函数 (古普塔不支持结构)。
在 32 位上我得到:
替代文本 http://img714.imageshack.us/img714/1954/32bit.gif http://img714.imageshack.us/img714/1954/32bit.gif

在 64 位上我得到:
替代文本http://img691.imageshack.us/img691/8978/64bit.gif http://img691.imageshack.us/img691/8978/64bit.gif

我每次都会得到032 位 OemID?或者更好的是每次在 64 位版本的 Windows 上填写 OemID?

谢谢帮助!!

Greets
Auro


GetNativeSystemInfo http://msdn.microsoft.com/en-us/library/ms724340(VS.85).aspx肯定是要使用的功能。如果您的应用程序是本机 64 位应用程序,GetNativeSystemInfo是相同的GetSystemInfo http://msdn.microsoft.com/en-us/library/ms724381(VS.85).aspx;否则,如果它在WOW64下运行,它将返回真实的系统属性,即使它是在模拟的32位环境中运行。

GetNativeSystemInfo填充一个SYSTEM_INFO http://msdn.microsoft.com/en-us/library/ms724958(VS.85).aspx结构, 的wProcessorArchitecture其中的成员告诉你系统是否是32位的(可能是PROCESSOR_ARCHITECTURE_INTEL)或 64 位(可能PROCESSOR_ARCHITECTURE_AMD64).

如果您的语言没有此 Win API 函数的包装器,要使用它,您可以使用LoadLibrary and GetProcAddress像往常一样,您需要定义SYSTEM_INFO当然是结构。

Update

我会定义

typedef struct _SYSTEM_INFO {
  WORD      wProcessorArchitecture;
  WORD      wReserved;
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO;

Then wProcessorArchitecture = 0在(通用)32 位系统上,以及wProcessorArchitecture = 9在(通用)64 位系统上。这些只是常数PROCESSOR_ARCHITECTURE_INTEL and PROCESSOR_ARCHITECTURE_AMD64, 分别。这些是常见的 32 位和 64 位架构。PROCESSOR_ARCHITECTURE_IA64 = 6稍微不常见一点,确实如此PROCESSOR_ARCHITECTURE_UNKNOWN = 65535.

Update

是的,我看到你的问题了。在C中,union意味着你选择one一次的选项。也就是说,该结构是

DWORD     dwOemId;
DWORD     dwPageSize;
LPVOID    lpMinimumApplicationAddress;
LPVOID    lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD     dwNumberOfProcessors;
DWORD     dwProcessorType;
DWORD     dwAllocationGranularity;
WORD      wProcessorLevel;
WORD      wProcessorRevision;

or

WORD      wProcessorArchitecture;
WORD      wReserved;
DWORD     dwPageSize;
LPVOID    lpMinimumApplicationAddress;
LPVOID    lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD     dwNumberOfProcessors;
DWORD     dwProcessorType;
DWORD     dwAllocationGranularity;
WORD      wProcessorLevel;
WORD      wProcessorRevision;

由于一个 DWORD 由与两个字 (2×2) 一样多的字节 (4) 组成,因此替代方案只是对整个结构的数据进行寻址(和命名)的两种方式。就我们而言,我们更感兴趣的是wProcessorArchitecture单词而不是增强dwOemId of wProcessorArchitecture以及完全无趣的wReserved words.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取Windows体系结构(32/64位版本) 的相关文章

随机推荐

  • 编辑 swf 文件中的动作脚本

    我已经尝试了 10 个小时来编辑这个 swf 文件 它看起来与反编译器中的预期完全一样 但是当我将其导出到闪存时 它是一个空白画布 并且我无法访问操作脚本 我想做的只是在动作脚本中编辑一些东西 我什至不碰电影 有没有更简单的方法来做到这一点
  • Android Studio,logcat 在应用程序关闭后清理

    自从 Android Studio 更新 1 2 Beta 以来 我的 logcat 遇到了问题 当我运行我的应用程序时 它会像平常一样记录所有内容 然后我的应用程序崩溃了 应用程序说 不幸的是 游戏已停止 几秒钟后 Android 会关闭
  • 使用 Jquery 更改页面标题

    如何进行动态变化
  • trac-admin /path/to/myproject initenv

    我的 Trac 有问题 我无法创建新项目 在这里 在 path to myproject 中 我应该写什么来代替它 事实上 我的项目路径是 C Users Programmer BitNami Trac Stack 项目 每次它在 BitN
  • C# 析构函数的使用示例

    我正在阅读有关 C 中的析构函数的内容 但我无法为其找到合适的用例 有人可以提供一个用法示例并进行解释吗 非常非常感谢 Update书中的代码示例实现了 Destructor 和 Dispose 方法 请参阅书中的代码片段 class My
  • Pandas 按索引计数分组和排序

    假设我有这个数据框 d Path abc abc ghi ghi jkl jkl Detail foo bar bar foo foo foo Program prog1 prog1 prog1 prog2 prog3 prog3 Valu
  • Spark union 因嵌套 JSON 数据帧而失败

    我有以下两个 JSON 文件 name Agent1 age 32 details d1 1 d2 2 name Agent2 age 42 details 我带着火花读了它们 val jsonDf1 spark read json pat
  • GWT + Google 地图 API v3

    我的 GWT 项目中需要 Google Maps API v3 调用 更具体地说 是 Google 地图和 DirectionServices 等地点的自动完成功能 我们已经尝试了 2 种方法来获取 v3 访问权限 但没有一种方法令人满意
  • 在 .NET 正则表达式中,将零宽度正前瞻断言与其他搜索项相结合

    我需要解析一个具有多行标题 任意数量的多行详细信息和多行页脚的文件 每个细节都以一个模式开始 页脚也以一个模式开始 假设每个细节都以 detail 开头 页脚以 footer 开头 我可以通过以下方式成功找到每个细节 s detail de
  • 内插弧度角?

    如果给定的起始角度为 1 0f 结束角度为 6 0f 那么我真正想要插值的不是 1 和 6 之间的 5 而是较小的部分 这将导致逆时针插补 插值时如何考虑这一点 本质上 当给定从 0 到 6 283 的 2 个弧度角时 我如何知道是否应该根
  • 调试时编辑 C#

    我知道我以前处理过这个问题 但覆盖这个问题的设置似乎总是在变化 我在 Visual Studio 2008 中有一个 C 项目 当我调试时 VS 不允许我编辑代码 我不想编辑并继续 我只想为我的下一个版本进行更改 编辑并继续被禁用 当我在调
  • gSOAP 中的动态数组以 C++ 方式使用 STL 向量而不是 __ptr/__size?

    我正在使用 gSOAP 2 8 8 开发 Web 服务 我想发送自定义数据类型的无界序列 我可以通过以下方式实现这个gSOAP 用户指南第 11 11 节 http www cs fsu edu engelen soapdoc2 html
  • WPF:一个文本框,按下 Enter 键时会触发一个事件

    而不是附加一个PreviewKeyUp事件与每个TextBox在我的应用程序中 检查按下的键是否是 Enter 键 然后执行操作 我决定实现一个扩展版本TextBox其中包括一个 DefaultAction 事件 该事件在按下 Enter
  • CSS ul li 子弹消失[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的网页中
  • 如何在Android上为Room库设置混淆规则

    在我的应用程序中我想使用Room使用库database 最后为生成APK我启用minify选项 proguard in Build Gradle 我使用以下版本的 Room 库 implementation android arch per
  • CodeIgniter:所有 $this->db->query() 方法调用的 SQL 审计?

    我正在使用 CodeIgniter 2 并且想要审核所有 this gt db gt query sql calls 我们所有的数据库调用都是通过 query 方法 没有活动记录使用情况 我需要记录 sql 查询并将它们输入到自定义表中以用
  • WPF 惯用手与弹出窗口

    我刚刚将我的电脑从 Windows 7 迁移到 Windows 8 在运行我们的 WPF 应用程序时 我注意到我们的 WPF 弹出窗口和 或工具提示现在默认位于左下角 而不是正常的右下角 有人注意到这一点吗 我知道您可以在 xaml 中的每
  • 从字符串加载.Net中的Jira公共证书(如何将ASN.1编码的SubjectPublicKeyInfo转换为.Net中的X509证书)

    我正在构建一个 oauth 1 0a 服务 该服务将由 Jira 中的小工具使用 它是一个用 C 编写的 Net 3 5 应用程序 Jira 使用 RSA SHA1 签名方法向此服务发出请求 这意味着要验证请求的签名 我需要从其公共证书创建
  • TransactionTooLargeException 仅适用于 Nougat [重复]

    这个问题在这里已经有答案了 我开发了一款在 Android 版本低于 Nougat 的设备上运行良好的应用程序 当我在带有 Nougat 的设备上启动应用程序并按主页按钮时 应用程序崩溃 并且在 logcat 中我有 FAILED BIND
  • 获取Windows体系结构(32/64位版本)

    我有一个小问题 我正在尝试获取操作系统的体系结构 问题是我的编程语言不支持此类功能 因此我需要从 Windows dll 中读取此信息 如 kernel32 dll 我确实尝试获取有关功能的信息GetNativeSystemInfo Get