Проблема с записью в файл: 1)В DriverEntry создаю файл (OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE) - создаётся без проблем. 2)В контексте другого процесса пытаюсь писать в файл, запись не происходит, и возвращается STATUS_INVALID_HANDLE, причём например ZwQueyObject работает нормально и возвращает STATUS_SUCCESS. 3)В DriverUnload хендл закрывается без проблем. Почему NtWriteFile возвращает STATUS_INVALID_HANDLE?
Покажи, как вызываешь NtWriteFile(), где именно вызываешь, и какие параметры передаёшь. И, кстати, почему NtWriteFile(), а не ZwWriteFile()? Это у тебя хук в SDT что ли или что?
0x6b65 Действительно, заработало, но почему нельзя использовать NtWriteFile, ведь NtCreateFile работает?
Не совсем так, достаточно, чтобы previous mode было равно kernel-mode, а этого можно добиться и другим способом, например, зашедулить work item и вызвать в нём NtWriteFile() - тоже будет работать.
qwe8013 Уже писал в ветке http://wasm.ru/forum/viewtopic.php?pid=380652#p380652 Относительно этого случая: DriverEntry всегда вызывается ы контексте процесса SYSTEM. При этом будет создан kernel-описатель, который можно использовать либо при PreviousMode==KernelMode, либо в функциях, в которых явно указывается RequestorMode. Все Zw-функции сделаны для вызова Nt-функций (системных сервисов) так, что перед вызовом PreviousMode принудительно выставляется KernelMode, а после вызова - восстанавливается изначальный.
Да, так тоже будет работать. Создание системного треда тоже даст работоспособный вариант. Ну и никто не запрещает править PreviousMode прямо в структуре текущей нити)))