您的位置:首页 > 其它

VC判断系统和进程是64位还是32位

2014-02-27 10:43 633 查看
//判断操作系统是64位还是32位

//返回TRUE位64位,返回FALSE位32位

///////////////////////////////////////////////////////////////////////////////////////

方法一:

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) 

    { 

        fnIsWow64Process(GetCurrentProcess(),&bIsWow64);

    } 

    return bIsWow64; 

}

 

方法二:

BOOL GetOSVerIs64Bit()

{

 BOOL bRet=FALSE;

 SYSTEM_INFO si;

 typedef VOID(__stdcall*GETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo);

 GETNATIVESYSTEMINFO fnGetNativeSystemInfo;

 fnGetNativeSystemInfo=(GETNATIVESYSTEMINFO)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetNativeSystemInfo");

 if (fnGetNativeSystemInfo!=NULL)

 {

  fnGetNativeSystemInfo(&si);

  if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||   

   si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )

  { 

   bRet=TRUE;

  }

 }

 return bRet;

}

 

//////////////////////////////////////////////////////////////////////////////

//判断进程是64位还是32位

//返回1为64位,返回0为32位

////////////////////////////////////////////////////////////////////////////////

int GetProcessIsWOW64(HANDLE hProcess)

{

 int nRet=-1;

 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); 

 LPFN_ISWOW64PROCESS fnIsWow64Process; 

 BOOL bIsWow64 = FALSE; 

 BOOL bRet;

 DWORD nError;

 fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle(L"kernel32"),"IsWow64Process"); 

 if (NULL != fnIsWow64Process) 

 { 

  bRet=fnIsWow64Process(hProcess,&bIsWow64);

  if (bRet==0)

  {

   nError=GetLastError();

   nRet=-2;

  }

  else

  {

   if (bIsWow64)

   {

    nRet=1;

   }

   else

   {

    nRet=0;

   }

  }

 } 

 return nRet; 

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: