Собственный API - Native API

В Собственный API легкий интерфейс прикладного программирования (API) используется Windows NT и пользовательский режим Приложения. Этот API используется на ранних этапах Процесс запуска Windows NT, когда другие компоненты и API все еще недоступны. Поэтому некоторые компоненты Windows, такие как Подсистема времени выполнения клиент / сервер (CSRSS), реализуются с использованием собственного API. Собственный API также используется подпрограммы такие как в kernel32.dll которые реализуют Windows API, API, на основе которого создается большинство компонентов Windows.

Большинство вызовов Native API реализованы в ntoskrnl.exe и доступны в пользовательском режиме ntdll.dll. В входная точка из ntdll.dll есть LdrInitializeThunk. Вызовы собственного API обрабатываются ядро через Таблица дескрипторов системной службы (SSDT).

Функциональные группы

Собственный API включает в себя множество функций. Они включают Функции времени выполнения C которые необходимы для очень простых C выполнение во время выполнения, например strlen (), sprintf (), memcpy () и floor (). Другие распространенные процедуры, такие как malloc (), printf (), scanf (), отсутствуют (первая, потому что она не указывает куча для выделения памяти из второго и третьего, потому что они используют консоль, доступ к которой осуществляется только через KERNEL32.DLL). Подавляющее большинство других подпрограмм Native API, по соглашению, имеют префикс из двух или трех букв, а именно:

  • Nt или же Zw находятся системные вызовы объявлены в ntdll.dll и ntoskrnl.exe. При вызове из ntdll.dll в пользовательском режиме эти группы почти одинаковы; они попадают в ловушку режим ядра и вызвать эквивалентную функцию в ntoskrnl.exe через SSDT. При вызове функций непосредственно в ntoskrnl.exe (возможно только в режиме ядра) варианты Zw обеспечивают режим ядра, а варианты Nt - нет.[1] Префикс Zw ничего не означает.[2]
  • RTL является второй по величине группой вызовов ntdll. Они включают (расширенную) библиотеку времени выполнения C, которая включает множество служебных функций, которые могут использоваться собственными приложениями, но не связаны напрямую с поддержкой ядра.
  • CSR являются клиент-серверными функциями, которые используются для связи с процессом подсистемы Win32, csrss.exe (csrss обозначает подсистему времени выполнения клиент / сервер).
  • Dbg находятся отладка такие функции, как программное обеспечение точка останова.
  • Ki - это вызовы из режима ядра для таких событий, как APC отправка.
  • Ldr функции загрузчика для PE обработка файлов и запуск новых процессов.
  • Nls за Поддержка национальных языков (аналогично кодовым страницам).
  • Pfx для обработки префикса.
  • Tp для обработки пула потоков.

user32.dll и gdi32.dll включают несколько других вызовов, которые перехватывают режим ядра. Они не были частью оригинального дизайна Windows NT, как можно увидеть на Windows NT 3.5. Однако из-за проблем с производительностью оборудования того времени было решено перевести графическую подсистему в режим ядра. Таким образом, системный вызов в диапазоне 0x1000-0x1FFF удовлетворяется win32k.sys (вместо ntoskrnl.exe, как это делается для 0-0x0FFF) и объявлены в user32.dll и gdi32.dll. Эти функции имеют NtUser и NtGdi префикс (например, NtUserLockWorkStation и NtGdiEnableEudc).

Использует

Использование собственных функций API включает, но не ограничивается:

  • Включение и отключение привилегий (RtlAdjustPrivilege)
  • Создание удаленного потока внутри процессов, запущенных в другом сеансе (RtlCreateUserThread)
  • Запуск собственного приложения (RtlCreateUserProcess)
  • Выполнение принудительного выключения (NtShutdownSystem)

Смотрите также

Рекомендации

  1. ^ The NT Insider (27 августа 2003 г.). «Nt против Zw - устранение путаницы в собственном API». OSR Online. Ресурсы OSR по открытым системам. 10 (4). Получено 2013-09-16.
  2. ^ Раймонд Чен (2009). "Старая новая вещь: что означает префикс" Zw "?". Корпорация Майкрософт. Получено 2009-06-13.

внешняя ссылка