Недавно, ковыряя один драйвер обнаружил, что он при модификации таблицы MajorFunction другого драйвера отключает защиту памяти, т.е., делает, что то типа CR0 &= 0xFFFEFFFF. Непосредсвенно после модификации CR0 возвращается в свое исходное значение. Я никогда раньше подобного трюка с регистром CR0 не делал и вроде все работало. Нужно ли отменять зашиту памяти при изменении MajorFunction?
Нет, DRIVER_OBJECT обычно доступен на запись (обратная ситуация не представляется вероятной). И вообще, трюки с CR0 - зло, я стопицот раз писал почему.
Проверь откуда вызывается код что модифицирует память, вероятно это универсальная функция используется несколько раз.