Pages Menu
Categories Menu

Опубликовано | 1 коммент.

Недокументированные интерфейсы

Прояснить ситуацию можно путем изучения имен экспортированных или глобальных символов в ключевых системных образах (таких как 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Диспетчер объектов
PfPrefetcher
PoДиспетчер электропитания
PpДиспетчер PnP
PsПоддержка процессов
RtlБиблиотека времени выполнения
SeБезопасность
SmДиспетчер запоминающего устройства
TmДиспетчер транзакций
VfВерификатор
WdiИнфраструктура диагностики Windows
WheaАрхитектура ошибок оборудования Windows
WmiИнструментарий управления Windows
ZwЗеркальная точка входа для системных служб (имена которых начинаются
с Nt), которая устанавливает предыдущий режим доступа к ядру, что исключает проверку параметров, поскольку системные службы Nt проверяют
параметры только в том случае, если предыдущий режим доступа был
пользовательским

Один комментарий

  1. Мм, похоже на прямую цитату из Windows Internals.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

↓