Re[8]: Paging I/O – шифрование
От: Storozh Россия  
Дата: 20.02.03 16:39
Оценка: 12 (1)
Здравствуйте, Valerio, Вы писали:

V>вот в помощь, поиграйтесь :

V>
V>MmFlushImageSection( fileObject->SectionObjectPointer, MmFlushForWrite );
V>CcFlushCache( fileObject->SectionObjectPointer, NULL, 0, &ioStatus);
V>CcPurgeCacheSection( fileObject->SectionObjectPointer, NULL, 0, FALSE );
V>


Спасибо, наигрался!

Ситуация следующая:
Эффект виден лишь от применения CcPurgeCacheSection — здесь действительно все хорошо (с чтением).
С чтением вообще все хорошо


А вот с записью история интересная:

Эксперимент №1:

1. Включаю кодирование -> Создаю в секретном каталоге документ WordPad -> Пишу текст -> Сохраняю
2. Откл. кодирование -> Открываю с помощью WinHex (16-ричный редактор) и выясняется, что все зашифровано,
кроме огрызка последней страницы. Ну то есть, если файл 5000 байт, то 4096 зашифрованы, а остальные нет.

Эксперимент №2:

1. Включаю кодирование -> Открываю зашифрованный архив WinZip'ом -> Изменяю его содежимое -> Cохраняю
2. Откл. кодирование -> А он, собака, и не зашифрованный совсем! все 50КБ


Сразу оговорюсь, что скорее всего это НЕ проблемы, связанные непосредственно с реализацией шифрования неких
объемов данных, т.к. с большинством приложений все выглядит хорошо; так, с нормальным Word'ом проблем не
возникает, как впрочем и с WinRar.

Было у меня подозрение, что это связано с write-back cache with lazy write. Вроде того, что данные, записываемые в файлы, сначала хранятся в страницах кэша в памяти, а потом по мере накопления записываются на диск — возможно как раз в тот момент, когда кодирование выключено. По крайней мере это единственное, что приходит на ум.

Сначала я думал, что эти проблемы можно решить своевреммено сбрасывая кэш, но
MmFlush И СсFlush, хотя и отрабатывают успешно, результатов не дают (странно, но после того как я их вызываю не запускается Paging I/O. Ведь по идее вызов этих функций должен повлечь I/O operations and hence reenter the FSD.)

Я пошел дальше — выставил MmModifiedPageLifeInSeconds равным 5 сек. вместо 300 по умолчанию, так чтоб
модифицированные страницы жили в памяти не более 5 сек. Не помогло.

Так вот, каким образом на диске появляются открытые данные? Ведь выбранное направление (фильтр на Paging и
Non-Cached I/O
) должно покрывать все возможные способы модификации данных на диске! Каким образом должен
работать WordPad и WinZip, чтобы получить в итоге имеющиеся результаты?

Заранее спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.