BAD_POOL_CALLER means a device diver is telling the system to free memory that it does not own.
Often this is a programming mistake in the driver, the driver frees up memory to the system and the call works, then it makes a mistake and tries to free the same memory back to the system and the call fails (and you get this bugcheck).
what can also happen is that another driver writes over the first drivers data then that driver fails because its data is corrupted and it tries to free up bogus memory addresses (memory it does not own, which cause this bugcheck)
run bluescreenview.exe or whocrashed.exe and look at the driver name listed for the BAD_POOL_CALLER bugcheck. With luck, it will name a OEM driver that you can get a update for. If it names a windows core driver, you most likely have a memory problem, (update BIOS and run memtest86 to test)
or you have another driver corrupting memory. run cmd.exe as an admin, then run verifier.exe /standard /all and reboot your system, and wait for the next bugcheck. Note: use verifier.exe /reset to turn of verifier when you are done testing.
On the next bugcheck verifiere functions should try to catch the corruption as it happens rather than when the second driver attempts to free the memory.
the bad driver should be listed in the memory .dmp file.