Конференция "WinAPI" » Zw - Nt. Разница в user-mode.
 
  • Riply © (14.09.08 23:46) [0]
    Здравствуйте !
    Объясните, пожалуйста в чем разница при вызовах 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 ?  :)
  • Германн © (15.09.08 02:17) [1]

    > Riply ©   (14.09.08 23:46)
    >
    > Здравствуйте !
    > Объясните, пожалуйста в чем разница при вызовах Nt и Zw
    > функций в юзер-моде ?

    Саш. ИШ, как он сам сказал, нынче "безынетный"! Так на кого ты расчитываешь?
  • Rouse_ © (15.09.08 09:32) [2]
    Разницы абсолютно никакой, а то что говорят о использовании Nt префикса, может означать все что угодно, вплоть до последующего скрытия Zw функций из списка экспорта NTDLL
  • slow!alfamoon!com (15.09.08 11:17) [3]
    +1 к Rouse_
  • Riply © (15.09.08 16:18) [4]
    Спасибо. Успокоили.
    А то я уж решила, что что-то здесь "не так" :)
  • KilkennyCat © (15.09.08 17:26) [5]
    На уровне ядра мы также имеем аналогичные пары функций, но между ними имеется одно различие, функции с префиксом Zw производят перед выполнением действия проверки системы безопасности (прав пользователя), а функции с префиксом Nt - нет.

    Из пользовательского режима через интерфейс системных вызовов нам доступны Nt функции. Zw функции следует вызывать тогда, когда передающиеся им параметры были взяты из Usermode, тогда будут проведены все необходимые проверки.

    (с)http://wasm.ru/article.php?article=apihook_3
  • Rouse_ © (15.09.08 18:07) [6]

    > функции с префиксом Zw производят перед выполнением действия
    > проверки системы безопасности (прав пользователя)

    Zw функции, вызываются через KiSystemService (т.н. в обиходе шлюз INT2E), который переводит поток в режим ядра используя SDT потока, а не занимается проверками прав пользователя :) Nt функции работают же напрямую с кодом.
  • Игорь Шевченко © (16.09.08 13:33) [7]
    При вызове функций из NTDLL из пользовательского режима без разницы.
    При вызове функций из NTOSKRNL разница есть, описанная в [5]
    Соответственно, если будет кривой параметр при вызове функции из NTOSKRNL, если вызвать функцию с префиксом Nt, то получится синий экран, а если Zw - то вызов вернет код ошибки.
  • Riply © (16.09.08 17:34) [8]
    Спасибо.

    Еще в догонку:
    В чем отличие функций, например, такого типа: _PsGetCurrentThread и _KeGetCurrentThread ?
  • Игорь Шевченко © (16.09.08 17:52) [9]
    Riply ©   (16.09.08 17:34) [8]


    > В чем отличие функций, например, такого типа: _PsGetCurrentThread
    > и _KeGetCurrentThread ?


    первой нету, вторая возвращает указатель на объект KTHREAD
  • Игорь Шевченко © (16.09.08 17:55) [10]

    > первой нету


    Пардон, ошибся.

    Первая возвращает указатель на объект ETHREAD (не у всякого KTHREAD может быть ETHREAD)
  • KilkennyCat © (16.09.08 18:03) [11]

    > Игорь Шевченко

    Спасибо!
    А то Микрософт утверждает, что они идентичны, и я для себя просто считал, что если я в дальнейшем использую Ke*, то KeGetCurrentThread
  • Riply © (16.09.08 18:16) [12]
    > Игорь Шевченко

    Спасибо.
 
Конференция "WinAPI" » Zw - Nt. Разница в user-mode.
Есть новые Нет новых   [134435   +33][b:0][p:0]