當前位置:首頁 » 密碼管理 » 32位程序訪問64位注冊表

32位程序訪問64位注冊表

發布時間: 2022-08-31 11:45:41

Ⅰ 如何將32位的文件轉換為64位的

摘要 把32位的注冊表文件轉換為64位的方法:

Ⅱ 32位操作系統怎麼打開64位的注冊表

這個貌似不可以的吧,我用硬碟安裝法安裝64位系統,32位PE就是無法運行任何64位的文件啊,還是放棄這樣的想法吧,估計有牛人知道哇

Ⅲ 有沒有哪位有C#或VB.NET的32位程序讀寫win7 64位注冊表的可用的例子

try
{
if (int.Parse(Distinguish64or32System()) == 0x40)
{
Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Wow6432Node", true).OpenSubKey("Microsoft", true).OpenSubKey("Internet Explorer", true).OpenSubKey("MAIN", true).CreateSubKey("FeatureControl").CreateSubKey("FEATURE_BROWSER_EMULATION").SetValue("BOCIES.exe", 0x1f40);
}
else
{
Registry.LocalMachine.OpenSubKey("SOFTWARE", true).OpenSubKey("Microsoft", true).OpenSubKey("Internet Explorer", true).OpenSubKey("MAIN", true).CreateSubKey("FeatureControl").CreateSubKey("FEATURE_BROWSER_EMULATION").SetValue("BOCIES.exe", 0x1f40);
}
}
catch (Exception exception)
{
GobleExceptionMsgLog.AddText(exception.Message);
}

Ⅳ 如何解決易語言編譯的32位程序在64位系統運行的注冊表寫入轉向問題

可能你所遇到的問題是編譯器鏈接出錯的問題吧,正常情況下,在64位運行正常,如果是編譯時出錯,請找到易語言安裝文件夾,我不清楚你用的什麼版本,安裝文件夾下有個靜態編譯修正器,如果這個位置沒有的話,請找到tools目錄下,會看到這工具!

(如果以上沒有解決你的問題,我可以把我的版本發給你用!)

【我用心解答,如果解決了您的問題,一定記得採納額!】

Ⅳ 64位系統與32位的問題 200高分!

推薦windows7旗艦版64位,在兼容上已經做得很好!

64 位與 32 位電腦相比,64 位電腦能處理更大數量的信息。由於 64 位計算機可以使用更多 RAM(4 GB 以上),因此當您同時運行多個程序時,它具有更強的響應能力。

無論您選擇哪種系統,Windows 7 均適用。除家庭普通版外,其他所有零售版本的 Windows 7 包中都包含 32 位以及 64 位軟體。

----------------------------------------------------------------------

1、為什麼需要64位操作系統?

最簡單的原因,每個人的要求都是越來越高的,有更好的東西,當然是受歡迎的。其它的原因:隨著多媒體功能的滲入和硬體價格的日趨平民化,越來越多的人加入到PC應用的行列,造就了一大批進行家庭多媒體創作等應用的非專業人士,很多人不再滿足於用電腦打字、作表格、上網聊天等簡單應用。隨著人們對電腦要求越來越高,32位系統已力不從心。

2、64位與32位相比有啥特色?

32位Windows能支持最多4GB的系統內存,每個處理器可最多使用2GB專用內存。 x64 Edition當前支持多達128GB內存,隨著硬體功能的增強和內存大小的增加,有可能支持多達16TB(1TB=1000GB)的虛擬內存;使用 64 位的 Windows,應用程序可以將足夠多的數據預載入到虛擬內存中,以便 Itanium 處理器快速訪問這些數據。這種特性減少了將數據載入虛擬內存,以及查找讀取數據並將數據寫入數據存儲設備所花費的時間,因此可使應用程序運行地更快、更高效。

從個人桌面系統用戶的角度來看,內存容量的限制只是體現64位計算技術優勢的一個方面,大量數據處理才是64位計算真正發揮功效的地方。PC已經不僅僅是用戶計算的工具,它更是「多媒體」中心,很多這方面應用是32位計算根本無法滿足的。如在家用領域,32位無法實現高保真的聲像,甚至無法完成20分鍾視頻的播放和編輯;在建築、游戲設計領域,32位計算無法完成大量的數據計算和處理;在互聯網上,32位計算無法實現大量的各種類型的數據搜索——這些應用都需要64位計算來實現。

64位和32位體系結構的比較:

地址空間 64 位 Windows 32 位 Windows

