您目前已離線,請等候您的網際網路重新連線

如何使用 「 特殊集區 」 功能來隔離集區損毀

Windows XP 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Windows XP 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

Windows Server 2003 的支援已於 2015 年 7 月 14 日結束

Microsoft 已於 2015 年 7 月 14 日結束對 Windows Server 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:188831
結論
集區損毀可能會造成許多最evasive 有 Windows NT。 集區損毀的問題被因為當核心模式元件將寫入超過配置的集區範圍的記憶體。若要撰寫超過其配置的區域範圍的記憶體,則可能也是另一台配置的記憶體,可能是由另一個元件,擁有的區域就會被覆寫。這個損壞可能會造成問題,例如在藍色螢幕完全不相關的程式碼的區域。可以讀取超出配置區域的核心模式元件也會造成問題。

它是在是否因原有的設備集區損毀問題製造商 (OEM) 驅動程式或 Windows 中的問題,是部份最難識別。通常,就可以看到在損毀傾印分析是問題的實際,例如資料區域的徵狀變得完全無關的程式碼區塊中的損毀和造成問題。到目前為止,所以幾乎不可能找到程式碼區段會損害記憶體。

現在可以識別來源集區損毀的於指令造成資料庫損毀。新的記憶體管理公用程式也就是已命名的特殊集區是隨附於 Windows NT 4.0 Service Pack 4 (SP4),Windows 2000 中,Windows XP,Windows Server 2003、 Windows Vista 中和 Windows Server 2008。「 特殊集區 」 公用程式判別傷集區內的資料寫入的核心模式元件其配置區域以外的記憶體。

附註記憶體調整並不適用於 Windows Vista 及 Windows Server 2008。但是 「 特殊集區 」 功能並不會套用這些產品。
其他相關資訊
重要這個章節、 方法或工作包含告訴您如何修改登錄的步驟。不過,如果您不當修改登錄,可能會發生嚴重的問題。因此,請確定小心執行這些步驟。為加強保護,請先備份登錄再進行修改。然後,您可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
322756 如何備份及還原 Windows 中的登錄


「 特殊集區 」 公用程式將兩個頁面的虛擬記憶體配置每個集區配置要求透過 ExAllocatePoolWithTag 符合下列準則:
  • 配置要求必須是針對大小小於可以正確地顯示在分頁集區中的最大配置。
  • 要求必須符合在 PoolTag 規格篩選器。
集區滿溢偵測第一頁用來包含結尾的頁面配置。第二頁是防護分頁。針對集區不足偵測,第一頁是保護分頁。其後跟隨所在頁面的配置的起始處的頁面。

滿溢偵測是最常使用可能的。滿溢偵測要求配置備份時,位於第一頁的結尾從頁面結尾的要求大小。配置大小的捨入至最多8 個位元組的界限。模式鍵、 大小及集區標籤資訊是寫入位於第一頁的第一個八個位元組的行首。此模式也傳播整個頁面。因為配置器位於最接近的 8 個位元組的界限,可能有多達七個之後的 slop 個位元組配置。此模式也會寫入到後面的 slop 位元組配置。

第二頁是保護分頁。保護分頁標有不可存取特殊的分頁表項目 (PTE) 所組成保護。將標記有不可存取保護之後,任何程式碼第 2 頁嘗試讀取或寫入結尾的第一個頁面立即未來展望會使產生 Stop 0x0000000A 或 Stop 0x0000001E 錯誤發生存取違規。這可讓人偵錯系統,找出確切的指令進而造成資料庫損毀。

若要攔截違反者所撰寫的備份檢查超過結尾的配置,但不是會超出頁面上,slop 的結尾可用集區要求會驗證配置結尾處的位元組(ExFreePoolWithTag)。Slop 個位元組會比較中的樣式在 slop 位元組] 區域中,就會覆寫配置標頭,以確認是否要保護。如果驗證檢查,仍無法解決問題,Stop 0x00000001A 錯誤就會發生。

這項檢查不一定是到完全相同的區塊造成資料庫損毀的程式碼。不過,它會幫助識別元件進而造成損毀。

若要啟用 「 特殊集區 」 公用程式,請加入下列的機碼和登錄值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


值名稱: PoolTag
資料型別: 呼叫完成
資料: 集區標籤遮罩 |配置的大小遮罩 |0
集區標籤遮罩是集區標記識別項包含遮罩您想要放入特殊的集區的集區的字元。這個遮罩必須指定以十六進位方式以相反順序。也可能會包含這個遮罩"?"加上遮罩的單一字元或"*"從這裡到標記的結尾的遮罩。例如,若要監視的集區標籤是以"Nt"開頭的所有集區,請指定"2A744E"(不含引號),它代表"* tN"。

[下表列出更多範例。
   Pool to monitor   Character representation   Pool tag mask   ----------------------------------------------------------                  All pools         "*"                        0x2A   N??s              "s??N"                     0x733F3F4E				
配置的大小遮罩規格會放置所有集區的配置指定的大小至特殊集區。這也是以十六進位方式指定。比方說,如果 32 個位元組的所有配置都位於特殊的集區,指定 0x20。

指定零 (0x0) 時,「 特殊集區 」 公用程式未初始化。此外,「 特殊集區 」 公用程式都會被未初始化在登錄中未定義的 PoolTag 登錄值。
值名稱: PoolTagOverruns
資料型別: 呼叫完成
資料: 1 |0
1 表示集區配置滿溢偵測到的 %指定的標記。配置是位在頁面和守衛的結尾以下的頁面。

0 表示集區配置錯偵測到的 %標記。配置的位置] 頁面上,並保護分頁的開頭前面包含配置的頁面。

