NtWriteFile STATUS_INVALID_HANDLE

Discussion in 'WASM.NT.KERNEL' started by qwe8013, Jun 9, 2010.

  1. qwe8013

    qwe8013 New Member

    Blog Posts:
    0
    Joined:
    May 28, 2009
    Messages:
    198
    Проблема с записью в файл:
    1)В DriverEntry создаю файл (OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE) - создаётся без проблем.

    2)В контексте другого процесса пытаюсь писать в файл, запись не происходит, и возвращается STATUS_INVALID_HANDLE, причём например ZwQueyObject
    работает нормально и возвращает STATUS_SUCCESS.

    3)В DriverUnload хендл закрывается без проблем.

    Почему NtWriteFile возвращает STATUS_INVALID_HANDLE?
     
  2. x64

    x64 New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2008
    Messages:
    1,370
    Location:
    Россия
    Покажи, как вызываешь NtWriteFile(), где именно вызываешь, и какие параметры передаёшь. И, кстати, почему NtWriteFile(), а не ZwWriteFile()? Это у тебя хук в SDT что ли или что?
     
  3. 0x6b65

    0x6b65 Забанен

    Blog Posts:
    0
    Joined:
    Oct 8, 2009
    Messages:
    92
    qwe8013
    При работе с kernel-описателем нужно использовать nt!ZwWriteFile(...)
     
  4. qwe8013

    qwe8013 New Member

    Blog Posts:
    0
    Joined:
    May 28, 2009
    Messages:
    198
    0x6b65
    Действительно, заработало, но почему нельзя использовать NtWriteFile, ведь NtCreateFile работает?
     
  5. x64

    x64 New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2008
    Messages:
    1,370
    Location:
    Россия
    Не совсем так, достаточно, чтобы previous mode было равно kernel-mode, а этого можно добиться и другим способом, например, зашедулить work item и вызвать в нём NtWriteFile() - тоже будет работать.
     
  6. x64

    x64 New Member

    Blog Posts:
    0
    Joined:
    Jul 29, 2008
    Messages:
    1,370
    Location:
    Россия
    Потому что NtCreateFile() создаёт хендл, а проверки предусмотрены только для его использования.
     
  7. 0x6b65

    0x6b65 Забанен

    Blog Posts:
    0
    Joined:
    Oct 8, 2009
    Messages:
    92
    qwe8013
    Уже писал в ветке http://wasm.ru/forum/viewtopic.php?pid=380652#p380652 :) Относительно этого случая: DriverEntry всегда вызывается ы контексте процесса SYSTEM. При этом будет создан kernel-описатель, который можно использовать либо при PreviousMode==KernelMode, либо в функциях, в которых явно указывается RequestorMode. Все Zw-функции сделаны для вызова Nt-функций (системных сервисов) так, что перед вызовом PreviousMode принудительно выставляется KernelMode, а после вызова - восстанавливается изначальный.
     
  8. 0x6b65

    0x6b65 Забанен

    Blog Posts:
    0
    Joined:
    Oct 8, 2009
    Messages:
    92
    Да, так тоже будет работать. Создание системного треда тоже даст работоспособный вариант. Ну и никто не запрещает править PreviousMode прямо в структуре текущей нити)))
     
  9. qwe8013

    qwe8013 New Member

    Blog Posts:
    0
    Joined:
    May 28, 2009
    Messages:
    198
    Ясно, благодарю за ответы.