物理內存 128 GB 4 GB

虛擬內存 16 TB 4 GB

頁面文件 512 TB 16 TB

頁面緩沖池 128 GB 470 MB

非頁面緩沖池 128 GB 256 MB

系統緩存 1 TB 1 GB

3、64位的劣勢和門檻,32位程序如何在64位上運行?

對目前而言,64位Windows最大的一個劣勢就是兼容性,而兼容性方面最突出的就是各種硬體設備的驅動程序。64位和32位Windows XP的硬體驅動程序完全不能混用。一般的軟體程序在64位上無問題,但是如果該軟體安裝時還會向系統中裝入驅動程序,則是不行的。所有目前大多的殺毒軟體在64位上都是跑不起來的,同理針對64位系統的強勢病毒也不多。

那麼32位程序如何在64位上運行的呢?

1)重定向技術

為了將32位和64位程序分開,在64位系統上運行的運行的32位程序,有一個被叫做 wow64的模擬器,幫助32位程序模擬運行在64位下。這樣的技術叫做重定向技術,設計文 件重定向和注冊表重定向

2)文件如何被重定向?

64位的文件系統,%systemroot%/system32 目錄和programfiles目錄被保留給64位文件使用,而32位文件會被重定向到%systemroot%/SysWOW64目錄和programfiles(x86)目錄。換句話說,所有的32位程序只會出現在%systemroot%/SysWOW64目錄和programfiles(x86)目錄。任何32位程序試圖訪問%systemroot%/system32 和programfiles目錄的企圖都會被重定向到%systemroot%/SysWOW64目錄和programfiles(x86)目錄。這個是一個默認的行為,除非程序的線程明確的指名需要關閉這種重定向機制。

3)注冊表如何重定向?

64位機器維護兩份注冊表,一份32位注冊表項,一份64位注冊表項。64位系統默認的64 位版本注冊表編輯器 (Regedit.exe) 可顯示 64 位和 32 位的 注冊表項。

在 64 位版本的注冊表編輯器中,32 位注冊表項顯示在以下注冊表項下:

HKEY_LOCAL_MACHINE"Software"WOW6432Node可以使用 %systemroot%"Syswow64 文件夾中的 32 位版本注冊表編輯器查看或編輯 32 位注冊表項和項值。

WOW64 使用了一個「注冊表反射器」來在 64 位注冊表視圖和 32 位注冊表視圖之間鏡像某些注冊表項和項值。

受反射的注冊表項

WOW64 注冊表反射器可能會在反射過程中修改注冊表項的內容和項值,目的是為了調整路徑名等。因此,32 位的內容與 64 位的內容可能會有所不同。下面的注冊表項會被反射:

· HKEY_LOCAL_MACHINE"Software"Classes

· HKEY_LOCAL_MACHINE"Software"COM3

· HKEY_LOCAL_MACHINE"Software"Ole

· HKEY_LOCAL_MACHINE"Software"EventSystem

· HKEY_LOCAL_MACHINE"Software"RPC

· HKEY_CLASSES_ROOT

· HKEY_CURRENT_USER"Software"Classes

· HKEY_USERS"*"Software"Classes

· HKEY_USERS"*_Classes

4、64位操作系統在安全性方面有哪些優越性呢?

EVP(Enhanced Virus Protection,增強型病毒防護)是AMD Althlon 64處理器中採用的一種全新的防毒技術,但它只提供硬體支持,這一功能與Windows XP SP2或64位Windows XP的DEP(Date Execution Prevention,數據執行保護)技術相結合。兩者結合後將生成一種全新的惡意代碼防禦機制:將所有內存位置均標記為不可執行——除非該位置已明確包含可執行代碼。當有攻擊程序企圖在不可執行的內存位置中插入代碼並執行代碼時,這一行為將會被阻止。不難想像,除非得到了用戶的允許,不明代碼是很難執行的,這能在很大程度上扼制病毒等惡意代碼的入侵。

Ⅵ 如何把32位的注冊表文件轉換為64位的

