Недокументированные интерфейсы
Прояснить ситуацию можно путем изучения имен экспортированных или глобальных символов в ключевых системных образах (таких как 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 проверяют параметры только в том случае, если предыдущий режим доступа был пользовательским |
Мм, похоже на прямую цитату из Windows Internals.