Путь по умолчанию для CreateFile

Тема в разделе "WASM.BEGINNERS", создана пользователем Codegrammer, 16 май 2010.

  1. Codegrammer

    Codegrammer New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    37
    Есть дллка hooker.dll, которая перехватывает некоторые ари-функции. Она грузится к процессу через CreateRemoteThread. Эта дллка должна принять из процесса, инициировавшего ее внедрение, некоторую информацию. Я сделал так, чтобы она ее брала из файла InfoForHooker.dat. Он лежит с hooker.dll в одной папке. Так вот. hooker.dll вызвывает CreateFile и считывает оттуда данные. На моем компе все работает нормально. Но на многих других CreateFile ищет InfoForHooker не в папке с дллкой, а в файле, в который происходит внедрение. (При копировании туда файла InfoForHooker.dat все работает норм). Что делать и кто виноват? А может есть какой-нибудь более лучший способ передать данные в длл-ку?
     
  2. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Codegrammer, как вариант можно использовать CreateFileMapping->MapViewOfFile->CopyMemory или читать память процесса напрямую.
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Что делать? Логично же - передавать в CreateFile полный путь к файлу, а не только имя.
     
  4. Codegrammer

    Codegrammer New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    37
    как я могу передать полный путь? имя зашито в код. Как я могу полный путь к экзешнику зашить в код?
    как из длл-ки я могу использовать эту память, если она еще не знает о том, что она выделится?
     
  5. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    GetCurrentDirectory + InfoForHooker.dat используй ,
    и не мучь свой мозк
     
  6. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Насколько я понял проблема в том, что dll не знает, где она находится на диске и при вызове CreateFileA использует текущую директорию процесса.

    Можно узнать адрес загрузки hooker.dll, далее передать его в GetModuleFileNameA, так получишь путь к dll на диске, рядом с которой лежит InfoForHooker.dat. Теперь можно в CreateFileA передавать полный путь.
     
  7. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    Codegrammer, разберемся. У вас есть процесс, который внедряет вашу DLL в другие процессы. Во время того, как ваша DLL получит управление, процесс "инициировавший ее внедрение" будет работать? В таком случае память уже будет выделена. Или я чего-то не понял в вашей задаче.

    Тогда в процессе:
    -CreateFileMapping
    -MapViewOfFile
    -CopyMemory etc. для записи/чтения информации
    -UnMapViewOfFile

    В библиоетеке аналогично, но OpenFileMapping, чтобы открыть объект.
     
  8. Codegrammer

    Codegrammer New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    37
    Спасибо огромное :) Теперь в моем запасе еще одна полезная API-функция
     
  9. Mankubus

    Mankubus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2009
    Сообщения:
    76
    ИМХО, не лучший вариант работать с дисковыми файлами.
     
  10. Codegrammer

    Codegrammer New Member

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    37
    Спасибо. Чет я действительно этот вариант не продумал. Так и сделаю.:)