日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

关于windows注册表重定向和虚拟化分析

發(fā)布時(shí)間:2025/3/19 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于windows注册表重定向和虚拟化分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載源地址?https://www.cnblogs.com/xenophon/p/4956218.html

在 64 位系統(tǒng)上,32 位程序讀寫部分注冊(cè)表路徑時(shí)會(huì)被系統(tǒng)重定向,這有些類似于讀寫 System32 文件夾的處理方式。比如,寫入 HKLM\Software\KeyName,卻發(fā)現(xiàn)實(shí)際寫入到 HKLM\Software\Wow6432Node\KeyName,讀取亦是如此。現(xiàn)實(shí)中發(fā)現(xiàn),很多的程序員在檢測(cè)一個(gè)程序在 HKLM 鍵下面的注冊(cè)表信息,通常會(huì)針對(duì) HKLM\Software 和 HKLM\Software\Wow6432Node 分別檢查,實(shí)際上這樣檢查毫無(wú)效果。對(duì)于 32 位程序而言,訪問(wèn) HKLM\Software 時(shí),系統(tǒng)底層會(huì)重定向到 HKLM\Software\Wow6432Node,并不能得到真正的 HKLM\Software 下面的信息,即便再訪問(wèn)一次 HKLM\Software\Wow6432Node,經(jīng)測(cè)試也是訪問(wèn) Wow6432Node 下面的值,和直接訪問(wèn) HKLM\Software 并沒有任何區(qū)別。如果你仔細(xì)閱讀 MSDN 上關(guān)于注冊(cè)表重定向和訪問(wèn)權(quán)限等資料,會(huì)發(fā)現(xiàn)微軟提供了兩個(gè)特殊的注冊(cè)表權(quán)限位:KEY_WOW64_32KEY、KEY_WOW64_64KEY,來(lái)控制訪問(wèn)權(quán)限。所以,當(dāng)使用 RegOpenKeyEx 或 RegCreateKeyEx 訪問(wèn)注冊(cè)表的 HKCR 或 HKLM\Software 下的路徑,不需要顯式指定 Wow6432Node,而是應(yīng)當(dāng)通過(guò)其權(quán)限位,如 KEY_READ,和上述二者之一進(jìn)行組合來(lái)控制具體的訪問(wèn)位置。如果開發(fā)者顯示指定 HKLM\Software\Wow6432Node,則程序在任何情況下都是訪問(wèn)這個(gè)路徑。但是在 32 位系統(tǒng)中,這個(gè)路徑默認(rèn)并不存在,如果強(qiáng)行創(chuàng)建,依然沒有任何意義。為了保持統(tǒng)一以及遵循 API 的規(guī)范,我們應(yīng)該做到不顯式指定 Wow6432Node 子鍵。如果不通過(guò)權(quán)限位進(jìn)行訪問(wèn)視圖控制,可能會(huì)造成代碼邏輯混亂,如訪問(wèn)不同的注冊(cè)表路徑實(shí)際上底層邏輯相同,或者同樣的代碼編譯為 32 位或 64 位后邏輯不一致等等。所以,如果要檢測(cè) 32 位和 64 位注冊(cè)表 HKLM\SOFTWARE\KeyName 下是否存在 ValueName,規(guī)范的代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

BOOL?WINAPI RegCheckValueTest(void)

{

????DWORD?dwWowFlags[] = { KEY_WOW64_32KEY, KEY_WOW64_64KEY };

????DWORD?dwWowCount = ARRAYSIZE(dwWowFlags);

????for?(size_t?i = 0; i < dwWowCount; i++)

????{

????????HKEY?hKey = NULL;

????????DWORD?dwAccess = KEY_READ | dwWowFlags[i];

????????DWORD?dwError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\KeyName"), dwAccess, &hKey);

????????if?(dwError == NO_ERROR)

????????{

????????????dwError = RegQueryValueEx(hkeySub, _T("ValueName"), NULL, NULL, NULL, NULL);

????????????RegCloseKey(hKey);

????????????if?(dwError == NO_ERROR)

????????????{

????????????????return?TRUE;

????????????}

????????}

????}

????return?FALSE;

}

在不同 CPU 位數(shù)的系統(tǒng)上,32 位和 64 位程序分別使用不同的權(quán)限位組合訪問(wèn) HKLM\Software 時(shí),系統(tǒng)底層實(shí)際訪問(wèn)的注冊(cè)表位置如下表所示:

系統(tǒng)架構(gòu)程序架構(gòu)顯式訪問(wèn)路徑實(shí)際訪問(wèn)路徑備注
權(quán)限位不含 KEY_WOW64_*權(quán)限位包含 KEY_WOW64_32KEY權(quán)限位包含 KEY_WOW64_64KEY
32 位系統(tǒng)32 位程序HKLM\SoftwareHKLM\Software原因:在 32 位系統(tǒng)上不存在不同訪問(wèn)視圖
影響:參數(shù) KEY_WOW64_* 被系統(tǒng)忽略
64 位系統(tǒng)32 位程序HKLM\SoftwareHKLM\Software\Wow6432NodeHKLM\Software\Wow6432NodeHKLM\Software?
64 位程序HKLM\SoftwareHKLM\Software
32 位程序HKLM\Software\Wow6432NodeHKLM\Software\Wow6432Node原因:在路徑中顯式指定了 Wow6432Node 節(jié)點(diǎn)
影響:參數(shù) KEY_WOW64_* 被系統(tǒng)忽略
64 位程序

備注:注意RegOpenKeyEx第四個(gè)形參,KEY_QUERY_VALUE或者KEY_READ、KEY_ALL_ACCESS等,權(quán)限是有區(qū)別的,不要越權(quán)操作,否側(cè)會(huì)被返回為空。

KEY_QUERY_VALUE顯然權(quán)限低于KEY_ALL_ACCESS。

可見,32 位程序訪問(wèn)注冊(cè)表 HKLM\Software 路徑時(shí),默認(rèn)會(huì)被重定向到 HKLM\Software\Wow6432Node,如果權(quán)限位指定 KEY_WOW64_64KEY 時(shí)則訪問(wèn) HKLM\Software。64 位程序訪問(wèn)注冊(cè)表 HKLM\Software 路徑時(shí),默認(rèn)會(huì)訪問(wèn) HKLM\Software,如果權(quán)限位指定 KEY_WOW64_32KEY 時(shí)則訪問(wèn) HKLM\Software\Wow6432Node。當(dāng)然,前提是程序并沒有受到注冊(cè)表虛擬化影響,否則會(huì)被寫入到以下注冊(cè)表位置:

1

2

HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE

HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node

實(shí)際觀察發(fā)現(xiàn) HKCU\SOFTWARE\Wow6432Node 下面只有極少量的數(shù)據(jù),因此 HKCU\SOFTWARE\Wow6432Node 下面(包括其他從此處映射的鍵)的注冊(cè)表鍵通常可以忽略。這可以說(shuō)明,注冊(cè)表針對(duì) 32 和 64 位的重定向僅針對(duì) HKLM(包括其他從此處映射的鍵)有效,如果要訪問(wèn) HKCU 下面的節(jié)點(diǎn),通常無(wú)需考慮重定向的問(wèn)題。而在 32 位系統(tǒng)上,不存在注冊(cè)表重定向的問(wèn)題。

關(guān)于注冊(cè)表重定向的更多信息,請(qǐng)?jiān)L問(wèn):
https://msdn.microsoft.com/en-us/library/aa384253.aspx
https://msdn.microsoft.com/en-us/library/aa384129.aspx

總結(jié)

以上是生活随笔為你收集整理的关于windows注册表重定向和虚拟化分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。