• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            32 位 Windows 7 / Vista 啟用 PAE 后仍然不支持 4G 內存原因分析

            轉載自:http://live.aulddays.com/tech/09/vista-ram-pae/

            隨著內存價格的不斷下降,相信很多朋友都和 Aulddays 一樣已經用上了 4G 甚至更多的內存。在 64 位 Windows 系統仍存在一些驅動兼容性問題的情況下,32 位的系統仍然是絕對的主流,但 32 位的桌面版 Windows 版系統對 4G 以上內存的支持似乎一直不好。關于這個問題,網上的文章清一色的會提到 PAE(Physical Address Extension 物理地址擴展)技術。遺憾的是,據絕大多數朋友的測試情況來看,即使啟用了 PAE,32 位的 Windows Vista 仍然無法使用全部的 4G 內存。在 Vista SP1 中,微軟使了個小技巧,讓系統屬性中可以顯示“已安裝”的 4G 內存;但更進一步,在任務管理器中證實實際可用的內存仍然只有 3069M(最多不超過 3.25G,依不同配置而定),如下圖所示:

            32 位 Vista 4G 內存

            這一點,在系統屬性程序(開始\運行,輸入“msinfo32”,回車)中可以更清楚的看出“已安裝物理內存”和“可用物理內存”的數量。

            PAE?并不足夠

            PAE 是 32 位系統內存支持不得不說的一個問題。在沒有 PAE 的情況下,32 位系統使用 32 位的地址空間,因此總共可以支持 2^32=4G 的內存,再加上一些系統的限制,沒有 PAE 的 32 位 Windows 上本來實際只能使用 3G 的內存。而 PAE 則是一種地址擴展技術,通過它可以讓操作系統擁有更多的地址空間,理論上可以支持 128G 甚至更多的內存。PAE 在 Windows Server 系統上可以很好的工作,如下圖所示,32 位的 Server 2008 (和 Vista 實際使用相同的內核)在開啟 PAE 之后可以很好的使用 4G 內存,但 Vista 上即使開啟了 PAE 也仍然只能使用 3G 內存(事實上,Vista 默認是開啟 DEP 的,而 DEP 功能需要 PAE 支持,因此一般來說 PAE 其實并不需要手動設置而是自動開啟的。點擊這里可以看到關于 DEP 的詳細討論),這又是為什么呢?

            Server 2008 4G 內存

            技術大牛 Geoff Chappell 在研究了 Vista 和 Server 2008 的內核之后發現,造成這個限制的實際上是 Vista 的許可證限制!簡單來說,vista/2008 內核在啟動初期會調用 MxMemoryLicense 未公開 API 函數來確定系統“許可(licensed)”使用的最大內存數量;而 MxMemoryLicense 則會查詢 tokens.dat 和 pkeyconfig.xrm-ms 兩個文件確定系統的許可證(桌面系統還是服務器系統),接下來再根據許可證類型確定支持內存的最大值。如果系統內存大于根據許可證確定的值,則在內核啟動時多余的內存就會被完全忽略掉。這也就是造成 32 位 Vista 不能使用 4G 或以上內存的根本原因。

            目前已經有兩個測試證實了這個情況,并成功在 32 位 Vista 下使用了 4G 內存。注意:進行這兩個測試實際已經違反了 Windows Vista 的使用許可證,所以是存在版權問題的;在弄清這個問題之前請不要輕易進行類似的測試!

            測試1. 替換系統授權:

            將 Vista 中的 C:\ Windows\ ServiceProfiles\ NetworkService\ AppData\ Roaming\ Microsoft\ SoftwareLicensing\ tokens.dat 文件和 C:\ Windows\ System32\ licensing\ pkeyconfig\ pkeyconfig.xrm-ms 文件分別用 Server 2008 中的同名文件替換。之后再啟動系統時內核就會誤認為啟動的是 Server 2008 系統,而消除 Vista 許可證對內存的限制。但是這樣一來很多系統服務和系統組件也會按照 2008 的方式來運行,造成很多不兼容性。

            測試2. 修改系統內核

             在 Geoff Chappell 的文章中(點擊查看原文)采用了直接 patch 系統內核的方法。經 Aulddays 測試,這種方法同樣適用于目前最新版的 Windows 7 RTM 系統這種方法難度較大,但帶來的不兼容性則小的多,并且可以完美支持多至 128G 的內存!他的具體做法如下:為避免原始內核被破壞,首先復制系統內核文件 ntkrnlpa.exe,并命名為 ntkr128g.exe,之后的修改都在 ntkr128g.exe 上進行。用 hex 編輯器打開 ntkr128g.exe,查找下列兩個字符串:

            特征串1:7C 11 8B 45 FC 85 C0 74 0a
            特征串2:7C 10 8B 45 FC 85 C0 74 09

            兩個特征串在內核中都出現且只出現一次,雖然特征串內容不同,但修改方式相同:把 0x8B 開始的 7 個字節(即上面標記為深紅色的部分。最前兩個字節不作修改!)修改成:

            后7個字節修改成:B8 00 00 02 00 90 90

            對于目前的兩個版本的 Vista 和最新的 Windows 7,修改處的文件偏移地址(即 0x8B 字節的位置)分別如下:

            版本號 版本 文件偏移地址
            6.0.6000.16386 Windows Vista 0x003040B1, 0x003040F2
            6.0.6001.18000 Windows Vista SP1 0x00309AA3, 0x00309AE4
            6.1.7600.16385 Windows 7 0x0035C243, 0x0035c283

            接下來測試加載修改后的內核。首先需要為修改后的內核重新計算 checksum 和生成數字簽名。在命令行中輸入下面3個命令:

            editbin /release ntkr128g.exe
            makecert -r -ss my -n "CN=My Own Testing Authority"
            signtool sign -s my -n "My Own Testing Authority" ntkr128g.exe

            上述簽名過程需要用到三個命令行工具,其中 editbin 在 Visual Studio 中自帶,而 makecert 和 signtool 在 Windows SDK 6.0 中自帶,如果你機器上安裝了 Visual Studio 2008 的話,第一個工具可以在 %VS2008_Dir%\ VC\ Bin\ 中找到,后兩個工具可以在 %ProgramFiles%\ Microsoft SDKs\ Windows\ v6.0A\ bin\ 中找到。Visual Studio 2008 Express 和 Windows SDK 6.0 都可以從微軟網站免費下載; 如果不想麻煩另外安裝的話,也可以點擊這里單獨下載這幾個工具; 如果運行時提示缺少 MSVCR90.DLL,請先點擊這里下載安裝 VC2008 的運行時組件

            最后在系統啟動菜單中加入一條新的啟動菜單項(需以管理員方式運行命令提示符)(如果是Windows 7 系統的話可將命令中的 Vista 換成 7):

            bcdedit /copy {current} /d "Windows Vista With More Than 4GB"

            運行成功后,該命令會返回一個 GUID 值,記錄下該 GUID 值,并運行下面三條,用之前返回的 GUID 值替換命令中的 guid(命令中包含 guid 的大括號也要輸入):

            bcdedit /set {guid} pae ForceEnable
            bcdedit /set {guid} kernel ntkr128g.exe
            bcdedit /set {guid} testsigning on

            最后,重啟系統并在啟動菜單中選擇 "Windows Vista (或 7) With More Than 4GB" 一項即可。由于修改了內核,系統啟動后桌面上會顯示“Test Mode”的提示。

            查看:原文地址;來源:live.aulddays.com


            posted on 2011-01-11 19:05 楊粼波 閱讀(1582) 評論(0)  編輯 收藏 引用

            久久久久久久久久免免费精品| 99久久国产综合精品麻豆| 久久综合色之久久综合| 日韩欧美亚洲国产精品字幕久久久| 看全色黄大色大片免费久久久| 久久久久高潮综合影院| 99久久人妻无码精品系列蜜桃| 国产成人久久久精品二区三区 | 亚洲精品无码久久久久| 国产人久久人人人人爽| 四虎亚洲国产成人久久精品| 日本欧美久久久久免费播放网| 久久久久久久99精品免费观看| 性做久久久久久久久久久| 久久99精品久久久久婷婷| 国产一区二区三精品久久久无广告| 久久综合鬼色88久久精品综合自在自线噜噜 | 无码人妻精品一区二区三区久久| 久久国产精品成人免费| 伊人久久大香线蕉av一区| 久久国产精品免费| 久久777国产线看观看精品| 久久热这里只有精品在线观看| 亚洲欧美精品伊人久久| 久久99精品久久久大学生| 九九热久久免费视频| 久久精品国产亚洲综合色 | 久久亚洲AV成人无码电影| 久久av高潮av无码av喷吹| 久久精品成人国产午夜| 国产欧美一区二区久久| 久久综合国产乱子伦精品免费| 青青热久久国产久精品 | 国产精品久久久久久| 久久精品a亚洲国产v高清不卡| 大香伊人久久精品一区二区| 热久久国产欧美一区二区精品| 久久精品国产欧美日韩| 久久综合久久伊人| 中文精品99久久国产| 久久人人添人人爽添人人片牛牛|