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;