Нужно сделать вызов функции Mi... которая не экспортируется. В IDA с символами она видна. Как это можно сделать? (кроме джапа по фиксиров. адресу)
В общем случае переносимый код по-любому не получится. Могут быть обходные пути для конкретной функции
Буду делать прямой джамп. Благо адреса всегда статические. (для конкретной версии ОС с учетом сервис пака)
когда-то делал анхук NDIS для универсального обхода файров, оригинальные адресса обработчиков из NDIS_OPEN_BLOCK для TCPIP находились где-то внутри tcpip.sys и есессно не експортировались, в итоге забил адресса хардкодом для разных версий и сервиспаков, т.к. с анализом и поиском слишком уж сложно, трудоёмко и ненадёжно =(
Тут есть методы, либо, как правильно заметили хардкором забить, это в случае неперемещаемости кода, что даже с основными модулями ядра не гарантируется. К примеру nt*.exe не всегда и не на всех системах грузится по одной базе. И второй который предложил ms-rem в своей статье по поиску скрытых процессов, при поиске KiSwapContext. Но на самом всё зависит от ситуации, однозначного ответа нет и не будет.
netex n0name предлагает сигнатуру. Вполне приемлемое решение если есть версии модуля например для Win2k SP1, SP2, SP4 и WinXP SP1, SP2. Найди общую сигнатуру, скажем, в юзер-приложении и передай в драйвер. Только естественно в новом сервис паке всё может поменяться. Только это слишком много работы для нескольких функций. Виделять сигнатуру - занятие не самое интересное. Другой вариант - обрабатывать символы отладки и вытягивать адреса с них. Но естественно у пользователя эти символы отладки должны присутствовать.
при наличии у юзера иннета еще и символы с сайта ms скачать можно. можно оставить этот вариант на тот случай, если юзер установит сервис-пак, о котором еще не знает программа