如何判断操作系统是32位还是64位?

来源:互联网 发布:扬琴淘宝网 编辑:程序博客网 时间:2024/04/29 06:18

64位机器可以运行32/64位操作系统,而32位机器只能运行32位操作系统,这样就有一个问题,对于一个64位机器,如何判断操作系统究竟是32位还是64位呢?
   总结了一下,基本方法如下:

1.linux:
#file /sbin/init
/sbin/init: ELF <b>;32-bit</b>; LSB executable, Intel 80386......

2.hpux:
#getconf KERNEL_BITS

3.windows
#include <windows.h>
#include <stdio.h>

BOOL IsWow64()
{
     typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
     LPFN_ISWOW64PROCESS fnIsWow64Process;
     BOOL bIsWow64 = FALSE;
     fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle("kernel32"),"IsWow64Process");
     if (NULL != fnIsWow64Process)
     {
         if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
         {
             return FALSE;
         } else
             return TRUE;
     }
     return bIsWow64;
}

int main()
{
     BOOL f64;
     f64 = IsWow64();
     if (f64)
         printf("64/n");
     else
         printf("32/n");
}
主要是利用了IsWow64Process,这是一个windows api,如果进程是运行在64位系统上的32位程序,则返回TRUE,我们用32位方式编译这个程序并运行,即可判断操作系统的位数。

补充Delphi版的,写出一个函数了,直接调用~

function RunningInWow64:boolean;
type
LPFN_ISWOW64PROCESS=function(Hand:Hwnd; Isit:Pboolean):boolean; stdcall;
var
pIsWow64Process:LPFN_ISWOW64PROCESS;
IsWow64:boolean;
begin
  result:=false;
  @pIsWow64Process:=GetProcAddress(GetModuleHandle('kernel32'),'IsWow64Process');
  if @pIsWow64Process=nil then exit;
  pIsWow64Process(GetCurrentProcess,@IsWow64);
  result:=IsWow64;
end;