-
Здравствуйте ! Объясните, пожалуйста в чем разница при вызовах Nt и Zw функций в юзер-моде ? Я полагала, что ее (разницы) нет, т.к. имеем одну и ту же "точку входа". Но почему тогда в MSDN, чуть ли не в описании к каждой функции, встречается замечание такого типа: "Note If the call to this function occurs in user mode, you should use the name "NtWriteFile" instead of "ZwWriteFile"." Почему они говорят что мы "should use" Nt вместо Zw ? :)
-
> Riply © (14.09.08 23:46) > > Здравствуйте ! > Объясните, пожалуйста в чем разница при вызовах Nt и Zw > функций в юзер-моде ?
Саш. ИШ, как он сам сказал, нынче "безынетный"! Так на кого ты расчитываешь?
-
Разницы абсолютно никакой, а то что говорят о использовании Nt префикса, может означать все что угодно, вплоть до последующего скрытия Zw функций из списка экспорта NTDLL
-
+1 к Rouse_
-
Спасибо. Успокоили. А то я уж решила, что что-то здесь "не так" :)
-
На уровне ядра мы также имеем аналогичные пары функций, но между ними имеется одно различие, функции с префиксом Zw производят перед выполнением действия проверки системы безопасности (прав пользователя), а функции с префиксом Nt - нет. Из пользовательского режима через интерфейс системных вызовов нам доступны Nt функции. Zw функции следует вызывать тогда, когда передающиеся им параметры были взяты из Usermode, тогда будут проведены все необходимые проверки. (с) http://wasm.ru/article.php?article=apihook_3
-
> функции с префиксом Zw производят перед выполнением действия > проверки системы безопасности (прав пользователя)
Zw функции, вызываются через KiSystemService (т.н. в обиходе шлюз INT2E), который переводит поток в режим ядра используя SDT потока, а не занимается проверками прав пользователя :) Nt функции работают же напрямую с кодом.
-
При вызове функций из NTDLL из пользовательского режима без разницы. При вызове функций из NTOSKRNL разница есть, описанная в [5] Соответственно, если будет кривой параметр при вызове функции из NTOSKRNL, если вызвать функцию с префиксом Nt, то получится синий экран, а если Zw - то вызов вернет код ошибки.
-
Спасибо.
Еще в догонку: В чем отличие функций, например, такого типа: _PsGetCurrentThread и _KeGetCurrentThread ?
-
Riply © (16.09.08 17:34) [8]
> В чем отличие функций, например, такого типа: _PsGetCurrentThread > и _KeGetCurrentThread ?
первой нету, вторая возвращает указатель на объект KTHREAD
-
> первой нету
Пардон, ошибся.
Первая возвращает указатель на объект ETHREAD (не у всякого KTHREAD может быть ETHREAD)
-
> Игорь Шевченко
Спасибо! А то Микрософт утверждает, что они идентичны, и я для себя просто считал, что если я в дальнейшем использую Ke*, то KeGetCurrentThread
-
> Игорь Шевченко
Спасибо.
|