- Windows Native API: When and why use Zw vs Nt prefixed api calls?
- 2 Answers 2
- Update:
- Внешняя компонента Native API для управления окнами и буфером обмена, получения снимков окон Windows и Linux
- Скачать файлы
- Специальные предложения
- См. также
- Внешняя компонента: Android tools Промо
- Вставка картинки из буфера обмена с помощью компоненты из Документооборота в форматированный документ и HTML поле на обычных и управляемых формах — тонкий клиент
- Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)
- Инструменты отладки Web-страниц в приложении на устройстве Android
- Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо
- Отрубаем зависшие на сервере процессы
- Диагностика контекста выполнения (внешняя компонента)
- Универсальная обертка для использования NATIVE компонент на платформе 1С 7.7, 8.0 и 8.1
- TextRadar — нечеткий поиск в тексте Промо
- Нано HTTP сервер — внешняя компонента для мобильного приложения 1C, на Android
- Перехват сканирования Android Native API
- Мобильная платформа. Уникальный идентификатор устройства Android при помощи внешней компоненты. Не IMEI
- Использование сборок .NET в 1С 7. и 8.x. Создание внешних Компонент. Промо
- Android Java и NativAPI C++ внешняя компонента для широковещательных сообщений (отправка и прием). Подключаем сканер ШК и клавиатуру к «1С мобильное приложение»
- Мобильная платформа. Реакция на внешнее событие в Android при помощи внешней компоненты
- Получение фото с веб-камеры
- Tool1CD Beta в деле Промо
- Быстрая печать этикеток (ZPL, EPL, TSPL, EZPL, GEPL, TSPL-EZ)
- Сканирование по TWAIN в 1С (обычные и управляемые формы)
- Клиент событий в «бесконечном» HTTP-соединении для 1С: Предприятие 8
- NativeDraw: Компонента рисования для 1С [V2.6.2] Промо
- Управление окнами и мониторами в 1С
- Маленькая и скромная мобильная внешняя компонента
- Native внешняя компонента для оповещения по UDP или TCP
- Компоненты распознавания и печати штрих-кодов Промо
Windows Native API: When and why use Zw vs Nt prefixed api calls?
In Native API Microsoft exports two versions of each api call, one prefixed with Zw and one with Nt, for eg. ZwCreateThread and NtCreateThread.
My question is what is the difference between those two versions of the calls and when and why one should use Zw or Nt exclusively? To my understanding Zw version ensures that the caller resides in kernel mode, whereas Nt doesn’t.
I am also wondering about the specific meaning for Zw and Nt prefixes/abbreviations? One can guess Nt probably refers to NT(New Technology) Windows family or Native(probably not)? As for Zw, does it stand for something?
2 Answers 2
Update:
Aside from Larry Osterman’s answer (which you should definitely read), there’s another thing I should mention:
Since the NtXxx variants perform checks as though the call is coming from user-mode, this means that any buffers passed to the NtXxs function must reside in user-mode address spaces, not kernel-mode. So if you call a function like NtCreateFile in your driver and pass it pointers to kernel-mode buffers, you will get back a STATUS_ACCESS_VIOLATION because of this.
A kernel-mode driver calls the Zw version of a native system services routine to inform the routine that the parameters come from a trusted, kernel-mode source. In this case, the routine assumes that it can safely use the parameters without first validating them. However, if the parameters might be from either a user-mode source or a kernel-mode source, the driver instead calls the Nt version of the routine, which determines, based on the history of the calling thread, whether the parameters originated in user mode or kernel mode.
Native system services routines make additional assumptions about the parameters that they receive. If a routine receives a pointer to a buffer that was allocated by a kernel-mode driver, the routine assumes that the buffer was allocated in system memory, not in user-mode memory. If the routine receives a handle that was opened by a user-mode application, the routine looks for the handle in the user-mode handle table, not in the kernel-mode handle table.
Also, Zw doesn’t stand for anything. See What Does the Zw Prefix Mean?:
The Windows native system services routines have names that begin with the prefixes Nt and Zw. The Nt prefix is an abbreviation of Windows NT, but the Zw prefix has no meaning. Zw was selected partly to avoid potential naming conflicts with other APIs, and partly to avoid using any potentially useful two-letter prefixes that might be needed in the future.
Внешняя компонента Native API для управления окнами и буфером обмена, получения снимков окон Windows и Linux
Изначально разрабатывалась как составная часть инструмента тестирования прикладных решений Vanessa Automation, однако имеет самостоятельную ценность и может быть использована с составе других продуктов. Главным достоинством компоненты является возможность получения снимка любого открытого окна 1С, даже если оно перекрыто другими окнами приложений.
Внешняя компонента поддерживает как синхронный, так и асинхронный вызов. Далее по тексту все примеры будут приводиться для синхронных вызовов.
Для создания объекта экземпляра внешней компоненты используйте имя WindowsControl.
В прилагаемом примере файлы внешней компоненты хранятся в макете _1cWinCtrl.
Реквизит формы МестоположениеКомпоненты используется для передачи макета компоненты между сервером и клиентом.
Многие свойства и методы компоненты возвращают сложные типы данных, которые сериализованы в строку формата JSON. Поэтому рекомендуется объявить в вызывающем модуле универсальную функцию, которая будет использоваться ниже в примерах работы компоненты:
Компонента преимущественно предназначена для управления окнами тонкого клиента «1С:Предприятие». Поскольку разрабатывалась она для работы в составе менеджера тестирования, имеется специальный метод для поиска запущенного экземпляра процесса клиента тестирования 1С по номеру порта подключения.
Используя идентификатор процесса, получаем список открытых окон приложения и для каждого окна его снимок. Если формы 1С открываются в режиме «Блокировать окно владельца», то список окон имеет иерархическую структуру, и у каждого элемента списка есть ссылка на идентификатор родительского окна.
В прилагаемом примере файлы внешней компоненты хранятся в макете _1cWinCtrl.
Реквизит формы МестоположениеКомпоненты используется для передачи макета компоненты между сервером и клиентом.
Подробная инструкция по работе с компонентой доступна на сайте: http://lintest.github.io
Скачать файлы
Наименование | Файл | Версия | Размер |
---|---|---|---|