Makale numarası: 188831 - Son Gözden Geçirme: 07 Ekim 2009 Çarşamba - Gözden geçirme: 11.0

Havuzu zarar yalıtmak için özel havuz özelliği nasıl kullanılır

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Havuzu en evasive sorunların çoğunu zarara neden olur, bellek ayrılmış havuzu alanı dışında bir çekirdek modu bileşeni yazdığında Windows NT. havuzu ile zarar. Bellek sınırı, ayrılmış alanın yazarak, bellek, büyük olasılıkla başka bir bileşen tarafından sahibi, başka bir etki alanının üzerine olduğunu olasıdır. Bu mavi ekranlar gibi sorunları kod tamamen ilgisiz alanları zarar verebilir. Ayrıca, BIR çekirdek modu bileşeni, ayrılmış alanı dışında okuma sorunlara neden olabilir.

Özgün donanım üreticileri (OEM) sürücüleri ya da Windows sorunları neden olup olmadığını havuzu zarar sorunları tanımlamak en zor birkaçıdır. Genellikle, tüm bir kilitlenme bilgi dökümü çözümlemesinde, zarar görmüş ve neden tamamen ilgisiz bir kod bloğunu sorunları gibi bir veri alanı olarak gerçek sorun belirtisi olma görülebilir. Şimdi kadar bellek zarar kod kesimi bulmak hemen hemen olanaksız.

Kaynak havuzu zarar, şimdi havuzu zarara neden adresindeki yönerge belirlenebilir. Özel havuz adlı yeni BIR bellek yönetimi hizmet, Windows NT 4.0 Service Pack 4 (SP4), Windows 2000, Windows XP, Windows Server 2003, Windows Vista ve Windows Server 2008 ile bulunur. Özel havuz yardımcı programı, ayrılmış alanı dışında bellek yazarak havuzu veri zarar çekirdek modu bileşeni belirtir.

Not Bellek ayarlama Windows Vista ve Windows Server 2008 için geçerli değildir. Özel havuz özelliği ancak bu ürünler için uygulanır.

Daha fazla bilgi

