Как узнать что файл на данный момент проецируется в память (mapped) какой то программой. Интересует сам факт(да или нет), имя программы и остальное не нужно. К примеру шрифты в папке Fonts, файл Arial.ttf - всегда мэпирован. Надеюсь на вашу помощь
Дело в том, что файл остаётся спроецирован после закрытия(освобождения) спроецированной секции, поэтому не имеет смысла перечислять все сеции в системе. Между тем, можно перечислить все процессы и все блоки памяти в ник, с целью определения какой файл спроецирован, это позволяет сделать ZwQueryVirtualMemory. Насколько я знаю, нет ниодного инфокласса, даже недокументированного, который позволяет это сделать, поэтому то - наверно единственный способ, без доступа к ядерным структурам.
Да у меня здесь такая проблема, затираю хвосты файлов (комплексная утилита), т.е. дописываю в конец файла блок до окончания кластера, а затем делаю SetEnfOfFile - возвращая старый размер. Так вот при SetEndOfFile на мэпировавнных файлах (Arial.ttf) функция возвращает false и пишет "Operation cannot be perfomed on a file with a user mapped section opened". Вперед SetEndOfFile идет, а назад никак. И главное система допускает открытие со всеми доступными правами. Замучился уже. Может у кого будут идеи?
Ну как неверный? Следующий алгоритм: 1,CreateFile 2,пишу в конец файла 3,SetfilePointer((конец ориг файла)) 4,SetEndOfFile Ставлю SetFilePointer на размер орингинального файла. А как по другому? Если установить SetFilePointer (конец ориг файла) + 1 будет один левый байт в конце. В данном случае здесь не используются проецирование в память, - все стандартными файловыми методам.
>>PsGlobalSearchMappedSection() Но здесь получается что работать будет только под XP, что совсем не есть гуд. + Зависимость. Возможно есть более обощенные решения? Кто знает поделитесь пожалуйста.
Код то этот нашел, но блин он на асме, а я в нем ни гу-гу.. Clerk, не могли бы вы перевести на любой другой язык Си или delphi или VBA у вас это займет 10 минут, зато многим будет помощь. Пожалуйста. А?
Ну хорошо, а ниже XP ведь не получится? К тому же патчить надо насколько я понял, а это лишняя головная боль.
Не надо ничего патчить. Ниже 2600 наверно нет. Единственный минус - максимальный размер пути MAX_PATH, мне неизвестно значение этой константы выше XP.