gpt4 book ai didi

windows - 获取 Windows 架构(32/64 位版本)

转载 作者:可可西里 更新时间:2023-11-01 10:09:38 26 4
gpt4 key购买 nike

我遇到了一个小问题:

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

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

作为信息:我正在使用 Gupta(SQLWindows/Team devoloper)

编辑1:

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 的信息,我试图用 10 和 12 个参数调用这个函数(Gupta 不支持结构)。
在 32 位上我得到:
alt text http://img714.imageshack.us/img714/1954/32bit.gif

在 64 位上我得到:
alt text http://img691.imageshack.us/img691/8978/64bit.gif

在 32 位上,我每次都得到一个 0 OemID 吗?或者更好的是在 64 位版本的 Windows 上填充 OemID everytiem?

求助!!

问候
奥罗

最佳答案

GetNativeSystemInfo绝对是要使用的功能。如果您的应用是 native 64 位应用,GetNativeSystemInfoGetSystemInfo 相同;否则,如果它在 WOW64 下运行,它将返回真实的系统属性,即使它在模拟的 32 位环境中运行也是如此。

GetNativeSystemInfo 填充一个 SYSTEM_INFO结构,其中的 wProcessorArchitecture 成员告诉您系统是 32 位(可能是 PROCESSOR_ARCHITECTURE_INTEL)还是 64 位(可能是 PROCESSOR_ARCHITECTURE_AMD64)。

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

更新

我会定义

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;

然后 wProcessorArchitecture = 0 在(普通)32 位系统上,wProcessorArchitecture = 9 在(普通)64 位系统上。这些只是常量 PROCESSOR_ARCHITECTURE_INTELPROCESSOR_ARCHITECTURE_AMD64,分别。这些是常见的 32 位和 64 位架构。 PROCESSOR_ARCHITECTURE_IA64 = 6 稍微不常见,PROCESSOR_ARCHITECTURE_UNKNOWN = 65535 肯定也是。

更新

是的,我明白你的问题了。在 C 中,union 意味着您一次选择一个选项。也就是说,结构是要么

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

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 词,而不是 wProcessorArchitecture 的扩充 dwOemId 和完全无趣的 wReserved 单词。

关于windows - 获取 Windows 架构(32/64 位版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com