若要建立這些兩個登錄機碼的常見使用範例將會是,如下所示:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


值名稱: PoolTag
資料型別: 呼叫完成
資料: 0x2A

值名稱: PoolTagOverruns
資料型別: 呼叫完成
資料: 1


附註基於 Windows NT 「 終端機伺服器 4.0,您必須停用 KStackPool當您使用特殊的集區。若要這樣做,請加入下列登錄值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


值名稱:EnableKStackPool
資料型別: 呼叫完成
資料: 0

1 -KStack 一直處在啟用狀態的集區
2 -KStack 的電腦有 256 MB 或更多啟用的集區記憶體 (預設值)
如果您不要在終端機上進行這項變更有 256 MB 或更多的記憶體的伺服器電腦,您可能會收到 「 STOP 0x00000078(PHASE0_EXCEPTION) 」 錯誤訊息。


附註「 特殊集區 」 功能可能不適用於 Windows Server 2003 是否有足夠的特殊分頁表項目 (Pte)。單人使用終端機伺服器,它包含超過 1 GB 的 RAM 且記憶體管理微調的值設為預設值的電腦上通常會發生這個問題。在 64 位元版本的 Windows Server 2003 中不會發生這個問題。

記憶體傾印檔案的分析問題可能包含下列資訊:
*** Virtual Memory Usage *** Physical Memory: 1015660 ( 4062640 Kb) Page File: \??\C:\Pagefile1\pagefile.sys Current: 4193280Kb Free Space: 4180856Kb Minimum: 4193280Kb Maximum: 4193280Kb Available Pages: 552680 ( 2210720 Kb) ResAvail Pages: 932179 ( 3728716 Kb) Locked IO Pages: 347 ( 1388 Kb) Free System PTEs: 187166 ( 748664 Kb) Free NP PTEs: 32765 ( 131060 Kb) Free Special NP: 117228 ( 468912 Kb) Modified Pages: 106 ( 424 Kb) Modified PF Pages: 98 ( 392 Kb) NonPagedPool Usage: 6599 ( 26396 Kb) NonPagedPool Max: 65536 ( 262144 Kb) PagedPool 0 Usage: 10697 ( 42788 Kb) PagedPool 1 Usage: 1240 ( 4960 Kb) PagedPool 2 Usage: 1239 ( 4956 Kb) PagedPool 3 Usage: 1265 ( 5060 Kb) PagedPool 4 Usage: 1231 ( 4924 Kb) PagedPool Usage: 15672 ( 62688 Kb) PagedPool Maximum: 90112 ( 360448 Kb) Shared Commit: 3866 ( 15464 Kb) Special Pool: 511 ( 2044 Kb) <-- very smallShared Process: 5205 ( 20820 Kb) PagedPool Commit: 15672 ( 62688 Kb) Driver Commit: 2091 ( 8364 Kb) Committed pages: 439832 ( 1759328 Kb) Commit limit: 2023823 ( 8095292 Kb)0: kd> dd nt!MmSpecialPoolRejected l8 8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.8057aff0 00000000 00000000 00000000 000000008057afd8 nt!MiSpecialPoolFirstPte = 0xc022af788057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
您可以驗證配置分析從特殊集區大小的問題。如此一來,因為以下的特殊集區 PTE 值都相同,就會發生這個問題:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
如果 MmSpecialPoolRejected 登錄項目的值為 3,也會發生這個問題或更大。

若要解決這個問題,請設定 PagedPoolSize 登錄項目的值是小於分頁集區大小所允許的值。例如,將 PagedPoolSize 登錄項目設定為值 256 MB。如果您想要設定較大的值,使用 「 效能監視器 」 公用程式來判斷電腦的需求較大的分頁集區大小。

您可以使用下列的值為 PagedPoolSize 登錄項目:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
沒有 service pack 的 Windows Server 2003:

值名稱: PagedPoolSize
資料型別: 呼叫完成
資料: 10000000
基底: 十六進位

Windows Server 2003 安裝 Service Pack 1 (SP1):

值名稱: PagedPoolSize
資料型別: 呼叫完成
資料: FFFFFFFF
基底: 十六進位

附註在此進行任何所描述的登錄變更後文件編號,請重新啟動電腦使變更生效。

If啟用 「 特殊集區 」 功能之後,電腦停止回應(當機),以及您在啟動時,收到錯誤訊息在藍色畫面上的,請重新啟動藉由使用 [上次的良好設定] 選項的電腦。啟用 「 特殊集區 」 功能並不會寫入至最後一個已知良好在登錄中直到成功登入後的設定項目。
集區損毀

警告:本文為自動翻譯

內容

文章識別碼:188831 - 最後檢閱時間:04/19/2013 14:27:00 - 修訂: 0.1

Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows XP Professional, Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows Server 2003, Enterprise Edition (32-bit x86), Microsoft Windows Server 2003 Service Pack 2, Windows Vista 家用進階版, Windows Vista 商用進階版, Windows Vista 旗艦版, Windows Vista Service Pack 2, Windows Server 2008 Standard, Windows Server 2008 Enterprise, Windows Server 2008 Datacenter, Windows Server 2008 Service Pack 2, Windows 7 Home Premium, Windows 7 Enterprise, Windows 7 Professional, Windows 7 Ultimate, Windows 7 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Service Pack 1

  • kbenv kbhowto kbqfe kbmt KB188831 KbMtzh
意見反應