把32位的注冊表文件轉換為64位的方法:
1.為了防止注冊表鍵沖突,注冊表在某些鍵也分成了兩個部分。
2.一部分是專門給64位系統訪問的,另一部分是專門給32位系統訪問的,放在Wow6432Node下面。當32位程序去訪問某些鍵值的時候,和文件轉向類似,系統也會自動地把程序的訪問轉向到Wow6432Node下面。
3.Wow6432Node這個節點存在於HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面。和RegOpenKeyEx方法辦到。RegOpenEx方法在C#中調用聲明方法如下:
[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint RegOpenKeyEx( UIntPtr hKey,string lpSubKey, uint ulOptions,int samDesired,out IntPtr phkResult);
其中需要注意的是samDesired這個參數。這個參數可以取 KEY_ALL_ACCESS, KEY_QUERY_VALUE, KEY_WOW64_64KEY等值(詳情可以查閱MSDN)。已經關閉了文件系統的轉向,那麼就可以利用:(KEY_QUERY_VALUE | KEY_WOW64_64KEY)來得到注冊表的完全訪問許可權。這個地方需要注意的是,在Vista下面,有一些注冊表項是只讀的,如果用了KEY_ALL_ACCESS這個參數,就會出現「Access is denied」 這個錯誤(ErrorCode = 5)。因此,如果不是要寫入注冊表的話,不要使用KEY_ALL_ACCESS。

Ⅶ 32位注冊表無法導入到64位系統中

64位的系統最好就只是裝64位的軟體好了,32位的的注冊表信息就算可以導入也只入一部份,有的軟體支持兩種,但總而言之,64位的注冊表為了兼容,也將注冊表 分為了兩個部份,一個部分供32位的使用,一個部份供64位的使用。

當前計算機系統已經逐漸地從32位轉到64位,XP,2003,VISTA都有64位的版本。從目前而言,32位應用程序還是佔了絕大多數,但是也有部分應用程序既有32位版本,又有64位版本。為了保證32位程序可以順利運行在64位系統上,微軟提供了一套叫WOW64的模擬機制。通常把這套系統稱為WOW64。從總體上來說,WOW64是一套基於用戶模式的動態鏈接庫,它可以把32位應用程序的發出的命令翻譯成64位系統可以接受的格式。從下圖中可以大概地看出32位應用程序運行在64位系統上的方式。

當32位應用程序運行的時候,首先會去啟動本地庫載入器(Native Library Loader)。載入器會識別出應用程序是32位的並且用特殊的方式來處理它。載入器會為32位應用程序建立起一個WOW64的模擬環境並把控制權交給32位的Ntdll.dll。運行在32位應用程序和64位Ntdll.dll之間的WOW64模擬環境會將32位應用程序的指令翻譯成64位Ntdll.dll可以接受的方式,並且它也可以把系統的指令翻譯成32位應用程序可以接受的方式。

2 如何判斷系統是64位
3 文件系統的轉向

32位進程不能載入64位Dll,64位進程也不可以載入32位Dll。Windows的系統目錄包含了所有安裝的應用程序和它們的Dll文件,根據我們所述的規則,它應該被分為給64位應用程序的目錄和給32位應用程序的目錄。如果不這樣,我們就無法區分32位和64位的Dll文件。對於64位應用程序,其文件通常被放在%windir%\system32和%programfiles%(比如:c:\program files)。對於32位應用程序,其文件通常在%windir%\syswow64和C:\program files (x86)下面。如果我們用32位程序去訪問%windir%\system32,不管我們用硬編碼還是其它的方式,系統都會自動地給我們轉向到%windir%\syswow64下面。這種轉向對於每個32位應用程序默認都是打開的。但是這種轉向對於我們來說並不總是需要的。那麼我們可以在C#裡面調用相關的API來關閉和打開這種轉向。常用的函數有3個,(關閉系統轉向),Wow64RevertWow64FsRedirection(打開系統轉向),Wow64EnableWow64FsRedirection(打開系統轉向)。但是Wow64EnableWow64FsRedirection在嵌套使用的時候不可靠,所以通常用上面的Wow64RevertWow64FsRedirection來打開文件系統轉向功能。在C#中,我們可以利用DllImport直接調用這兩個函數。但是要注意到的是,在32位的Kernel.dll中是沒有這兩個函數的。那麼在C++中應該使用LoadLibrary來動態載入這兩個函數。否則會因為找不到這兩個函數而無法通過編譯。而且在目前的使用中,發現這兩個函數有一個小小的問題。如果我們在調用了後去調用Comdlg32.dll的GetOpenFileName函數,是無法調用成功的。但是也得不到Error的值。在C#中可以用如下的代碼關閉和打開文件的轉向。

聲明調用規則

[DllImport( "Kernel32.dll", CharSet=CharSet.Auto, SetLastError = true)]
public static extern bool (ref IntPtr ptr);
[DllImport( "Kernel32.dll", CharSet=CharSet.Auto, SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);

關閉轉向

(ref Ptr);

打開轉向

Wow64RevertWow64FsRedirection(Ptr);

要注意的是,關閉和打開要成對出現。以免出現混亂的行為。

4 注冊表的轉向

為了防止注冊表鍵沖突,注冊表在某些鍵也分成了兩個部分。一部分是專門給64位系統訪問的,另一部分是專門給32位系統訪問的,放在Wow6432Node下面。當32位程序去訪問某些鍵值的時候,和文件轉向類似,系統也會自動地把程序的訪問轉向到Wow6432Node下面。Wow6432Node這個節點存在於HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下面。如果我們希望關閉這個轉向的話,可以通過上面的和RegOpenKeyEx方法辦到。RegOpenEx方法在C#中調用聲明方法如下:

[DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint RegOpenKeyEx( UIntPtr hKey,string lpSubKey, uint ulOptions,int samDesired,out IntPtr phkResult);

其中需要注意的是samDesired這個參數。這個參數可以取 KEY_ALL_ACCESS, KEY_QUERY_VALUE, KEY_WOW64_64KEY等值(詳情可以查閱MSDN)。當我們已經關閉了文件系統的轉向,那麼就可以利用:(KEY_QUERY_VALUE | KEY_WOW64_64KEY)來得到注冊表的完全訪問許可權。這個地方需要注意的是,在Vista下面,有一些注冊表項是只讀的,如果用了KEY_ALL_ACCESS這個參數,就會出現「Access is denied」 這個錯誤(ErrorCode = 5)。因此,如果不是要寫入注冊表的話,最好不要使用KEY_ALL_ACCESS。我們可以用如下代碼來完全訪問注冊表。

//use this function transfer the string key name to HKEY handle
private static UIntPtr TransferKeyName(string keyName)
{
UIntPtr HKEY_CLASSES_ROOT = (UIntPtr)0x80000000;
UIntPtr HKEY_CURRENT_USER = (UIntPtr)0x80000001;
UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
UIntPtr HKEY_USERS = (UIntPtr)0x80000003;
UIntPtr HKEY_CURRENT_CONFIG = (UIntPtr)0x80000005;

switch(keyName)
{
case "HKEY_CLASSES_ROOT":
return HKEY_CLASSES_ROOT;
case "HKEY_CURRENT_USER":
return HKEY_CURRENT_USER;
case "HKEY_LOCAL_MACHINE":
return HKEY_LOCAL_MACHINE;
case "HKEY_USERS":
return HKEY_USERS;
case "HKEY_CURRENT_CONFIG":
return HKEY_CURRENT_CONFIG;
}

return HKEY_CLASSES_ROOT;
}

public static bool OpenRegKey(string keyName, string subKeyName)
{
UIntPtr hKey = TransferKeyName(keyName);
UIntPtr phkResult = UIntPtr.Zero;
int KEY_QUERY_VALUE = (0x0001);
int KEY_WOW64_64KEY = (0x0100);
int KEY_ALL_WOW64 = (KEY_QUERY_VALUE | KEY_WOW64_64KEY);

if(Is64bitOS && !IsWow64RedirectionEnabled) //The os is 64 bit and the FileRedirection is closed
{
samDesired = KEY_ALL_WOW64;
}

if(RegOpenKeyEx(hKey, subKeyName,0,samDesired,out phkResult) == 0) //ERROR_SUCCESS=0
{
return true;
}

int errCode = System.Runtime.InteropServices.Marshal.GetLastWin32Error();

return false;
}

熱點內容
伺服器404代表什麼 發布:2025-05-17 06:39:51 瀏覽:559
我的世界龍蛋伺服器 發布:2025-05-17 06:20:06 瀏覽:912
安卓系統軟體怎麼不更新 發布:2025-05-17 06:19:15 瀏覽:817
安卓夏日傳說存檔放哪個文件 發布:2025-05-17 06:12:44 瀏覽:606
如何通過伺服器id找到主人 發布:2025-05-17 06:12:11 瀏覽:37
ug編程吧 發布:2025-05-17 06:07:45 瀏覽:72
sql臨時表和表變數 發布:2025-05-17 06:02:38 瀏覽:724
蘋果如何用安卓無線耳機 發布:2025-05-17 06:01:53 瀏覽:822
sqlserver表關系 發布:2025-05-17 06:01:02 瀏覽:997
2017途觀配置什麼音響 發布:2025-05-17 05:53:50 瀏覽:844