Önemli Bu bölüm, yöntem veya görev kayıt defterini nasıl söyleyin adımları içerir. Ancak kayıt defterini hatalı olarak değiştirirseniz önemli sorunlar oluşabilir. Bu nedenle, bu adımları dikkatlice uyguladığınızdan emin olun. Ek koruma için, kayıt defterini değiştirmeden önce yedeklemeyi unutmayın. Bir sorun oluşursa kayıt defterini daha sonra geri yükleyebilirsiniz. Kayıt defterini yedekleme ve geri yükleme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
322756  (http://support.microsoft.com/kb/322756/ ) Windows'da kayıt defterini yedekleme ve geri yükleme


Özel havuzu yardımcı programını aşağıdaki ölçütlere uyan ExAllocatePoolWithTag istenen her havuz ayırma için iki sanal bellek sayfası ayırır:
  • Havuzu bir sayfaya sığıp en büyük ayırma'inden daha küçük bir boyut için tahsisat isteği olmalıdır.
  • Istek, kayıt defterindeki PoolTag belirtimi eşleşmesi gerekir.
Havuzu taşması algılaması için ilk sayfa, sayfanın sonundaki tahsisat içerecek biçimde kullanılır. Ikinci sayfa koruma sayfadır. Alt çalışma havuzu algılaması için ilk sayfa koruma sayfadır. Sayfanın başına tahsisat içeren bir sayfa izler.

Taşma algılama, büyük olasılıkla en kullanılan olur. Taşması algılaması için istenen tahsisat ilk sayfanın sonuna kadar isteği boyutu sayfa sonundan yedekleme tarafından yerleştirilir. Ayırma boyutu için bir 8 bayt sınırının yukarı yuvarlanır. Bir desen anahtar boyutu ve havuzu etiket bilgilerini üstbilgisi ilk sayfanın ilk sekiz bayt konumunda yazılır. Desen, ayrıca sayfa yayılır. Tahsisat en yakın 8 bayt sınırında konumlanacağını için tahsisat aşağıdaki kadar yedi slop bayt olabilir. Desen de tahsisat aşağıdaki slop bayt yazıldı.

Ikinci sayfa koruma sayfasıdır. Erişim yok koruması ile işaretlenmiş bir özel sayfa tablosu girdisi (PTE) sayfa koruma oluşur. Erişim yok koruması bu ikinci sayfası işaretleyerek, okumaya veya ilk sayfa sonunu hemen yazmaya çalıştığı herhangi bir kod bir "Dur 0x0000000A" ya da Dur 0x0000001E Hatasına neden olan bir erişim ihlaline neden olur. Bu, birisinin havuzu zarara neden olan tam bir yönerge bulmak için sistem hata ayıklama sağlar.

Tahsisat ötesinde, ancak değil sayfanın ötesine yazma violators yakalamak için bir yedekleme denetimi serbest havuza isteği sırasında tahsisat sonunda slop bayt doğrulandığı (ExFreePoolWithTag). Tahsisat başlıktaki her şeyi slop bayt alanına yazılır olup olmadığını belirlemek için desen slop bayt karşılaştırılır. Doğrulama onay çalışmazsa, 0x00000001A Dur hatası oluşuyor.

Bu denetim, mutlaka tam havuzu zarara neden olan kod bloğunu bulmaz. Ancak, bunu zararı neden olan bileşeni belirlemek yardımcı olabilir.

Özel havuz yardımcı programı'nı etkinleştirmek için <a0></a0>, aşağıdaki anahtarları ve değerleri kayıt defterine ekleyin:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Değer adı: PoolTag
Veri türü: REG_DWORD
Veri: havuzu etiketi maskesi | tahsisat boyutu maskesi | 0
Havuzu etiketi maskesi özel havuzda koymak istediğiniz havuzu maskeleme karakteri içeren havuzu etiketi kimliğidir. Bu maskeyi onaltılık olarak ters sırada belirtilmeli. Bu maskesi de içerebilir "?" tek bir karakteri maskelemek için veya "*" etiketinin sonuna buradan maskesi. Örneğin, "Nt ile" ile başlayan bir havuz etiketi tüm havuzlar izlemek için <a0></a0>, "2A744E" (tırnak işaretleri olmadan), temsil eden belirtin "* tN".

Aşağıdaki tabloda daha fazla örnek listeler.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Ayırma boyutu maskesi belirtimi, belirtilen boyuttaki tüm havuz ayırmaları özel havuza yerleştirir. Bu, ayrıca onaltılık olarak belirtilir. Örneğin, 32 bayt tüm ayırmaları özel havuzda konumlandırıldığından 0x20 belirtin.

Sıfır (0x0) belirtilmişse, özel havuz yardımcı programı başlatılamadı. Kayıt defterindeki PoolTag kayıt defteri değeri tanımlanırsa, buna ek olarak, özel havuz yardımcı programı başlatılamadı.
Değer adı: PoolTagOverruns
Veri türü: REG_DWORD
Veri: 1 | 0
1, havuz ayırma taşmalarının belirtilen etiket için algılanır gösterir. Tahsisat, sayfanın sonuna yerleştirilir ve koruma sayfası izler.

0, havuz ayırma underruns etiketi algılanır gösterir. Tahsisat, sayfanın başında bulunur ve koruma sayfası tahsisat içeren sayfadan önce gelir.

Bu iki kayıt defteri anahtarlarını oluşturmak için ortak kullanım örnekleri aşağıdaki gibi olur:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Değer adı: PoolTag
Veri türü: REG_DWORD
Veri: 0x2A

Değer adı: PoolTagOverruns
Veri türü: REG_DWORD
Veri: 1


Not Özel havuz kullandığınızda, Windows NT Terminal Server 4.0, devre dışı KStackPool bırakmanız gerekir. Bunu yapmak için <a0></a0>, aşağıdaki kayıt defteri değerini ekleyin:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Değer adı: EnableKStackPool
Veri türü: REG_DWORD
Veri: 0

1 - Her zaman etkin KStack havuzu
2 - 256 MB veya daha fazla belleğe (varsayılan) olan bilgisayarlar için etkin KStack havuzu
256 MB veya daha fazla belleği olan Terminal Server bilgisayarlarında bu değişiklik yapmazsanız, alabileceğiniz "Dur 0x00000078 (PHASE0_EXCEPTION)" hata iletileri.


Not Yetersiz özel sayfa tablosu girdileri (PTE) varsa, Windows Server 2003'te özel havuz özelliği çalışmayabilir. Bu sorun, genellikle 1 GB'DEN fazla RAM içeren ve varsayılan değerlerini ayarlamak bilgisayarın bellek yönetimi ayarlama değerleri olan tek kullanıcı terminal sunucularında oluşur. Bu sorun, Windows Server 2003'ün 64-bit sürümlerinde oluşmaz.

Bellek döküm dosyasını analiz sorunun, aşağıdaki bilgileri içerebilir:
*** 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 small
Shared 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 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
Sorunu çözümlemeyi tahsis edilen özel havuza boyutu olarak doğrulayabilirsiniz. Bu durumda, sorun, aşağıdaki özel havuz PTE değerlerinin eşit olduğu için oluşur:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Bu sorun, üç MmSpecialPoolRejected</a0> kayıt defteri girdisinin değeri ise de oluşabilir veya daha büyük.

Bu soruna geçici bir çözüm bulmak için <a0></a0>, izin verilen disk belleği olan havuz boyutundan daha küçük bir değere <a1>PagedPoolSize</a1> kayıt defteri girdisinin değerini yapılandırın. Örneğin, bir değer olarak <a0>PagedPoolSize</a0> kayıt defteri girdisini ayarlayın 256 MB. Daha büyük bir değer yapılandırmak istiyorsanız, daha büyük bir disk belleği havuzu boyutu bilgisayarın gereksinimini belirlemek için performans izleyicisi yardımcı programını kullanın.

PagedPoolSize kayıt defteri girişi için aşağıdaki değerleri kullanabilirsiniz:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Bir hizmet paketi olmayan Windows Server 2003 için:

Değer adı: PagedPoolSize
Veri türü: REG_DWORD
Veri: 10000000
Temel: onaltılık

Windows Server 2003 Service Pack 1 (SP1):

Değer adı: PagedPoolSize
Veri türü: REG_DWORD
Veri: FFFFFFFF
Temel: onaltılık

Not Bu makalede açıklanan kayıt defteri değişiklikleri yaptıktan sonra değişikliklerin etkili olması için neden bilgisayarı yeniden başlatın.

Özel havuz özelliği etkinleştirildikten sonra bilgisayar durduğunda ve yanıt veren (Bu bağlantı, bir kısmı veya tamamı ingilizce olan içeriğe işaret edebilir.) başlangıç sırasında bir mavi ekranda bir hata iletisi alıyorsunuz, bilinen son iyi yapılandırma seçeneğini kullanarak, bilgisayarı yeniden başlatın. Özel havuz özelliği etkinleştirme son bilinen iyi yapılandırma girişi başarılı bir oturum kadar sonra kayıt defterindeki yazılmaz.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT 4.0 Service Pack 4
  • Windows Vista Enterprise
  • Windows Vista Home Premium
  • Windows Vista Ultimate
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
Anahtar Kelimeler: 
kbmt kbenv kbhowto kbqfe KB188831 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:188831  (http://support.microsoft.com/kb/188831/en-us/ )