Как стать автором
Обновить

Заставляем любой процесс работать с транзакционной NTFS: мой первый шаг к созданию песочницы для Windows

Время на прочтение 6 мин
Количество просмотров 7.4K
Всего голосов 33: ↑33 и ↓0 +33
Комментарии 12

Комментарии 12

Да, я тоже это заметил. Возможно, имеется ввиду именно Win32 API, поскольку в документации для драйверов об этом ничего нет. Учитывая, что я пользуюсь именно Native API, а также то, насколько Microsoft бережно относится к его обратной совместимости, надеюсь, они не уберут транзакции в ближайшем будущем.

В NTFS есть две кошмарно медленные вещи: сжатие и TxF. Они настолько медленные и неэффективные относительно современного уровня развития подобных технологий, что ими пользуются только по незнанию реального положения дел.


Тем не менее, думаю можно быть уверенными в том, что ни "компрессию" ни "транзакции" никогда не выпилят из NTFS. M$ либо оставит всё как есть до смерти Windows, либо перейдет на новую файловую систему без этих deprecated features.

Думаю, что так и будет, Майкрософт крайне редко удаляет старые технологии. Тот же Native Api тоже не рекомендуется к использованию, но… что массово используют, то будут поддерживать.
Или же реально весь этот функционал перейдет в ядро.
Возможно, что тут дело как с потоками ntfs — мало кто юзает по назначению, а больше для других целей? Я не знаком с этой темой, просто предполагаю. Про эту технику, до статьи автора, я узнал из аверских блогов — 2 года назад на какой-то хакерской конфе показывали способ обойти антивирус с помощью транзакций (кому интересно, гуглите Process Doppelgänging ).

Про deprecated ответил выше. В конце-концов это всего лишь эксперимент, вся идея для программы и статьи возникла из неожиданной простоты реализации. Посмотрим.

Да уж, 9 лет назад я даже написал СУБД, использующую для реализации ACID TxF, как давно это было…

В итоге выяснилось, что производительность файловых транзакционных операций очень низкая, а уж откат транзакции (об этом есть в описании АПИ) еще медленнее.

Так что думаю, для песочницы не особо сгодится, только для маленьких операций. И да, deprecated уже очень давно и с неизвестным сроком окончания.
как эксперимент прикольно
Интересно как отреагирует ReadDirectoryChangesW:
  • Будет ли отслеживать изменения в директории произведенные внутри одной транзакции
  • Будет ли отслеживать изменения в директории произведенные из всех транзакций

image

Отличный вопрос. Как и ожидалось, всегда видны изменения снаружи транзакций + внутри той, где был открыт дескриптор директории. Изоляция работает предсказуемо.


Из документации

Transacted Operations
If there is a transaction bound to the directory handle, then the notifications follow the appropriate transaction isolation rules.


Меня это ещё вот на какую мысль навело. Тот же Process Monitor имеет минифильтр в режиме ядра, а значит видит все операции. Но он не показыает, в контексте какой транзакции они были проведены. Получается, что транзакции — идеальный инструмент для запутывания логов Process Monitor'a =)

Подразумеваю что после CommitTransaction должны быть видны изменения для всех, кто вне транзакции.
По поводу Process Monitor: возможно его минифильтр просто не доработан.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории