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, по соглашению, имеют префикс из 2 или 3 букв, а именно:
- 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 для 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)
Смотрите также
Рекомендации
- ↑ The NT Insider (27 августа 2003 г.). «Nt против Zw - устранение путаницы в собственном API» . OSR Online . Ресурсы OSR по открытым системам. 10 (4) . Проверено 16 сентября 2013 .
- ^ Раймонд Чен (2009). "Старая новая вещь: что означает префикс" Zw "?" . Корпорация Microsoft . Проверено 13 июня 2009 .
Внешние ссылки
- Веб-сайт, на котором документируется большинство функций Native API.
- Внутри собственных приложений
- Внутри собственного API
- Фреймворк для разработки собственных приложений с открытым исходным кодом
- Компиляция программ Free Pascal для собственного API
- Windows NT Native Tools - бесплатная утилита для разработки собственных приложений.
- Собственная оболочка - командная строка Windows, которая может запускаться перед подсистемой Winlogon и Win32.