Изменения в подсистеме Wow64 в Windows 7
Очень редко представляется возможность услышать об изменениях в ядре Windows 7 от сотрудника команды разработчиков этого самого ядра. Так вот, Алексей Пахунов, наш бывший соотечественник, а ныне член команды Windows Kernel, поведал об изменениях в подсистеме Wow64, которая обеспечивает работу 32-битных приложений в 64-битных версиях ОС.
Наконец-то обновилась документация в MSDN. Теперь можно спокойно рассказать, что изменилось в Wow64 с выходом Windows 7.
1. Был полностью переписан
2. Была изменена структура реестра. Многие ключи, перенаправляемые ранее в Wow6432Node, теперь совместно используются 32-х и 64-х разрядными приложениями.
3.
4.
Начну, пожалуй, с перенаправления реестра. Как известно, 64-х битные версии Windows поддерживают два разных представления реестра. Обращения 32-х разрядных приложений к "HKEY_LOCAL_MACHINE\Software" и некоторым другим ключам перенаправляются в "HKEY_LOCAL_MACHINE\Software\Wow6432Node". 64-х разрядные приложения обращаются к "HKEY_LOCAL_MACHINE\Software" напрямую. Таким образом, 32-х битные приложения частично изолируются от 64-х разрядных компонент.
В какой-то момент, разработчики Wow64 столкнулись с проблемой. Некоторые из перенаправляемых ключей должны на самом деле использоваться 32-х и 64-х разрядными приложениями совместно. Для решения этой проблемы был придуман механизм синхронизации (в соответствии со сложными правилами) 32-х и 64-х копий ключей. Он был назван "Registry Reflection".
Почему при этом не было решено отключить перенаправление для этих ключей - загадка. Вероятно, это объясняется особенностями реализации. Никаких разумных "архитектурных" соображений на этот счет нам найти не удалось.
Время показало, что идея использовать Registry Reflection была не слишком хороша. Реестр фундаментально не может обеспечить 100% надежно копирование данных из одного ключа в другой (как и 100% надежность любой другой операции). Но если для "нормальных" операций приложение может получить код ошибки и корректно обработать его, то в случае Registry Reflection приложение решительно ничего не может сделать с кодом ошибки операции копирования.
Помимо этого механизм Registry Reflection:
- Не определяет метод разрешения конфликтов в случае, когда модифицируются обе копии ключа.
- Конфликтует с механизмом поддержки транзакций в некоторых сценариях.
- Создаёт сложности при раздельной установке 32-х и 64-х битных компонент.
- Плохо справляется с большим количеством одновременно открытых ключей.
- Создает сложности во время завершения процесса.
- И т.д. и т.п.
Вдоволь намучавшись с сопровождением этого монстра, мы пришли к заключению, что проблему нужно решать кардинально. Результат - механизм Registry Reflection был полностью убран из Windows 7.
Для обеспечения обратной совместимости с Vista было сделано следующее:
1. Большинство ключей, которые синхронизировались с помощью Registry Reflection, были исключены из списка перенаправляемых ключей. Иными словами вместо раздельных копий ключа, 32-х и 64-х разрядные приложения теперь совместно используют один и тот же ключ. Полный перечень всех ключей можно найти
2. Некоторые приложения обращаются к 32-х битным ключам по их "физическому" имени, с использованием Wow6432Node в пути, не смотря на то, что это некорректно. Вместо этого следует использовать
3. COM runtime был основным компонентом завязанным на Registry Reflection. В него были внесены изменения, позволяющие ему обходится без Registry Reflection. Внешние интерфейсы COM runtime при этом затронуты не были.
Тестирование этих изменений показало, что существующие приложения очень хорошо чувствуют себя в новом окружении, не замечая подмены. При этом заметно уменьшилось время, затрачиваемое приложениями на операции с реестром. Так, при установке Microsoft Office 2003 суммарное время всех операций с реестром сократилось примерно на 30%.
По итогам этой работы была пересмотрена и обновлена вся публичная документация, относящаяся к Wow64:
Источник:
Автор: Алексей Пахунов
По теме
- Платную поддержку Windows 7 могут продлить до 2026 года
- Microsoft прекращает поддержку OneDrive для Windows 7/8/8.1
- Пользователи просят открыть код Windows 7
- Вышло последнее обновление для Windows 7
- Прекращение поддержки Windows 7
- Обновление безопасности Windows 7 тайком включает функцию телеметрии
- Microsoft перевыпустила обновление KB4093118 для Windows 7
- Доступны новые обновления для Windows 7 SP1 и Windows 8.1
- Обновление KB4100480 для Windows 7 SP1 / Server 2008 R2 вызывает проблемы с установкой
- Лучшие антивирусы для Windows 7 за август 2017