FlushFileBuffers для Mount Points
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 31.10.06 16:12
Оценка:
Есть такая славная утилитка sync от Sysinternals, которая сливает недозаписанные буферы для всех дисков. Работает через FlushFileBuffers, открывая том "по букве".

Однако непонятно, что происходит, когда некоторые тома смонтированы не на буквы, а в mount point'ы на томах NTFS. Когда на "хостовый" том выдается FlushFileBuffers — буферы этих подмонтированных томов тоже сливаются, или нет? А если нет — как можно организовать их дозапись?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: FlushFileBuffers для Mount Points
От: Злость Россия  
Дата: 02.11.06 07:15
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Есть такая славная утилитка sync от Sysinternals, которая сливает недозаписанные буферы для всех дисков. Работает через FlushFileBuffers, открывая том "по букве".


ЕМ>Однако непонятно, что происходит, когда некоторые тома смонтированы не на буквы, а в mount point'ы на томах NTFS. Когда на "хостовый" том выдается FlushFileBuffers — буферы этих подмонтированных томов тоже сливаются, или нет? А если нет — как можно организовать их дозапись?


Flush для файлов находящихся на томе который смонтирован на диск, вызван не будет. Почему? Так как mount point используется только при открытии файла, а затем уже файловый обьект живет нормальной жизнью — тоесть нет возможности определить был ли открыт файл через mount point или обычно(если у тома который присоединет оствить будкву диска). Для того что-бы зделать файл надо открыть volume другим способом для того что-бы вызвать на него FlushFileBuffers. Потому что при вызове FlushFileBuffers, файловая система перебирает свою таблицу FCB и пытается сбросить все открытые файлы на диск. Эта таблица завязана на volume. А при открытии через mount point — информация о открытых файлах будет хранится в даных ассочированных с volume на котором находится.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[2]: FlushFileBuffers для Mount Points
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 02.11.06 07:29
Оценка:
Здравствуйте, Злость, Вы писали:

З>Flush для файлов находящихся на томе который смонтирован на диск, вызван не будет.


Грустно

А у Win32-приложения есть не слишком геморройный способ найти такие Mount Points, открыть соответствующие им тома (не имеющие букв) и слить файловые буферы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: FlushFileBuffers для Mount Points
От: Злость Россия  
Дата: 02.11.06 08:49
Оценка:
Здравствуйте, Злость, Вы писали:

[skip]

З>Flush для файлов находящихся на томе который смонтирован на диск, вызван не будет. Почему? Так как mount point используется только при открытии файла, а затем уже файловый обьект живет нормальной жизнью — тоесть нет возможности определить был ли открыт файл через mount point или обычно(если у тома который присоединет оствить будкву диска). Для того что-бы зделать файл надо открыть volume другим способом для того что-бы вызвать на него FlushFileBuffers. Потому что при вызове FlushFileBuffers, файловая система перебирает свою таблицу FCB и пытается сбросить все открытые файлы на диск. Эта таблица завязана на volume. А при открытии через mount point — информация о открытых файлах будет хранится в даных ассочированных с volume на котором находится.


Кстате у меня сомнения возникли насчет того что нельзя определить как был открыт обьект — я насчет своей фразы тоесть нет возможности определить был ли открыт файл через mount point или обычно(если у тома который присоединет оствить будкву диска). Может кто уточнит — а то я замечаю что у файловых обьектов открытых через mount point есть RelatedFileObject — который указывает на mount point.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[3]: FlushFileBuffers для Mount Points
От: MShura  
Дата: 02.11.06 11:52
Оценка:
ЕМ>А у Win32-приложения есть не слишком геморройный способ найти такие Mount Points, открыть соответствующие им тома (не имеющие букв) и слить файловые буферы?

NTFS хранит централизованно все свои mount points (см $Extend\$Reparse).
Есть API для перебора mount points на данном томе (см FindFirstVolumeMountPoint, ...)

Т.е. чтобы получить все mount points на заданный том нужно перебрать все NTFS в системе и для каждого их них перебрать его mount points и сравнить их с именем заданного тома.

Вот здесь небольшой примерчик.
http://www.rsdn.ru/Forum/?mid=1984719
Автор: MShura
Дата: 01.07.06
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.