Прояснить ситуацию можно путем изучения имен экспортированных или глобальных символов в ключевых системных образах (таких как Ntoskrnl.exe, Hal.dll или Ntdll.dll). Так Вы можете получить представление о тех вещах, которые может сделать Windows, а не только о том, что уже документировано и поддержано на данный момент.
Разумеется, одно только знание имен этих функций еще не означает, что вы можете или должны их вызвать, — интерфейсы не документированы и могут подвергаться изменениям. Мы предлагаем вам только присмотреться к этим функциям для получения более полного представления о видах внутренних функций, выполняемых Windows, а не для обхода поддерживаемых интерфейсов.
Например, просмотр списка функций в Ntdll.dll даст вам возможность сравнить список всех системных служб, предоставляемых Windows DLL-библиотекам подсистем пользовательского режима, с подмножеством, показываемым каждой подсистемой. Хотя многие из этих функций отображаются на документированные и поддерживаемые Windows-функции, некоторые из них недоступны из Windows API. (См. статью «InsidetheNativeAPI» на сайте Sysinternals.)
С другой стороны, также интересно изучить то, что импортируют DLL-библиотеки подсистемы Windows (такие как Kernel32.dll или Advapi32.dll) и какие функции они вызывают в Ntdll.
Также интересно посмотреть на дамп файла Ntoskrnl.exe. Хотя многие экспортируемые подпрограммы, используемые драйверами устройств режима ядра, документированы в Windows Driver Kit, довольно многие из них остались недокументированными. Может также вызвать интерес просмотр таблицы импорта для Ntoskrnl и HAL; в этой таблице показан список функций в HAL, которые используются в Ntoskrnl, и наоборот.
В таблице ниже показан список большинства широко используемых префиксов имен функций компонентов исполняющей системы. Каждый из этих основных компонентов исполнительной системы также использует слегка измененные префиксы для обозначения внутренних функций — либо за первой буквой префикса следует буква i (означающая internal, внутренняя), либо за всем префиксом следует буква p (означающая private, закрытая).
Например, Ki представляет внутренние функции ядра, а Psp ссылается на внутренние функции поддержки процесса.
Упростить расшифровку имен этих экспортируемых функций поможет понимание соглашения об именах системных подпрограмм Windows. Общий формат имеет следующий вид:
<Префикс><Операция><Объект>
В этом формате "Префикс" представляет внутренний компонент, экспортирующий подпрограмму, "Операция" сообщает о том, что будет сделано с объектом или ресурсом, а "Объект" идентифицирует то, над чем будет проводиться операция.
Например, ExAllocatePoolWithTag является вспомогательной процедурой исполняющей системы для выделения из выгружаемого или невыгружаемого пула. KeInitializeThread является процедурой, которая назначает и создает объект ядра «поток».
Часто используемые префиксы.
| Префикс | Компонент |
|---|---|
| Alpc | Расширенное локальное межпроцессное взаимодействие |
| Cc | Общая кэш-память |
| Cm | Диспетчер конфигурации |
| Dbgk | Среда отладки для пользовательского режима |
| Em | Диспетчер исправлений |
| Etw | Отслеживание событий для Windows |
| Ex | Подпрограммы поддержки исполняющей системы |
| FsRtl | Библиотека времени выполнения драйвера файловой системы |
| Hvl | Библиотека гипервизора |
| Io | Диспетчер ввода-вывода |
| Kd | Отладчик ядра |
| Ke | Ядро |
| Lsa | Авторизация локальных пользователей |
| Mm | Диспетчер памяти |
| Nt | Системные службы NT (большинство из которых экспортируется в качестве Windows-функций) |
| Ob | Диспетчер объектов |
| Pf | Prefetcher |
| Po | Диспетчер электропитания |
| Pp | Диспетчер PnP |
| Ps | Поддержка процессов |
| Rtl | Библиотека времени выполнения |
| Se | Безопасность |
| Sm | Диспетчер запоминающего устройства |
| Tm | Диспетчер транзакций |
| Vf | Верификатор |
| Wdi | Инфраструктура диагностики Windows |
| Whea | Архитектура ошибок оборудования Windows |
| Wmi | Инструментарий управления Windows |
| Zw | Зеркальная точка входа для системных служб (имена которых начинаются с Nt), которая устанавливает предыдущий режим доступа к ядру, что исключает проверку параметров, поскольку системные службы Nt проверяют параметры только в том случае, если предыдущий режим доступа был пользовательским |
