В krnel процедуры ZwXxx представляют собой всего лишь обертки вокруг NtXxx, сообщающие ядру, что вызывающий объект является компонентом режима ядра, а не пользовательским приложением. Когда вызов поступает из usermode, ядро выполняет дополнительные проверки безопасности.
Итак, используйте ZwXxx, когда в ядре.
Альтернативный подход для чтения/записи памяти из/в другой процесс:
- получить адрес своего технологического объекта (PsLookupProcessByProcessId),
- переключателя текущего потока к его адресному пространству (KeStackAttachProcess),
- выполнить операцию (чтение/запись ...),
- переключатель адресного пространства обратно (KeUnstackDetachProcess),
- декремент счетчик ссылок увеличивается на (1) (ObDereferenceObject).
Вы должны получать доступ к памяти в контексте во время фазы захвата, после чего вы должны работать только с захваченными значениями. В противном случае у вас есть уязвимость системы безопасности. –