Как Windows замечает испорченную страницу
Оперативная память в Windows разбита на страницы, и диспетчер памяти следит за каждой. Свободные страницы он заранее заполняет нулями, чтобы выдавать их программам чистыми. Если в странице, которая должна состоять из одних нулей, обнаруживается изменённый бит, значит, в неё что-то записало, минуя систему. Microsoft прямо относит такую находку к аппаратным ошибкам памяти, и именно этот случай описывает первый вариант кода.
Второй вариант связан со сжатием памяти. Windows упаковывает редко используемые страницы и хранит их в оперативной памяти в сжатом виде, а при обращении распаковывает обратно. Если распаковка не сходится — не совпала контрольная сумма или данные не разжимаются, — это тоже след физической порчи. Ошибку в одном бите система в этом месте исправляет сама и работу не останавливает; синий экран появляется, когда повреждение серьёзнее.
Microsoft перечисляет три источника такой порчи: неисправная оперативная память; драйвер или устройство, которое неправильно пишет в память напрямую; устройство или прошивка, портящие память при переходах питания, например при засыпании и пробуждении. На вопрос «система или железо» код, таким образом, отвечает сам: железо или то, что работает с ним на самом низком уровне. Переустановка Windows здесь почти никогда не помогает — если виноват драйвер устройства, он вернётся вместе с устройством.
