The SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION bug check has a value of 0x000000C1. This indicates that the driver wrote to an invalid section of the special memory pool.
The following parameters are displayed on the blue screen. Parameter 4 indicates the type of violation.
| Parameter 1 | Parameter 2 | Parameter 3 | Parameter 4 | Cause of Error |
|---|---|---|---|---|
| Address that the driver tried to free | Reserved | 0 | 0x20 | A driver attempted to free pool which was not allocated. |
| Address that the driver tried to free | Bytes requested | Bytes calculated (actually given to the caller) | 0x21, 0x22 |
A driver attempted to free a bad address. |
| Address that the driver tried to free | Address where bits are corrupted | Reserved | 0x23 | A driver freed an address while nearby bytes on same page have been corrupted. |
| Address that the driver tried to free | Address where bits are corrupted | Reserved | 0x24 | A driver freed an address when bytes after end of allocation have been overwritten. |
| Current IRQL | Pool type | Number of bytes | 0x30 | A driver attempted to allocate pool at incorrect IRQL. |
| Current IRQL | Pool type | Address that the driver tried to free | 0x31 | A driver attempted to free pool at incorrect IRQL. |
The _POOL_TYPE codes are enumerated in ntddk.h. In particular, zero indicates nonpaged pool and one indicates paged pool.
A driver has written to an invalid section of the special memory pool.
Obtain a backtrace of the current thread. This backtrace will usually reveal the source of the error.
For information about the special pool, see Special Memory Pool.