Как узнать что файл проецируется (mapped) на данный момент

Тема в разделе "WASM.BEGINNERS", создана пользователем Psychedelic, 3 апр 2008.

  1. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Как узнать что файл на данный момент проецируется в память (mapped) какой то программой. Интересует сам факт(да или нет), имя программы и остальное не нужно.
    К примеру шрифты в папке Fonts, файл Arial.ttf - всегда мэпирован.

    Надеюсь на вашу помощь
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Дело в том, что файл остаётся спроецирован после закрытия(освобождения) спроецированной секции, поэтому не имеет смысла перечислять все сеции в системе. Между тем, можно перечислить все процессы и все блоки памяти в ник, с целью определения какой файл спроецирован, это позволяет сделать ZwQueryVirtualMemory. Насколько я знаю, нет ниодного инфокласса, даже недокументированного, который позволяет это сделать, поэтому то - наверно единственный способ, без доступа к ядерным структурам.
     
  3. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Да у меня здесь такая проблема, затираю хвосты файлов (комплексная утилита), т.е. дописываю в конец файла блок до окончания кластера, а затем делаю SetEnfOfFile - возвращая старый размер.
    Так вот при SetEndOfFile на мэпировавнных файлах (Arial.ttf) функция возвращает false и пишет
    "Operation cannot be perfomed on a file with a user mapped section opened". Вперед SetEndOfFile идет, а назад никак. И главное система допускает открытие со всеми доступными правами.
    Замучился уже. Может у кого будут идеи?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Размер не верный задаёш секции.
     
  5. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Ну как неверный?
    Следующий алгоритм:
    1,CreateFile
    2,пишу в конец файла
    3,SetfilePointer((конец ориг файла))
    4,SetEndOfFile


    Ставлю SetFilePointer на размер орингинального файла.
    А как по другому? Если установить SetFilePointer (конец ориг файла) + 1 будет один левый байт в конце.

    В данном случае здесь не используются проецирование в память, - все стандартными файловыми методам.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    PsGlobalSearchMappedSection()
     
  7. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    >>PsGlobalSearchMappedSection()

    Но здесь получается что работать будет только под XP, что совсем не есть гуд.
    + Зависимость.
    Возможно есть более обощенные решения? Кто знает поделитесь пожалуйста.
     
  8. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Код то этот нашел, но блин он на асме, а я в нем ни гу-гу..
    Clerk, не могли бы вы перевести на любой другой язык Си или delphi или VBA у вас это займет 10 минут, зато многим будет помощь. Пожалуйста. А?
     
  9. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Psychedelic извиняюсь за оффтоп, а зачем затирать хвосты файлов
     
  10. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Таков заказ клиента.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Почему ?
    Проверь в Vista
     
  12. Psychedelic

    Psychedelic New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2008
    Сообщения:
    7
    Ну хорошо, а ниже XP ведь не получится? К тому же патчить надо насколько я понял, а это лишняя головная боль.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Не надо ничего патчить.
    Ниже 2600 наверно нет. Единственный минус - максимальный размер пути MAX_PATH, мне неизвестно значение этой константы выше XP.