Как динамически получить стандартный адрес wfp?

Я пишу драйвер сетевого фильтра Windows для WinXP (с использованием технологии TDI) и win7 (с использованием технологии WFP), и я надеюсь, что драйвер совместим с WinXP и Win7.

Поскольку ВПП доступен только в Vista и более поздних версиях, мне нужно динамически получать адреса подпрограммы ВПП (например: FwpmEngineOpen0, FwpsCalloutRegister0), иначе драйвер НЕ может быть загружен под WinXP.

Но когда я использую MmGetSystemRoutineAddress, чтобы попытаться получить адрес подпрограммы FwpmEngineOpen0, подпрограмма всегда возвращает 0 под Win7.

В MSDN сказано: "MmGetSystemRoutineAddress ... Драйверы могут использовать эту процедуру, чтобы определить, доступна ли процедура в конкретной версии Windows. Его можно использовать только для подпрограмм, экспортируемых ядром или HAL, но не для каких-либо процедур, определяемых драйвером.".

Итак, MmGetSystemRoutineAddress НЕ может получить стандартный адрес ВПП?

Как я могу решить эту проблему, если я хочу динамически получать адреса подпрограммы ВПП?

Спасибо за любую помощь, которую можно оказать!

MmGetSystemRoutineAddress может получать только функции hal и ntosknl. Возможно, вы пытаетесь охватить весь xp до win10 одним драйвером, но я надеюсь, что вы не потратите зря время. Сразу после Vista рекомендуется собирать с выделенным драйвером Vista +. После Win10 вас ждет проблема с подписью EV, так что ваша цель все равно вряд ли будет достигнута.

reinhard v.z. 11.09.2018 15:38
1
1
155
0

Другие вопросы по теме