ВоВ64
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2013 г. ) |
В этой статье отсутствует информация о x64 на ARM64; ARM64EC ABI (ранее ARM64X) с сопоставлением регистров 1:1 с соглашением о вызовах x64. ( июнь 2021 г. ) |
Другие имена | 32-битная версия Windows в 64-битной версии Windows |
---|---|
Разработчик(и) | Майкрософт |
Первоначальный выпуск | 25 октября 2001 г |
Операционная система | Microsoft Windows |
Платформа | ИА-64 , x86-64 , ARM64 |
Тип | Уровень совместимости |
Лицензия | Собственное коммерческое программное обеспечение |
Веб-сайт | документы |
В вычислениях на Microsoft платформах WoW64 ( Windows 32-битная версия на ) -битной версии Windows представляет собой 64 подсистему Windows, операционной системы способную запускать 32-битные приложения в 64-битной Windows. [ 1 ] Он включен во все 64-разрядные версии Windows, за исключением Windows Server Server Core , где он является дополнительным компонентом, и Windows Nano Server , где он не включен. [ а ] WoW64 стремится устранить многие различия между 32-битной и 64-битной Windows, в частности, связанные со структурными изменениями в самой Windows.
Библиотеки перевода
[ редактировать ]WoW64 Подсистема включает облегченный уровень совместимости , который имеет одинаковые интерфейсы во всех 64-разрядных версиях Windows. Его цель — создать 32-битную среду, предоставляющую интерфейсы, необходимые для запуска немодифицированных 32-битных приложений Windows в 64-битной системе. WOW64 реализован с использованием нескольких DLL, некоторые из которых включают: [ 3 ]
Wow64.dll
, основной интерфейс ядра Windows NT , который преобразует (преобразует) между 32-битными и 64-битными вызовами, включая с указателями и стеком вызовов. манипуляцииWow64win.dll
, который предоставляет соответствующие точки входа для 32-битных приложений (thunks win32k)- DLL, позволяющая выполнять 32-разрядные инструкции x86, что зависит от архитектуры набора команд .
- На x86-64 ,
Wow64cpu.dll
заботится о переключении процессора из 32-битного в 64-битный режим. Это вычислительно дешево, поскольку машины x86-64 имеют собственный режим для запуска 32-битного кода x86. [ 4 ] - На IA-64 ( Itanium 2 ) для более медленной работы нужны три файла. [ 5 ] программная эмуляция:
Wow64cpu.dll
, «уровень абстракции ЦП»;IA32Exec.bin
, программный эмулятор x86; иWowia32x.dll
, мост между эмулятором и системой WOW64. [ 6 ] - На 64-разрядной версии ARMv8
xtajit.dll
для эмуляции x86 иwowarmhw.dll
для перехода в режим ARM32. [ 3 ]
- На x86-64 ,
Реестр и файловая система
[ редактировать ]Подсистема WoW64 также обрабатывает другие ключевые аспекты запуска 32-битных приложений. Он участвует в управлении взаимодействием 32-битных приложений с компонентами Windows, такими как реестр , который имеет отдельные ключи для 64-битных и 32-битных приложений. Например, HKEY_LOCAL_MACHINE\Software\Wow6432Node — это 32-битный эквивалент HKEY_LOCAL_MACHINE\Software (хотя 32-битные приложения не знают об этом перенаправлении). Некоторые ключи реестра сопоставляются с 64-битными их 32-битными эквивалентами, в то время как содержимое других зеркально отображается, в зависимости от версии Windows.
В операционной системе используется %SystemRoot%\system32
каталог для его 64-битной библиотеки и исполняемых файлов. Это сделано из соображений обратной совместимости, поскольку многие устаревшие приложения жестко запрограммированы на использование этого пути. При запуске 32-битных приложений WoW64 прозрачно перенаправляет доступ к «system32» (например, загрузку DLL) на %SystemRoot%\SysWoW64
, который содержит 32-битные библиотеки и исполняемые файлы. Исключениями из этих перенаправлений являются: [ 7 ]
%SystemRoot%\system32\catroot
%SystemRoot%\system32\catroot2
%SystemRoot%\system32\driverstore
(перенаправлено на Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP)%SystemRoot%\system32\drivers\etc
%SystemRoot%\system32\logfiles
%SystemRoot%\system32\spool
Перенаправление помогает поддерживать работу 32-битных приложений без необходимости знать о статусе WoW64. [ 7 ] Если 32-битное приложение хочет получить доступ к реальному %SystemRoot%\System32
, это можно сделать через псевдокаталог %SystemRoot%\sysnative
начиная с Windows Vista. [ 7 ] Обнаружение статуса Wow64 возможно через IsWow64Process()
.
Существует два каталога Program Files, каждый из которых виден как 32-битным, так и 64-битным приложениям. Каталог, в котором хранятся 32-битные файлы, называется Program Files (x86) , чтобы различать их, в то время как 64-разрядная версия сохраняет традиционную Имя программного файла без каких-либо дополнительных спецификаторов. Перенаправление файловой системы не используется для сохранения разделения; вместо этого WoW64 меняется FOLDERID_ProgramFiles
и аналогичные результаты запроса, чтобы указать программам установки правильный каталог. [ 8 ]
В ARM64 также обнаружено несколько новых каталогов, где WOW64 обеспечивает запуск не только 32-битных программ x86, но и 32-битных программ ARM, использующих SysArm32
вместо. ARM64 также поддерживает так называемый CHPE «скомпилированный гибридный PE», который содержит код ARM64 в dll-контейнере x86 (для более эффективной совместимости без эмуляции); эти библиотеки DLL находятся в SyCHPE32
. [ 9 ]
Совместимость приложений
[ редактировать ]режима ядра 32-битные приложения, которые включают только 32-битные драйверы устройств или которые подключаются к пространству процессов компонентов, реализованных исключительно как 64-битные процессы (например, Windows Explorer), не могут быть выполнены на 64-битной платформе.
Поддерживаются 32-битные сервисные приложения. Папка SysWOW64, расположенная в папке Windows на диске с ОС, содержит несколько приложений для поддержки 32-битных приложений (например, cmd.exe, odbcad32.exe для регистрации соединений ODBC для 32-битных приложений). 16-битные устаревшие приложения для MS-DOS и ранних версий Windows обычно несовместимы с 64-битными версиями Windows Vista, 7, 8 и 10, но их можно запускать в 64-битной ОС Windows с помощью программного обеспечения виртуализации. С другой стороны, 32-битные версии Windows XP, Vista, 7, 8 и 10 обычно могут запускать 16-битные приложения практически без проблем. 16-разрядные приложения нельзя запускать напрямую в 64-разрядных версиях Windows, поскольку процессор не поддерживает режим VM86 при работе в 64-разрядной версии.
Internet Explorer реализован как как 32-битное, так и как 64-битное приложение из-за большого количества 32-битных компонентов ActiveX в Интернете, которые невозможно подключить к 64-битной версии.
Раньше 32-битная версия использовалась по умолчанию, и было сложно сделать 64-битную версию браузером по умолчанию. Ситуация изменилась в Internet Explorer 10, в котором 32-битные надстройки запускались внутри 64-битного сеанса, что устраняло необходимость переключения между двумя версиями. Если пользователь зайдет в 32-разрядную папку (обычно C:\Program Files (x86)\Internet Explorer) и дважды щелкнет там файл iexplore.exe, 64-разрядная версия все равно загрузится. В Internet Explorer 9 и более ранних версиях при этом загружалась только 32-разрядная версия.
По состоянию на 2010 год [update], ошибка в слое перевода x64-версии WoW64. [ 10 ] [ 11 ] также делает несовместимыми все 32-разрядные приложения, использующие функцию Windows API GetThreadContext. К таким приложениям относятся отладчики приложений, трассировщики стека вызовов (например, интегрированные среды разработки, отображающие стек вызовов) и приложения, использующие механизмы сборки мусора (GC). Один из наиболее широко используемых, но затронутых [ 12 ] Двигатели GC — это Boehm GC . Он также используется в качестве сборщика мусора по умолчанию в не менее популярном Mono . Хотя в октябре 2010 года Mono представила новый (но необязательный) GC под названием SGen-GC, он выполняет сканирование стека так же, как Boehm GC, что также делает его несовместимым с WoW64. По состоянию на июль 2016 года исправление не было предоставлено, хотя были предложены обходные пути. [ 13 ]
Производительность
[ редактировать ]По данным Microsoft, 32-разрядное программное обеспечение, работающее под WOW64 (x64), имеет производительность, аналогичную работе под 32-разрядной Windows, но с меньшим количеством возможных потоков. В системе, отличной от x64, WOW64 приводит к снижению производительности из-за задействованной программной эмуляции. [ 5 ]
32-битному приложению можно предоставить полные 4 гигабайта виртуальной памяти в 64-битной системе, тогда как в 32-битной системе часть этой адресуемой памяти теряется, поскольку она используется ядром и периферийными устройствами, отображаемыми в памяти, такими как в качестве адаптера дисплея , что обычно приводит к тому, что приложения могут использовать максимум 2 ГБ или 3 ГБ ОЗУ.
См. также
[ редактировать ]- Шим (вычисления)
- Контроль учетных записей также имеет механизм для работы со «старыми» программами, которые записывают файлы в определенные области в «новых» окнах. Файлы, записанные процессом без прав администратора в защищенные места, такие как Program Files и windows\system32, будут перенаправлены в каталог виртуального хранилища.
- винда в винде
Примечания
[ редактировать ]- ^ В частности:
- Windows XP Профессиональная 64-разрядная версия
- IA-64 и x64. Версии Windows Server 2003
- x64- версии Windows Vista , Windows Server 2008 , Windows 7 , Windows 8 , Windows Server 2012 , Windows 8.1 , Windows 10 , Windows Server 2016 , Windows Server 2019 , Windows 11 , Windows Server 2022
- ARM64- версии Windows 10 , Windows 11 и Windows Server 2022 .
wow64.dll
,wow64win.dll
, иwow64cpu.dll
.
Ссылки
[ редактировать ]- ^ КуиннРадич; DCtheGeek; мсатранджр (19 августа 2020 г.). «Детали реализации WOW64» . Learn.microsoft.com . Архивировано из оригинала 16 апреля 2023 г. Проверено 16 апреля 2023 г.
- ^ Конвей, Адам (25 января 2023 г.). «Выпущена версия Wine 8.0 с улучшенной совместимостью с контроллерами, экспериментальной поддержкой WoW64 и многим другим» . Разработчики XDA . Архивировано из оригинала 16 апреля 2023 г. Проверено 16 апреля 2023 г.
- ^ Перейти обратно: а б «Детали реализации WOW64» . Майкрософт . Проверено 21 апреля 2018 г.
- ^ Экельс, Стивен (9 ноября 2020 г.). «WOW64!Hooks: Внутреннее устройство подсистемы WOW64 и методы перехвата» . Мандиант .
- ^ Перейти обратно: а б «Производительность и потребление памяти в WOW64» . Майкрософт . Проверено 6 мая 2013 г.
- ^ «Подробности реализации WOW64 (Windows)» . 26 апреля 2010 г. Архивировано из оригинала 26 апреля 2010 г. – Более ранняя версия статьи, в которой показано
Wow64cpu.dll
в рамках реализации IA-64. - ^ Перейти обратно: а б с «Перенаправитель файловой системы (Windows)» . msdn.microsoft.com . 2 февраля 2023 г.
- ^ «winapi — SHGetFolderPath() 32 бит против 64 бит» . Переполнение стека .
- ^ Бенеш, Петр (4 ноября 2018 г.). «Внутреннее устройство WoW64: новое открытие Heaven's Gate на ARM» . безмозглая-область (wbenny.github.io) .
- ^ Со, Зак (13 ноября 2010 г.). «Ошибка WOW64: GetThreadContext() может возвращать устаревшее содержимое» . Блог Зака Соу . Проверено 15 ноября 2010 г.
- ^ «Ошибка ОС WOW64: старые 32-битные приложения XP не работают под Win7 WOW64» . Сеть разработчиков Microsoft . 11 ноября 2010 года . Проверено 15 ноября 2010 г.
- ^ «Дискуссии о сборщике мусора Бема (Boehm GC)» . Проверено 25 ноября 2010 г.
- ^ «GetThreadContext возвращает устаревшие значения регистров на WOW64» . Майкрософт = 23 июля 2016 г. Проверено 23 июля 2016 г.