Мой вопрос:
когда win32k.sys загружается в пространство сеанса, получает ли он один и тот же базовый адрес в каждом сеансе?
Подробности:
Я пишу драйвер устройства в режиме ядра для Windows (32 бит).Он загружается как стандартный драйвер WDM в системное пространство (глобальная память режима ядра) во время загрузки системы.
Однако в некоторых ситуациях мне требуется доступ к функциям, экспортируемым win32k.sys.Чтобы быть точным, я пишу своего рода драйвер, который иногда нужно притворяться драйвером дисплея.
I может не статически импортировать эти функции (значит, импортировать их с помощью исполняемого импортаТаблица).Это потому, что win32k.sys загружается на более позднем этапе, когда создаются сеансы.Более того, он загружается в пространство сеанса .
Тем не менее я нашел обходной путь.При создании сеанса я динамически импортирую нужные функции.Я использую ZwQuerySystemInformation
с SystemModuleInformation
, чтобы найти базовый адрес win32k.sys в текущем сеансе .Затем, используя этот базовый адрес, я анализирую его, чтобы найти каталог экспорта win32k.sys и получить необходимые указатели функций.
В настоящее время для каждой сессии я сохраняю отдельный массив импортируемых функций.Однако практически эти функции всегда одинаковы во всех сеансах.Означает, что win32k.sys сопоставляется с одним и тем же адресом, принадлежащим пространству сеанса в каждом сеансе.
Следовательно, у меня вопрос, есть ли гарантия, что win32k.sys будет сопоставлен с одним и тем же адресом во всехсеансы?
Помимо экономии памяти, мне будет легче.В настоящее время для вызова такой функции мне нужен специфичный для сеанса контекст, в котором хранятся указатели функций.