Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?
Вроде при отмене файл назначения удаляется... Это отлавливать?
С уважением,
Евгений
Re: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, -prus-, Вы писали:
P>Всем привет!
P>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования? P>Вроде при отмене файл назначения удаляется... Это отлавливать?
а можно подробнее, какая именно задача решается?
Re: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, -prus-, Вы писали:
P>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?
При такой постановке задачи — разумеется, невозможно, сами ж понимаете.
P>Вроде при отмене файл назначения удаляется... Это отлавливать?
Для начала, каким образом собираетесь в минифильтре определять наличие операции копирования, а не какой-либо другой? Как из всех файлов в обработке станете выделять файл назначения? Как собираетесь отличать ручное или автоматическое удаление файла после завершения копирования, если операцию никто не отменял?
Re[2]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, mike_rs, Вы писали:
_>Здравствуйте, -prus-, Вы писали:
P>>Всем привет!
P>>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования? P>>Вроде при отмене файл назначения удаляется... Это отлавливать?
_>а можно подробнее, какая именно задача решается?
Косплей меня на этом форуме, наверное
Re[2]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, mike_rs, Вы писали:
_>а можно подробнее, какая именно задача решается?
Мне нужно точно быть уверенным в двух вещах:
1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать
2. нужно понять, что запись в файл не была прервана по той или иной причине. Как я понял в общем случае это сложно решить, но вот хотя бы пока в случае отмены при копировании средствами проводника. Там, как я посмотрел, файл назначения с случае отмены удаляется (приходит в SetInformation Pre/Post-Callback FileDispositionInformation с DeleteFile=TRUE)
С уважением,
Евгений
Re[2]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Для начала, каким образом собираетесь в минифильтре определять наличие операции копирования, а не какой-либо другой? Как из всех файлов в обработке станете выделять файл назначения? Как собираетесь отличать ручное или автоматическое удаление файла после завершения копирования, если операцию никто не отменял?
Да, тут вы правы, есть только чтение и запись. Я пока запись отлавливаю.
Есть желание далее попробовать понять источник, сопоставляя данные при чтении и при записи. Алгоритм пока понять не могу. Думал получать хэши при чтении, прикапывать их и потом при записи сопоставлять хэши данных... Но тут шляпа в том, что в PreRead, например, прилетит 1 Кб, а в PreWrite те же данные могут прилететь, например, в виде 4 буфера по 256 байт. Тут как-то нужно строить логику на похожести читаемых и записываемых данных в контекстах разных файлов. Так как-то чтоль
С уважением,
Евгений
Re[3]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, -prus-, Вы писали:
P>как-то нужно строить логику на похожести читаемых и записываемых данных в контекстах разных файлов. Так как-то чтоль
Главное, в сопроводительной документации к софту не забудьте написать, что его работа основана на предположениях и таких-то типовых паттернах, за пределами которых не гарантируется ничего.
Re[4]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Главное, в сопроводительной документации к софту не забудьте написать, что его работа основана на предположениях и таких-то типовых паттернах, за пределами которых не гарантируется ничего.
До софта тут еще очень далеко. Пока это некий PoC, работающий, скажем, в лабораторных условиях . Но совет учту
С уважением,
Евгений
Re[3]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, -prus-, Вы писали:
P>Здравствуйте, mike_rs, Вы писали:
_>>а можно подробнее, какая именно задача решается?
P>Мне нужно точно быть уверенным в двух вещах: P>1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать
данные не будут записываться только после Close, после Cleanup могут быть еще paging write для сброса кеша.
P>2. нужно понять, что запись в файл не была прервана по той или иной причине.
это никак не понять
Re[4]: Отловить отмену копирования файла в Minifilter'е
P>>1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать _>данные не будут записываться только после Close, после Cleanup могут быть еще paging write для сброса кеша.
только после Close на все FileObject's для файла, как я понимаю?
Здравствуйте, -prus-, Вы писали:
P>>>1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать _>>данные не будут записываться только после Close, после Cleanup могут быть еще paging write для сброса кеша.
P>только после Close на все FileObject's для файла, как я понимаю?
так это и есть Close, когда последний FO уходит. Поэтому его можно часами ждать.
FO FO FO
\ | /
FCB
FO — это хендл с точки зрения юзера, FCB — файл. Когда закрывается FO (handle) — это Cleanup, а когда все FO ушли и закрывается(уничтожается) FCB — это Close. Кроме хендлов пользователя FO может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.
_>FO — это хендл с точки зрения юзера, FCB — файл. Когда закрывается FO (handle) — это Cleanup, а когда все FO ушли и закрывается(уничтожается) FCB — это Close. Кроме хендлов пользователя FO может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.
А если для исключительных ситуаций, например, для некоторых файлов, сбросить возможность придерживания кеш-менеджером (это же можно в PreCreate или где?), то я незамедлительно получу Close? Или возможны еще варианты?
С уважением,
Евгений
Re[7]: Отловить отмену копирования файла в Minifilter'е
Здравствуйте, -prus-, Вы писали:
P>Здравствуйте, mike_rs, Вы писали:
_>>
_>>FO FO FO
_>> \ | /
_>> FCB
_>>
_>>FO — это хендл с точки зрения юзера, FCB — файл. Когда закрывается FO (handle) — это Cleanup, а когда все FO ушли и закрывается(уничтожается) FCB — это Close. Кроме хендлов пользователя FO может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.
P>А если для исключительных ситуаций, например, для некоторых файлов, сбросить возможность придерживания кеш-менеджером (это же можно в PreCreate или где?), то я незамедлительно получу Close? Или возможны еще варианты?
если все открытия некешированные, то да, сразу за последним Cleanup придет Close