The BAD_POOL_CALLER bug check has a value of 0x000000C2. This indicates that the current thread is making a bad pool request.
The following parameters are displayed on the blue screen. Parameter 1 indicates the type of violation.
| Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Cause of Error |
|---|---|---|---|---|
| 0x00 | 0 | Pool type | Pool tag | The current thread requested a zero-byte pool allocation. |
| 0x01, 0x02, or 0x04 |
Pointer to pool header | First part of pool header contents | 0 | The pool header has been corrupted. |
| 0x06 | Reserved | Pointer to pool header | Pool header contents | The current thread attempted to free pool which was already freed. |
| 0x07 | Reserved | Memory contents of the pool block | Pointer to pool header | The current thread attempted to free pool which was already freed. |
| 0x08 | Current IRQL | Pool type | Size of allocation, in bytes | The current thread attempted to allocate pool at an invalid IRQL. |
| 0x09 | Current IRQL | Pool type | Address of pool | The current thread attempted to free pool at an invalid IRQL. |
| 0x0A | Address of pool | Allocator's tag | Tag being used in the attempted free | The current thread attempted to free pool memory using the wrong tag.
(The memory may belong to another component.) |
| 0x0B, 0x0C, or 0x0D |
Address of pool | Pool allocation's tag | Bad quota process pointer | The current thread attempted to release a quota on a corrupted pool allocation. |
| 0x40 | Starting address | Start of system address space | 0 | The current thread attempted to free kernel pool at user-mode address. |
| 0x41 | Starting address | Physical page frame | Highest physical page frame | The current thread attempted to free a nonallocated nonpaged pool address. |
| 0x42 or 0x43 |
Address being freed | 0 | 0 | The current thread attempted to free a virtual address that was never in any pool. |
| 0x50 | Starting address | Start offset in pages from beginning of paged pool | Size of paged pool, in bytes | The current thread attempted to free a nonallocated paged pool address. |
| 0x60 | Starting address | 0 | 0 | The current thread attempted to free an invalid contiguous memory address.
(The caller of MmFreeContiguousMemory s passing a bad pointer.) |
| 0x99 | Address being freed | 0 | 0 | The current thread attempted to free pool with an invalid address.
(This code can also indicate corruption in pool header.) |
| 0x9A | Pool type | Number of bytes requested | Pool tag | The current thread marked an allocation request MUST_SUCCEED.
(This pool type is no longer supported.) |
| 0x9B | Pool type | Number of bytes requested | Caller's address | The current thread attempted to allocate a pool with a tag of zero.
(This would be untrackable, and possibly corrupt the existing tag tables.) |
| 0x9C | Pool type | Number of bytes requested | Caller's address | The current thread attempted to allocate a pool with a tag of "BIG".
(This would be untrackable, and possibly corrupt the existing tag tables.) |
The _POOL_TYPE codes are enumerated in ntddk.h. In particular, zero indicates nonpaged pool and one indicates paged pool.
A bad pool request has been made by the current thread.
Activate Driver Verifier to obtain more information about these errors. For details, see Driver Verifier.