Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 15.10.18 17:38
Оценка:
Всем привет!

Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?
Вроде при отмене файл назначения удаляется... Это отлавливать?
С уважением,
Евгений
Re: Отловить отмену копирования файла в Minifilter'е
От: mike_rs Россия  
Дата: 15.10.18 18:56
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Всем привет!


P>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?

P>Вроде при отмене файл назначения удаляется... Это отлавливать?

а можно подробнее, какая именно задача решается?
Re: Отловить отмену копирования файла в Minifilter'е
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 15.10.18 19:36
Оценка:
Здравствуйте, -prus-, Вы писали:

P>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?


При такой постановке задачи — разумеется, невозможно, сами ж понимаете.

P>Вроде при отмене файл назначения удаляется... Это отлавливать?


Для начала, каким образом собираетесь в минифильтре определять наличие операции копирования, а не какой-либо другой? Как из всех файлов в обработке станете выделять файл назначения? Как собираетесь отличать ручное или автоматическое удаление файла после завершения копирования, если операцию никто не отменял?
Re[2]: Отловить отмену копирования файла в Minifilter'е
От: LimyKurn  
Дата: 15.10.18 20:30
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>Здравствуйте, -prus-, Вы писали:


P>>Всем привет!


P>>Есть просто способ отловить в Minifilter'е отмену копирования файла, когда пользователь нажимает "Отмена" в окне прогресса копирования?

P>>Вроде при отмене файл назначения удаляется... Это отлавливать?

_>а можно подробнее, какая именно задача решается?


Косплей меня на этом форуме, наверное
Re[2]: Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 16.10.18 08:34
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>а можно подробнее, какая именно задача решается?


Мне нужно точно быть уверенным в двух вещах:
1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать
2. нужно понять, что запись в файл не была прервана по той или иной причине. Как я понял в общем случае это сложно решить, но вот хотя бы пока в случае отмены при копировании средствами проводника. Там, как я посмотрел, файл назначения с случае отмены удаляется (приходит в SetInformation Pre/Post-Callback FileDispositionInformation с DeleteFile=TRUE)
С уважением,
Евгений
Re[2]: Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 16.10.18 08:44
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Для начала, каким образом собираетесь в минифильтре определять наличие операции копирования, а не какой-либо другой? Как из всех файлов в обработке станете выделять файл назначения? Как собираетесь отличать ручное или автоматическое удаление файла после завершения копирования, если операцию никто не отменял?


Да, тут вы правы, есть только чтение и запись. Я пока запись отлавливаю.
Есть желание далее попробовать понять источник, сопоставляя данные при чтении и при записи. Алгоритм пока понять не могу. Думал получать хэши при чтении, прикапывать их и потом при записи сопоставлять хэши данных... Но тут шляпа в том, что в PreRead, например, прилетит 1 Кб, а в PreWrite те же данные могут прилететь, например, в виде 4 буфера по 256 байт. Тут как-то нужно строить логику на похожести читаемых и записываемых данных в контекстах разных файлов. Так как-то чтоль
С уважением,
Евгений
Re[3]: Отловить отмену копирования файла в Minifilter'е
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.10.18 08:47
Оценка:
Здравствуйте, -prus-, Вы писали:

P>как-то нужно строить логику на похожести читаемых и записываемых данных в контекстах разных файлов. Так как-то чтоль


Главное, в сопроводительной документации к софту не забудьте написать, что его работа основана на предположениях и таких-то типовых паттернах, за пределами которых не гарантируется ничего.
Re[4]: Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 16.10.18 08:52
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Главное, в сопроводительной документации к софту не забудьте написать, что его работа основана на предположениях и таких-то типовых паттернах, за пределами которых не гарантируется ничего.


До софта тут еще очень далеко. Пока это некий PoC, работающий, скажем, в лабораторных условиях . Но совет учту
С уважением,
Евгений
Re[3]: Отловить отмену копирования файла в Minifilter'е
От: mike_rs Россия  
Дата: 16.10.18 13:05
Оценка: 6 (1)
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, mike_rs, Вы писали:


_>>а можно подробнее, какая именно задача решается?


P>Мне нужно точно быть уверенным в двух вещах:

P>1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать
данные не будут записываться только после Close, после Cleanup могут быть еще paging write для сброса кеша.

P>2. нужно понять, что запись в файл не была прервана по той или иной причине.

это никак не понять
Re[4]: Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 16.10.18 13:39
Оценка:
P>>1. что файлом закончена работа и больше туда не будут записываться данные, все хендлы закрыты и тп. Это вроде как в Pre/Post-Cleanup можно логику сделать
_>данные не будут записываться только после Close, после Cleanup могут быть еще paging write для сброса кеша.

только после Close на все FileObject's для файла, как я понимаю?
С уважением,
Евгений
Отредактировано 16.10.2018 14:31 -prus- . Предыдущая версия .
Re[5]: Отловить отмену копирования файла в Minifilter'е
От: mike_rs Россия  
Дата: 17.10.18 18:32
Оценка:
Здравствуйте, -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 может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.
Отредактировано 17.10.2018 18:37 mike_rs . Предыдущая версия . Еще …
Отредактировано 17.10.2018 18:36 mike_rs . Предыдущая версия .
Re[6]: Отловить отмену копирования файла в Minifilter'е
От: -prus-  
Дата: 18.10.18 08:22
Оценка:
Здравствуйте, mike_rs, Вы писали:

_>
_>FO   FO   FO
_>  \  |   /
_>    FCB
_>


_>FO — это хендл с точки зрения юзера, FCB — файл. Когда закрывается FO (handle) — это Cleanup, а когда все FO ушли и закрывается(уничтожается) FCB — это Close. Кроме хендлов пользователя FO может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.


А если для исключительных ситуаций, например, для некоторых файлов, сбросить возможность придерживания кеш-менеджером (это же можно в PreCreate или где?), то я незамедлительно получу Close? Или возможны еще варианты?
С уважением,
Евгений
Re[7]: Отловить отмену копирования файла в Minifilter'е
От: mike_rs Россия  
Дата: 18.10.18 11:02
Оценка: 2 (1)
Здравствуйте, -prus-, Вы писали:

P>Здравствуйте, mike_rs, Вы писали:


_>>
_>>FO   FO   FO
_>>  \  |   /
_>>    FCB
_>>


_>>FO — это хендл с точки зрения юзера, FCB — файл. Когда закрывается FO (handle) — это Cleanup, а когда все FO ушли и закрывается(уничтожается) FCB — это Close. Кроме хендлов пользователя FO может придерживатся кеш-менеджером (если были кешированные операции) и когда он его закроет — неведомо. На системе где нет нехватки ресурсов это могут быть десятки часов и более.


P>А если для исключительных ситуаций, например, для некоторых файлов, сбросить возможность придерживания кеш-менеджером (это же можно в PreCreate или где?), то я незамедлительно получу Close? Или возможны еще варианты?

если все открытия некешированные, то да, сразу за последним Cleanup придет Close
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.