Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vazhnoe.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
843.48 Кб
Скачать

29. Структура системного программного интерфейса ос Windows (Native api). Nt-функции и Zw-функции в пользовательском режиме и режиме ядра ос Windows.

Все функции ядра Windows, доступные пользовательским приложениям, экспортируются библиотекой NtDll.dll. Системные функции называются Native API.

Native API - в основном недокументированный интерфейс программирования приложений (API), предназначенный для внутреннего использования в операционных системах семейства Windows NT, выпущенных Microsoft. В основном он используется во время загрузки системы, когда другие компоненты Windows недоступны, а также функциями системных библиотек (например, kernel32.dll), которые реализуют функциональность Windows API. Точкой входа программ, использующих Native API является функция DriverEntry(), так же как и в драйверах устройств Windows.

Как уже ранее упоминалось, пользовательские приложения не вызывают напрямую системные службы Windows. Вместо этого ими используется одна или несколько DLL-библиотек подсистемы. Эти библиотеки экспортируют документированный интерфейс, который может быть использован программами, связанными с данной подсистемой. Например, API-функции Windows реализованы в DLL-библиотеках подсистемы Windows, таких, как Kernel32.dll, Advapi32.dll, User32.dll и Gdi32.dll.

Ntdll.dll является специальной библиотекой системной поддержки, предназначенной, главным образом, для использования DLL-библиотек подсистем. В ней содержатся функции двух типов:

  • функции-заглушки, обеспечивающие переходы от диспетчера системных служб к системным службам исполняющей системы Windows;

  • вспомогательные внутренние функции, используемые подсистемами, DLL-библиотеками подсистем и другими исходными образами.

Первая группа функций предоставляет интерфейс к службам исполняющей системы Windows, которые могут быть вызваны из пользовательского режима. К этой группе относятся более чем 400 функций, среди которых NtCreateFile, NtSetEvent и т. д. Как уже отмечалось, основная часть возможностей, присущих данным функциям, доступна через Windows API. Но некоторые возможности недоступны и предназначены для использования только внутри операционной системы.

Для каждой из этих функций в Ntdll содержится точка входа с именем, совпадающим с именем функции. Код внутри функции содержит зависящую от конкретной архитектуры инструкцию, осуществляющую переход в режим ядра для вызова диспетчера системных служб, который после проверки ряда параметров вызывает настоящую системную службу режима ядра, реальный код которой содержится в файле Ntoskrnl.exe.

Исполняющая система Windows находится на верхнем уровне файла Ntoskrnl.exe. (Ядро составляет его нижний уровень.)

Системные функции имеют префикс Nt, например NtReadFile. В режиме ядра дополнительно существуют парные функции с  префиксом Zw, например ZwReadFile. Они вызываются  драйверами вместо Nt-функций. В пользовательском режиме Zw-имена тоже объявлены, но эквивалентны Nt-именам.

Если Nt-функция вызывается внутри ядра:

  • Проверка параметров не выполняется.

  • Такая функция может быть недоступна в ядре, т.е. может не экспортироваться модулем Ntoskrnl.exe.

  • Вызов Nt-функции с передачей ей указателей на память ядра закончится ошибкой.

Вместо Nt-функций модули ядра вызывают Zw-функции.

  • Zw-функция делает следующее:

  • Загружает в регистр EAX номер функции.

  • Загружает в регистр EDX указатель на вершину параметров в стеке ядра.

  • Вызывает соответствующую ей Nt-функцию. При этом проверка параметров не выполняется.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]