Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

30.07.2006 16:38 | Raiker

Одна из новых возможностей в Windows Vista - это транзакции в файловой системе и реестре, который мало обсуждается, но достоин отдельной статьи...

Использование транзакций в Windows Vista
На мой взгляд это важный элемент в усилении защиты Windows Vista поскольку решает проблему одновременного изменения нескольких файлов, реестра, и дескрипторов безопасности (security descriptors) для них. Без этого всегда есть временной отрезок когда файлы, ключи в реестре и дескрипторы могут не соответствовать друг другу тем самым, потенциально, давая возможность хакеру провести аттаку. С этими проблемами боролись раньше различными способами. Теперь же это становится гораздо проще.

Другое важное использование транзакций в Windows Vista - это применение обновления (Windows updates). Это проще обяснить на примере.

Допустим обновление состоит из двух файлов: first.dll и second.dll. Допустим также, что при инсталляции этого обновления файл second.dll находился в использовании (например, была запущена программа, которая использует функциональность из second.dll), а first.dll никто не использовал в момент инсталляции обновления.

В предыдущих версиях Windows инсталляция такого бы обновления заменила бы first.dll сразу, а замену second.dll была бы вынуждена отложить до перезагрузки. Таким образом до следующей перезагрузки система работает со смешанным набором исполняемых файлов. На мой взгляд этот достаточно опасно, поскольку все такие комбинации практически невозможно протестировать.

В Windows Vista обновление применяется внутри транзакции. Как только обнаруживается, что какой-то файл находится в использовании, вся транзакция откатывается и применение обновления откладывается до следующей перезагрузки. Тем самым либо все файлы, включенные в обновление, обновляются, либо никакой и нет ситуации, когда система работает со смешанными бинарниками.

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

Другой "подвох" - это то, что изменения не видны другим процессам (и другим другим потокам (threads), если только они не присоединились к транзакции). Если это не учитывать, то у вас могут быть серьезные проблемы в случае приложений клиент-сервер. Например, ваше приложение состоит из client.exe (клиент) и server.exe (сервер). Клиент создает файл и сообщает серверу, что файл создан. Сервер получает запрос и обрабатывает файл. Если клиент будет создавать файл внутри транзакции и вызывать сервер прежде чем выполнить транзакцию, сервер не "увидит" этого файла. При чем в зависимости от того насколько быстро после получения запроса сервер начинает обрабатывать файл и насколько быстро после посылки запроса клиент выполняет транзакцию это иногда может заканчиваться успешно, а иногда нет.

Обычно в обоих выше указанных случаях проблемы достаточно легко избежать, если все это происходит в одной функции. Действительно большие проблемы, которые могут привести к пересмотру дизайна, начинаются, когда вам надо вызвать функцию внутри транзакции, но эта функция на эннадцатом уровне вызывает функцию, которая не может работать внутри транзакции (в ней есть одна из вышеописанных проблем).

Источник: http://blogs.technet.com/vitalipro/

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.122 секунд (Общее время SQL: 0.105 секунд - SQL запросов: 51 - Среднее время SQL: 0.00206 секунд))
Top.Mail.Ru