【问题标题】:How to determine if processor supports 64bit on a 32bit OS如何确定处理器是否在 32 位操作系统上支持 64 位
【发布时间】:2012-10-31 17:51:07
【问题描述】:

目前我正在使用:

ManagementObjectSearcher searcher = 
                   new ManagementObjectSearcher("Select * FROM WIN32_Processor");
ManagementObjectCollection mObject = searcher.Get();

foreach (ManagementObject obj in mObject)
{
  var architecture = obj.GetPropertyValue("Architecture");
}

architecture = 0

这个article 表明 0 表示 x86

计算机正在运行的处理器是intel core 2 duo E7500

操作系统是 Windows XP 32 位

CPU-Z 展示

有没有办法确定 Windows XP 计算机是否具有支持 64 位的处理器?

【问题讨论】:

标签: c# .net


【解决方案1】:

这可能并不理想,但使用 VC++ 等创建(本机)DLL 并直接查询处理器的功能相对简单。然后可以从您的 C# 应用程序中 PInvoked 此方法。

以下 C++ 方法在 64 位处理器上运行时将返回 true,在仅 32 位处理器上运行时将返回 false(无论操作系统是 32 位还是 64 位):

bool __declspec(naked) IsCPU64BitCapable()
{
    __asm
    {
        // Save EBX since it's affected by CPUID
        push ebx
        // Determine whether the CPU supports retrieving extended feature data
        mov eax, 0x80000000
        cpuid
        cmp eax, 0x80000000
        // No extended data => no 64 bit
        jbe no_extended_data
        // Request extended feature data
        mov eax, 0x80000001
        cpuid
        // Bit 29 of EDX will now indicate whether the CPU is 64 bit capable
        mov eax, edx
        shr eax, 29
        and eax, 1
        jmp extended_data
    no_extended_data:
        xor eax,eax
    extended_data:
        // Restore EBX
        pop ebx
        ret
    }
}

这个方法可以在 C# 中使用:

[DllImport("Test64Bit.dll")]
private static extern bool IsCPU64BitCapable();

【讨论】:

    【解决方案2】:

    一个简单但并非万无一失的方法是检查注册表中的 CPU,应该在HKLM\HARDWARE\DESCRIPTION\CentralProcessor\0

    类似

    var rk = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
    if (rk.GetValue("Identifier").ToString().IndexOf("64") > 0)
    {
       // Is 64 bits
    } else {
       // Is 32 bits
    }
    

    不确定这对你来说是否足够

    【讨论】:

    • 注册表设置显示x86 Family 6 Model 23 Stepping 10
    • 嗯,没错,可能是因为CPU驱动是32bit的。我想您可以从FeatureSet 注册表项中提取它(检查 LM 或 EM64T),但是该密钥非常神秘(我还没有找到有关它的具体信息),它在那里是因为驱动程序填充了它,所以它实际上可以隐藏 32 位驱动程序上的 64 位功能。对不起,在这里没有太大帮助:/
    【解决方案3】:

    这个kb article 可能会描述您所看到的内容。建议的解决方法是进入注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI,在该注册表项下将有一个带有处理器友好名称的键。您可以根据友好名称是包含 Intel64 还是 x86 来推断架构。

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2014-05-27
      • 2011-10-16
      • 2016-05-08
      • 2013-08-29
      相关资源
      最近更新 更多