[MFC] 32bit 和 64bit

32位元和64位元的電腦有許多不一樣的函式庫,所以連同系統資料夾路徑、Registry路徑等等都有區別,所以碰到有相關要處理的資料時就要特別注意。

32位元和64位元的電腦有許多不一樣的函式庫,所以連同系統資料夾路徑、Registry路徑等等都有區別,所以碰到有相關要處理的資料時就要特別注意。

 

Registry:

如果要指定存取的路徑,要代入KEY_WOW64_32KEY or KEY_WOW64_64KEY

Registry Key Security and Access Rightsregistryregistry, security

 

取得系統路徑:

我們可以利用SHGetFolderPath來取得系統檔案路徑,但是如果你是在64bit的電腦,雖然參數換成CSIDL_SYSTEMX86,他一樣會自動幫你轉導向至64bit,這時候要先切用Wow64EnableWow64FsRedirection取消轉向的功能。不過麻煩的是這個函式其實在32bit的電腦不能夠使用,所以必須先判斷函式是否存在再載入他~

BOOL EnableWow64FsRedirection(BOOL enable)
{
	typedef BOOLEAN (__stdcall *Wow64EnableWow64FsRedirection_t) (BOOL enable);

	Wow64EnableWow64FsRedirection_t wow64EnableWow64FsRedirection = (Wow64EnableWow64FsRedirection_t) GetProcAddress (GetModuleHandle (_T("kernel32")), "Wow64EnableWow64FsRedirection");

	if (!wow64EnableWow64FsRedirection)
		return FALSE;

	return wow64EnableWow64FsRedirection (enable);
}

 

判斷作業系統是否為64bit的時候也是同樣的處理方式:

BOOL Is64BitOS()
{
   BOOL bIs64BitOS = FALSE;

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

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

   if (NULL != fnIsWow64Process)
   {
      if (!fnIsWow64Process(GetCurrentProcess(),&bIs64BitOS))
      {

      }
   }
   return bIs64BitOS;
}

 

相關連結:

IsWow64Process Function

File System Redirector

 

Dotblogs 的標籤: ,,,