特別なプール機能を使用して、プールの損傷を分離する方法

文書翻訳 文書翻訳
文書番号: 188831 - 対象製品
この記事は、以前は次の ID で公開されていました: JP188831
すべて展開する | すべて折りたたむ

概要

プールの損傷の最も多く生じる回避の問題が Windows NT します。 プール破損の原因は、カーネル モードではメモリに割り当てられたプール領域の外側には、コンポーネントを書き込みます。書き込みでその割り当てられた領域の境界を超えるメモリが可能性が高いその他可能性がある他のコンポーネントによって所有されている割り当て済みのメモリ領域が上書きされます。このブルー スクリーンの問題完全に関係のない損傷することができます。コードの領域。カーネル モードのコンポーネントがその割り当てられた領域でブルーすることができます。問題が発生もします。

元の機器で発生するかどうか製造元 (OEM) ドライバーでは、Windows の問題、プールの損傷の問題か一部の特定しにくい。通常、表示されます、クラッシュ ダンプの分析は、データ領域など、実際の問題の症状です。破損している完全に関係のないコードのブロックの問題を引き起こすように。これまでは、コードのセグメントを見つけることはほとんど不可能でした。メモリが破損します。

プールの損傷の原因が識別できます。命令が、プールの損傷の原因。新しいメモリ管理ユーティリティつまり特別なプールの名前が Windows NT 4.0 Service Pack 4 で (SP4)、Windows 2000 では、含まれてWindows XP、Windows Server 2003、Windows Vista および Windows Server 2008。Special Pool ユーティリティプールのデータを破壊するを記述することにより、カーネル モードのコンポーネントを識別します。メモリが割り当てられている領域の外側。

メモ メモリの調整も Windows Vista と Windows Server 2008 には適用されません。ただし、特別なプール機能製品の適用します。

詳細

重要このセクション、方法、またはタスクには、レジストリの変更方法が記載されています。レジストリを誤って変更すると、深刻な問題が発生することがあります。そのため、この手順を慎重に実行するようにしてください。万一に備えて、編集の前にレジストリをバックアップしてください。そうすることで、問題が発生した場合でもレジストリを復元できます。レジストリをバックアップおよび復元する方法の詳細については、以下のサポート技術情報番号をクリックしてください。
322756 Windows でレジストリをバックアップおよび復元する方法


特別なプールのユーティリティ仮想メモリの 2 つのページが要求されたすべてのプール割り当てを割り当てますExAllocatePoolWithTag では、次の条件に一致します。
  • 割り当て要求のサイズよりも小さくする必要があります、プール ページに収まる最大の割り当て。
  • 要求内の PoolTag 指定と一致する必要があります、レジストリに。
プールのオーバーランの検出を最初のページを格納する使用します。ページの最後の割り当てです。2 ページ目はガード ページです。をプールのアンダーランの検出、1 ページ目はガード ページです。続けていますが先頭のページの割り当てが含まれているページです。

オーバーランの検出では、おそらく最もよく使われるです。オーバーランの検出を割り当てです配置の最初のページの最後にバックアップを要求します。要求のサイズ、ページの端から。割り当てサイズに丸められます、8 バイトの境界。パターン キー、サイズ、およびプール タグの情報です。最初のページの最初の 8 バイトでヘッダーに書き込まれます。パターンまた、ページ全体が伝達されます。割り当て上に配置されているため、8 バイトの境界近くにある可能性がありますの後で 7 つの未使用バイトを割り当てです。パターンが後ろの残余バイトにも書き込まれます、割り当てです。

2 ページ目はガード ページです。ガード ページアクセスなしにされて特別なページ テーブル エントリ (PTE) で構成されます。保護します。この 2 ページ目を非アクセスの保護、任意のコードをマークすることによって読み取りまたは超えるの最初のページのすぐに原因を書き込みしようとしています。Stop 0x0000000A または Stop 0x0000001E エラーで結果アクセス違反が発生します。これによって正確な命令を検索するのには、システムをデバッグすることができます。プール破損をします。

書き込む違反者をキャッチするためのバックアップ チェックとして最後の割り当てが、ページの未使用の終わりを超えて割り当ての末尾バイト プールの解放要求時に検証されます。(Exfreepoolwithtag) 時。残余バイトのパターンを比較します。割り当てのヘッダーはどうかを確認するのには、未使用バイト領域に上書きされます。検証チェックが機能しない場合は、"Stop 0x00000001a"エラー発生します。

