Не нашел кнопки "Правка". поэтому пишу еще одно сообщение Вопрос в том, что пакет IRP_MJ_SET_INFORMATION приходит первый раз на файл, а у файлового объекта уже такой флаг установлен, собственно интересует когда он и кем устанавливается и реальные размеры файла на диске
Надо понимать, что некоторые флаги, типы данных или функции хоть и документированы, но не всегда допустимы для использования в 3rd-party драйверах. Такие сущности не всегда используются и/или ведут себя так, как нам бы того хотелось. Вышеуказанный флаг как раз и является одной из таких сущностей. Ядро использует его только в менеджере кэша, который устанавливает его, например, при записи данных (NtWriteFile) в случае, когда файл "расширяется" чтобы "вместить" новые данные, при чём даже эти функции не используются ядром, лишь косвенно через Fast I/O-вызовы в файловую систему. Плюс FSDs внутри себя также используют этот флаг, когда необходимо уведомить приложения об изменениях посредством "уведомлялок" типа FsRtlNotifyFullReportChange() и прочих. Посмотрите исходник ядра и файловых систем, сразу всё станет понятно.
Всё чуть сложнее, на самом деле. Обычно большинство операций в файловой системе кэшируется (в том числе и set information), а записываются (мета-)данные реально чуть позже по достижении определённых лимитов памяти (или явно по запросу flush). Ну это, в общем, стандартный принцип работы кэша. Таким образом, нельзя полагаться на то, что этот флаг будет установлен непосредственно сразу же после завершения соответствующего запроса. Более того, насколько мне известно, например, fastfat ставит этот флаг только в двух ситуациях: 1. При записи файла, когда его размер увеличивается. 2. После успешного сброса данных на диск, при этом по факту (!) этот флаг не означает, что размер файла изменился. У NTFS ситуация немного получше, т.е. больше случаев, когда этот флаг устанавливается, отражая изменения в памяти, но насколько я помню, даже там этот флаг не ставится в обработчике set information. Но не это главное. Флаги файлового объект изначально не были предназначены для фильтров, они реально только для FSDs существуют, поэтому нигде не даётся никаких гарантий, что наличие или отсутствие этого флага будет связано с тем или иным относящимся к файлу событием.