Bug Check 0x19: BAD_POOL_HEADER
The BAD_POOL_HEADER bug check has a value of 0x00000019. This indicates that a pool header is corrupt.
Important
This article is for programmers. If you're a customer who has received a blue screen error code while using your computer, see Troubleshoot blue screen errors.
BAD_POOL_HEADER Parameters
Parameter 1 indicates the type of violation. The meaning of the other parameters depends on the value of Parameter 1.
Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Cause of Error |
---|---|---|---|---|
0x2 |
The pool entry being checked |
The size of the pool block |
0 |
The special pool pattern check failed. (The owner has likely corrupted the pool block.) |
0x3 |
The pool entry being checked |
The read-back flink freelist value |
The read-back blink freelist value |
The pool freelist is corrupt. (In a healthy list, the values of Parameters 2, 3, and 4 should be identical.) |
0x5 |
One of the pool entries |
Reserved |
The other pool entry |
A pair of adjacent pool entries have headers that contradict each other. At least one of them is corrupt. |
0x6 |
One incorrectly-calculated entry |
Reserved |
The bad entry that caused the miscalculation |
The pool block header's previous size is too large. |
0x7 |
0 |
Reserved |
The bad pool entry |
The pool block header size is corrupt. |
0x8 |
0 |
Reserved |
The bad pool entry |
The pool block header size is zero. |
0x9 |
One incorrectly-calculated entry |
Reserved |
The bad entry that caused the miscalculation |
The pool block header size is corrupted (it is too large). |
0xA |
The pool entry that should have been found |
Reserved |
The virtual address of the page that should have contained the pool entry |
The pool block header size is corrupt. |
0xD, 0xE, 0xF, 0x23, 0x24, 0x25 |
Reserved |
Reserved |
Reserved |
The pool header of a freed block has been modified after it was freed. This is not typically the fault of the prior owner of the freed block; instead it is usually (but not always) due to the block preceding the freed block being overrun. |
0x20 |
The pool entry that should have been found |
The next pool entry |
Reserved |
The pool block header size is corrupt. |
0X21 |
The pool pointer being freed |
The number of bytes allocated for the pool block |
The corrupted value found following the pool block |
The data following the pool block being freed is corrupt. Typically this means the consumer (call stack) has overrun the block. |
0X22 |
The address being freed |
Reserved |
Reserved |
An address being freed does not have a tracking entry. This is usually because the call stack is trying to free a pointer that either has already been freed or was never allocated to begin with. |
Cause
The pool is already corrupted at the time of the current request.
This may or may not be due to the caller.
Resolution
The internal pool links must be walked using the kernel debugger to figure out a possible cause of the problem.
Then you can use special pool for the suspect pool tags, or use Driver Verifier "Special Pool" option on the suspect driver. The !analyze extension may be of help in pinpointing the suspect driver, but this is frequently not the case with pool corrupters.
Use the steps described in Analyze Bug Check Blue Screen Data to gather the Stop Code Parameters. Use the stop code parameters to determine the specific type of code behavior you are working to track down.
Driver Verifier
Driver Verifier is a tool that runs in real time to examine the behavior of drivers. If it see errors in the execution of driver code, it proactively creates an exception to allow that part of the driver code to be further scrutinized. The driver verifier manager is built into Windows and is available on all Windows PCs. To start the driver verifier manager, type Verifier at a command prompt. You can configure which drivers you would like to verify. The code that verifies drivers adds overhead as it runs, so try and verify the smallest number of drivers as possible. For more information, see Driver Verifier.
Windows Memory Diagnostics
If this Bug Check appears inconsistently, it could be related to faulty physical memory.
Run the Windows Memory Diagnostics tool, to test the memory. In the control panel search box, type Memory, and then select Diagnose your computer's memory problems. After the test is run, use Event viewer to view the results under the System log. Look for the MemoryDiagnostics-Results entry to view the results.