Привет всем! У меня задача написать функцию по загрузке DLL из блока памяти HMODULE LoadLibraryFromMemory(LPCTSTR szDLLPath, LPCVOID lpMem, DWORD dwSize); szDLLPath при этом может указывать на несуществующий файл. После отработки функции LoadLibraryFromMemory, служебные структуры процесса должны быть заполнены таким образом, чтобы GetModuleHandle и аналогичные функции возвращали корректное значение, будто бы DLL-ка действительно загружена, причем из szDLLPath Думаю захучить NtOpenFile, NtCreateFile и сымитировать существование файла szDLLPath. Но возникает ряд вопросов, как вернуть правильный PHANDLE? Корректное значение вернет GetModuleHandle или еще надо править структуры процесса?
Всем спасибо за ответы, решил задачу другим путем, сделав функциональность загрузчика и поправив PEB.
os1r1s Перехватить GetModuleHandle не пробовал? А на какой Х в таком случае тебе здалось самостоятельно грузить длл если при этом ты формируешь запись в PEB? Не проще ли было LoadLibrary вызвать? Это раз. И два - такой метод не канает для 9х систем, такшто метод однобокий, да и не понятный как то. Проще было выделить память, скопировать туда длл пересчитать релоки, и вызвать альтернативную функцию инициализации. И никакова гемора.
k3internal Надо грузить DLL из памяти. LoadLibrary грузит из файла (очевидно). Сохранить DLL в файл и сделать LoadLibrary, а потом поправить PEB - плохо. pMem - промапленный файл? Релоки сделаны? Файл на диске нужен, т.к. кто-то может сделать GetModuleFileNameEx, а он тогда вернет имя не существующего файла.