Interested Article - Native API
- 2020-12-04
- 1
Native API (с заглавной N) — в основном недокументированный интерфейс программирования приложений (API), предназначенный для внутреннего использования в операционных системах семейства Windows NT , выпущенных Microsoft . В основном он используется во время загрузки системы, когда другие компоненты Windows недоступны, а также функциями системных библиотек (например, kernel32.dll ), которые реализуют функциональность Windows API . Точкой входа программ, использующих Native API, является функция DriverEntry(), так же как и в драйверах устройств Windows. В то же время, в отличие от драйверов, программы, использующие Native API, выполняются в третьем кольце защиты , так же как и обычные приложения Windows. Большая часть вызовов Native API реализована в ntoskrnl.exe , а доступ к ним предоставляется программам режима пользователя . Некоторые вызовы Native API реализованы напрямую в режиме пользователя внутри ntdll.dll.
Несмотря на то, что большая часть операционной системы Windows NT использует документированный и хорошо определённый Windows API , некоторые компоненты, такие как подсистема клиент/сервер времени выполнения (CSRSS), используют Native API, так как они запускаются на ранних стадиях процесса загрузки Windows NT , когда функции Windows API ещё не доступны.
Некоторое вредоносное программное обеспечение использует Native API, чтобы скрыть своё присутствие от антивирусного ПО .
Группы функций
Native API включает достаточно большое число функций. В него входят функции стандартной библиотеки языка Си , такие как strlen(), sprintf() и floor(). В то же время, такие часто встречающиеся вызовы стандартной библиотеки, как malloc(), printf(), scanf() отсутствуют. Большая часть других функций Native API имеет двух- или трёхбуквенный префикс. Используются, в частности, следующие префиксы:
- Nt или Zw - системные вызовы, объявленные в ntdll.dll и ntoskrnl.exe. Когда они вызываются из ntdll.dll в режиме пользователя, эти группы функций ведут себя практически одинаковым образом: они вызывают переход в режим ядра и вызывают эквивалентную функцию из ntoskrnl.exe с использованием . Когда функции вызываются напрямую из ntoskrnl.exe, что возможно только в режиме ядра, варианты, начинающиеся на Zw, гарантируют исполнение в режиме ядра, а варианты с префиксом Nt не гарантируют . Префикс Zw не имеет расшифровки
- Rtl - вторая по количеству группа вызовов ntdll. В неё включаются функции, составляющие расширенную библиотеку времени выполнения языка Си. Это многие служебные функции, которые могут быть использованы приложениями Native API, прямо не связанные с доступом к ядру системы.
- Csr - клиент-серверные функции, использующие для взаимодействия с процессом подсистемы Win32, csrss.exe (CSRSS означает подсистему клиент/сервер времени выполнения ).
- Dbg - вспомогательные функции отладки, такие как программная точка останова.
- Ki - функции, вызываемые из режима ядра, использующиеся, например, для диспетчеризации (APC)
- Ldr - функции загрузчика для поддержки исполняемых файлов формата PE и запуска новых процессов.
- Nls - для поддержки различных естественных языков (схожи с кодовыми страницами).
- Pfx - для обработки префиксов.
- Tp - для работы с пулом потоков.
Gdi32.dll включает ещё несколько функций, которые осуществляют переход в режим ядра. Они изначально не были предусмотрены проектировщиками операционной системы Windows NT и отсутствуют в Windows NT 3.5 . Однако в связи с недостаточной производительностью аппаратного обеспечения, при выпуске NT 4 было решено перенести графическую подсистему в режим ядра. В результате этого системные вызовы в диапазоне 0x1000-0x1FFF исполняются win32k.sys (в отличие от вызовов диапазона 0-0x0FFF, выполняемых ntoskrnl.exe), и объявляются в gdi32.dll. У этих функций присутствует префикс Gdi .
Есть ещё несколько групп функций, экспортируемых ntoskrnl.exe, которые могут быть использованы только в режиме ядра. Они могут рассматриваться как часть Native API или не включаться в него, в зависимости от точки зрения источника (поскольку Native API полностью не документирован официально, определённого ответа нет). К таким группам относятся Cc (контроллер кэша), Ex ( ), FsRtl (вызовы времени выполнения файловых систем), Io (менеджер ввода-вывода), Ke (основные функции ядра), Ks (потоки ядра), Lpc ( ), Lsa ( сервер проверки подлинности локальной системы безопасности ), Mm (управление памятью), Ob ( ), Ps (управление процессами), Se (безопасность), Po (управление питанием) и другие .
См. также
Ссылки
- от 31 октября 2012 на Wayback Machine
- от 25 октября 2012 на Wayback Machine
- от 5 декабря 2012 на Wayback Machine
Примечания
- Mark Russinovich . . Sysinternals (1998–2004). Дата обращения: 28 февраля 2008. Архивировано из 18 декабря 2012 года.
- Jason Coombs. . Dr. Dobb's Journal (21 июня 2005). Дата обращения: 4 января 2007. Архивировано из 18 декабря 2012 года.
- The NT Insider, Vol 10, Issue 4, July-August 2003. . (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- ↑ . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- Microsoft Corporation . . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- Microsoft Corporation . . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- Microsoft Corporation . . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- Microsoft Corporation . . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- Microsoft Corporation . . Microsoft Corporation (2009). Дата обращения: 13 июня 2009. Архивировано из 18 декабря 2012 года.
- 2020-12-04
- 1