16.32.23. Редиректор реестра

В 64 разрядных версиях Windows в реестре ряд ключей имеет две версии - для x32 и x64 приложений. Данная особенность предусмотрена для совместимости, по умолчанию x32 приложению доступны x32 версии ключей, для x64 - соответственно x64 версии. В итоге, к примеру ключ HKEY_LOCAL_MACHINE\SOFTWARE\ x32 и x64 приложения "видят" по разному (фактически, версия ключа HKEY_LOCAL_MACHINE\SOFTWARE\ для x32 приложений хранится в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node). Данный эффект возникает за счет так называемого "редиректора". По умолчанию AVZ и запускаемые в нем скрипты работают с x32 версиями системных ключей реестра, переключение режима возможно двумя методами:
 
1. При помощи изменения параметра X64R при помощи функции SetupAVZ. Действует глобально на время работы скрипта, может встречаться в скрипте многократно. Каждый вызов переключит редиректор в заданный режим, этот режим будет действовать до следующего переключения. В частности, SetupAVZ('X64R=NX') выключает редиректор реестра и функции скрипта обращаются к x64 версиям ключей реестра. В этом режиме доступен ключ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node с x32 версией ключей реестра. SetupAVZ('X64R=YX') включает редиректор, становятся доступны только x32 версии ключей реестра. В 32 разрядной версии Windows данная настройка игнорируется, вызов SetupAVZ('X64R=NX') не вызовет ошибки.
 
2. При помощи необязательного аргумента ARedirMode функций по работе с реестром, поддержка которого добавлена в AVZ версии 5. Возможны следующие варианты:
  • данный аргумент отсутствует, или задан и его значение отлично от значений 'x32' или 'x64'. В этом случае функция скрипта по работе с реестром подчиняется глобальной настройке (см. п.п. 1), и ее работа не отличается от работы в AVZ 4.xx.
  • задано значение 'x32' - независимо от глобальной настройки редиректора конкретно для данного вызова редиректор отработает в режиме x32 приложения. Глобальное состояние редиректора при этом не изменяется.
  • задано значение 'x64' - независимо от глобальной настройки редиректора конкретно для данного вызова редиректор работает в режиме x64 приложения. Глобальное состояние редиректора при этом не изменяется. Указание такого значения для 32-х разрядных версий Windows не вызовет ошибки, на них данный параметр игнорируется.
     
Очевидно, что первый вариант удобен, если необходимо выполнить множество неких операций с заданным состояние редиректора реестра. Второй вариант удобен для разовых операций с реестром, особенно когда режим редиректора заранее неизвестен.