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[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
Отловить отмену копирования файла в 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[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? Или возможны еще варианты?
С уважением,
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.