Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
Почему происходит замещение значения пе…

Почему происходит замещение значения переменной среды ProgramFiles на ProgramFiles(x86) ?

23 Янв 2012

Почему происходит замещение значения переменной среды %ProgramFiles% на %ProgramFiles(x86)% при доступе к ней из 32-разрядной программы, запущенной в 64-разрядной ОС?

При обращении 32-разрядного приложения, запущенного в 64-разрядной версии Windows, к системным переменным среды %ProgramFiles% или %commonprogramfiles%, подсистема WoW64 производит замещение значений данных переменных на значения переменных %ProgramFiles(x86)% и "%commonprogramfiles(x86)%. Так например %ProgramFiles% будет раскрыто как "C:\Program Files (x86)" при обращении из 32-битной программы.

Такое поведение связано с работой системы перенаправления реестра, которая обеспечивает обратную совместимость 32-битного ПО с 64-разрядными ОС. Для 32-битных программ создаётся видимость 32-битного окружения, даже несмотря на то, что данные, к которым они обращаются, находятся в другом месте.

Для предотвращения такого перенаправления в 32-битной программе необходимо использовать переменные среды %programfiles% или %COMMONPROGRAMFILES% (т.е. с обращённым регистром) или использовать флаг KEY_WOW64_64KEY при доступе к соответствующим узлам реестра.

Для полного отключения перенаправления файловой системы в заданном потоке существуют функции Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection, однако их использование в большинстве случаев создаёт проблемы с неявными вызовами и отложенной загрузкой библиотек. Разработчик очень редко полностью контролирует весь ввод-вывод на участке между Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection и если в тот момент, когда перенаправление отключено, произойдёт неявная загрузка кода, 32-битное приложение с большой вероятностью не сможет получить нужную версию библиотеки. Алексей Пахунов, один из разработчиков WoW64, советует применять данную пару функций только для оборачивания вызова функции CreateFile.

Библиографический список

MSDN Library. Registry redirector.

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам