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

Native 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 - нет. Префикс Zw ничего не означает.
  • Rtl - вторая по величине группа вызовов ntdll. Они включают (расширенную) библиотеку времени выполнения C, которая включает множество служебных функций, которые могут использоваться собственными приложениями, но не связаны напрямую с поддержкой ядра.
  • Csr - это клиент-серверные функции, которые используются для связи с процессом подсистемы Win32, csrss.exe ( csrss означает подсистему времени выполнения клиент / сервер).
  • Dbg - это функции отладки, такие как программная точка останова .
  • Ki - это вызовы из режима ядра для таких событий, как диспетчеризация APC .
  • Ldr - это функции загрузчика для обработки файлов PE и запуска новых процессов.
  • Nls для поддержки национальных языков (аналогично кодовым страницам).
  • Pfx для обработки префиксов.
  • Tp для Threadpool обработки.

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

Использует

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

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

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

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

внешние ссылки