このチェックは、必ずしも正確なブロックが検出されません。プール破損が発生するコードです。ただし、そのコンポーネントを発見することが損害を与えます。

Special Pool ユーティリティを有効にするのには、追加のキーと値をレジストリに次の。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


値の名前。 PoolTag
データ型。 REG_DWORD
データ: プール タグ マスク |割り当てサイズ マスク |0
プール タグ マスク マスクが含まれているプール タグの ID です。特別なプールに追加するのにはプールの文字です。このマスク16 進数では逆の順序で指定してください。このマスクにも含めることがあります。「?」1 つ文字をマスクするにはまたは「*」場所からタグの終わりまでをマスクします。たとえば、"Nt"で始まるプール タグを持つすべてのプールをモニターするのを指定します。"を 2A744E"(二重引用符)、「* tN」。

を次の表の例を示します。
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
すべてのプール割り当ての割り当てサイズのマスク指定を配置します。特別なプール サイズを指定します。これは 16 進数で指定します。たとえば、次のように 32 バイトのすべての割り当てを特別なプールに配置すると、0x20 を指定します。

0 (0X0) を指定した場合、Special Pool ユーティリティ初期化されていません。さらに、Special Pool ユーティリティ場合は初期化されていませんPoolTag レジストリ値はレジストリで定義されていません。
値の名前: PoolTagOverruns
データ型。 REG_DWORD
データ: 1 |0
1 を示すプール割り当てのオーバーランを検出します。タグを指定します。割り当てページし、ガードの最後にあります。ページの後に。

プール割り当てのアンダーランが検出されている場合は 0、タグです。割り当てを変更して、ガード ページの先頭にあります。割り当てを含むページの前に付属しています。

これらの 2 つのレジストリ キーを作成するのには、一般的な使用例場合は、次のようにします。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


値の名前。 PoolTag
データ型。 REG_DWORD
データ: 0x2A

値の名前: PoolTagOverruns
データ型。 REG_DWORD
データ分の 1


メモ Windows NT Terminal Server 4.0 では、KStackPool を無効にする必要があります。特別なプールを使用するとします。これを行うには、次のレジストリ値を追加します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


値の名前:EnableKStackPool
データ型。 REG_DWORD
データ: 0

1 - KStack プールは常に有効に
2 - KStack プール 256 MB またはそれ以上のコンピューターを有効にメモリ (既定値)
端末での変更をしない場合256 MB またはより多くのメモリを持つサーバー コンピューターは、"0x00000078 の STOP が表示されます。設定した」エラー メッセージ。


メモ 特別なプール機能不足のための特別なページ テーブル エントリ (Pte) がある場合は Windows Server 2003 では動作しません。この問題は、通常は 1 GB 以上の RAM が含まれている、既定値に設定、コンピューターのメモリ管理のチューニング値が単一ユーザーのターミナル サーバーに発生します。この問題では、Windows Server 2003 の 64 ビット バージョンでは発生しません。

メモリ ダンプ ファイルの分析、問題は、次の情報が含まれます。
*** 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
問題を確認するには、分析対象から割り当てられた特殊なプールのサイズをしています。ここでは、次の特別なプールの 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
データ型。 REG_DWORD
データ。 10000000
ベース: 16 進

Windows Server 2003 を Service Pack 1 (SP1) のインストールします。

値の名前。 PagedPoolSize
データ型。 REG_DWORD
データ。 FFFFFFFF
ベース: 16 進

メモ 記載されているレジストリの変更のいずれかを行った後で、この資料は、変更を有効にするのには、コンピューターを再起動します。

場合特別なプール機能を有効にすると、コンピューターが応答を停止します。(ハング)、し、起動中にブルー スクリーンにエラー メッセージを表示、再起動、前回正常起動時の構成オプションを使用してコンピューター。特別なプール機能を有効にすると最後正常なを書き込まれませんログオンが成功するまでレジストリ内のエントリを構成します。

プロパティ

文書番号: 188831 - 最終更新日: 2013年6月24日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • 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 Home Premium
  • Windows Vista Enterprise
  • Windows Vista Ultimate
  • 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 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:188831
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com