How to Enable the Special Pool Feature to Isolate Pool DamageID: Q188831
|
Pool damage may be the root cause of many of the most evasive issues
with Windows NT. Pool damage is caused when a kernel-mode component
writes to memory outside of its allocated pool area. By writing to memory
beyond the boundary of its allocated area, it is likely that another area of allocated memory, possibly owned by another component, is overwritten. This damage can cause problems such as blue screens in completely unrelated areas of code. A kernel-mode component reading beyond its allocated area can also cause problems.
Whether it is caused by Original Equipment Manufacturers (OEM) drivers or problems in Windows NT, pool damage problems are some of the most difficult to identify. Usually, all that can be seen in a crash dump analysis is the symptom of the real problem, such as a data area becoming damaged and causing problems in a completely unrelated piece of code. Up until now it has been almost impossible to identify the piece of code damaging the memory.
The source of pool damage can now be identified at the instruction causing the pool damage. A new memory management utility called Special Pool is included with Windows NT 4.0 Service Pack 4 (SP4) and Windows 2000.
The Special Pool utility identifies the kernel-mode component that is damaging pool data by writing to memory outside its allocated area.
WARNING: Using Registry Editor incorrectly can cause serious problems that
may require you to reinstall your operating system. Microsoft cannot
guarantee that problems resulting from the incorrect use of Registry Editor
can be solved. Use Registry Editor at your own risk.
For information about how to edit the registry, view the "Changing Keys and
Values" Help topic in Registry Editor (Regedit.exe) or the "Add and Delete
Information in the Registry" and "Edit Registry Data" Help topics in
Regedt32.exe. Note that you should back up the registry before you edit it.
If you are running Windows NT, you should also update your Emergency
Repair Disk (ERD).
The way the Special Pool utility works is by allocating two pages of virtual memory for every pool allocation requested through ExAllocatePoolWithTag that matches the following criteria:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
Memory Management
Value Name: PoolTag
Data Type : REG_DWORD
Data : Pool tag mask | Allocation size mask | 0
The pool tag mask is the pool tag ID containing masking characters of the pool in which you want to put in the special pool. This mask must be specified in hexadecimal in reverse order. This mask may also contain "?" to mask a single character or "*" to mask from here to the end of the tag. For example, to monitor all pools with a pool tag
beginning with "nt", specify 2A746E, which
represents "*tn".
Pool to monitor Character representation Pool tag mask
----------------------------------------------------------
All pools "*" 0x2A
N??s "s??n" 0x6E3F3F73
Allocation size mask specification places all pool allocations of a specified size into the special pool. This is also specified in hexadecimal. For example, if all allocations of 32 bytes are placed in the special pool, specify 0x20.
Value Name: PoolTagOverruns
Data Type : REG_DWORD
Data: 1 | 0
"1" indicates that pool allocation overruns are detected for the tag specified. The allocation is placed at the end of the page and the guard page follows.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory ManagementIf you do not make this change on Terminal Server computers with >=256 MB, you may receive STOP 0x00000078 (PHASE0_EXCEPTION) error messages.
EnableKStackPool
Data Type: REG_DWORD
0 - KStack pool disabled
1 - KStack pool always enabled
2 - KStack pool enabled for >= 256 MB computers (default)
Additional query words:
Keywords : kbenv kbtool
Version : WINDOWS:2000; winnt:4.0 SP4
Platform : WINDOWS winnt
Issue type : kbhowto
Last Reviewed: May 25, 1999