Нужно из длл узнать собственное имя, например: invoke GetModuleHandle,0 invoke GetModuleFileName,eax,addr gbuf,100 invoke MessageBox,0,addr gbuf,0,0 выводит имя текущего процесса, а invoke GetModuleHandle,$CTA0('mydll.dll') .... выведет уже имя нашей dll, но чтобы получить имя надо его знать =( так что второй способ не катит. в общем как узнать ?
Ещё вылезла такая проблемма - прописал длл в реестре чтобы эксплорер её автоматически загружал ShellServiceObjectDelayLoad, в DllMain у меня стоит SetWindowsHookEx, всё нормально длл грузится во все процессы, но с целью функции обновления в реальном времени я написал функцию которая выгружает длл и через несколько секунд загружает заново, и тут уже длл не инжектится в остальные процессы, тоесть функция SetWindowsHookEx перестаёт работать, ещё такой же эффект наблюдается если проинжектить эксплорер вручную, тоесть VirtualAllocEx WriteProcessMemory CreateRemoteThread
Такая мысль - раз твоя длл уже загружена во все процессы, то пусть она сама грузит обновлённую версию, передаёт ей всё управление и выгружается.
Проблемма решилась переносом SetWindowsHookEx в отдельный поток инициализации. Но тут возникла другая проблемма При вызове UnhookWindowsHookEx бывает так что из одного или двух процессов хук не снимается, это как правило неактивные процессы, но стоит их пошевелить( пощёлкать мышкой и т.д.) как хук с них снимается, но это ведь не дело! Можно как нить стабильно снять хук? Мне ведь надо чтобы файл моей dll разблокировался чтобы заменить его на обновлённый а тут какойто процесс не хочет его выгружать =(