Есть дллка hooker.dll, которая перехватывает некоторые ари-функции. Она грузится к процессу через CreateRemoteThread. Эта дллка должна принять из процесса, инициировавшего ее внедрение, некоторую информацию. Я сделал так, чтобы она ее брала из файла InfoForHooker.dat. Он лежит с hooker.dll в одной папке. Так вот. hooker.dll вызвывает CreateFile и считывает оттуда данные. На моем компе все работает нормально. Но на многих других CreateFile ищет InfoForHooker не в папке с дллкой, а в файле, в который происходит внедрение. (При копировании туда файла InfoForHooker.dat все работает норм). Что делать и кто виноват? А может есть какой-нибудь более лучший способ передать данные в длл-ку?
Codegrammer, как вариант можно использовать CreateFileMapping->MapViewOfFile->CopyMemory или читать память процесса напрямую.
как я могу передать полный путь? имя зашито в код. Как я могу полный путь к экзешнику зашить в код? как из длл-ки я могу использовать эту память, если она еще не знает о том, что она выделится?
Насколько я понял проблема в том, что dll не знает, где она находится на диске и при вызове CreateFileA использует текущую директорию процесса. Можно узнать адрес загрузки hooker.dll, далее передать его в GetModuleFileNameA, так получишь путь к dll на диске, рядом с которой лежит InfoForHooker.dat. Теперь можно в CreateFileA передавать полный путь.
Codegrammer, разберемся. У вас есть процесс, который внедряет вашу DLL в другие процессы. Во время того, как ваша DLL получит управление, процесс "инициировавший ее внедрение" будет работать? В таком случае память уже будет выделена. Или я чего-то не понял в вашей задаче. Тогда в процессе: -CreateFileMapping -MapViewOfFile -CopyMemory etc. для записи/чтения информации -UnMapViewOfFile В библиоетеке аналогично, но OpenFileMapping, чтобы открыть объект.