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;
}
相關連結: