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