Файлы эмулятора:
FarRegSubstitution.exe
FarRegSubstitution.ini
rsinject.dll
Как заставить работать:
Самое простое: кладете все файлы эмулятора рядом с far.exe, запускаете SaveSettings.bat из фаровской поставки – он сохраняет все фаровские настройки в файлах: FarSave1.reg и FarSave2.reg, которые эмулятор и будет использовать. Все.
Для запуска фара из под эмулятора запускаете FarRegSubstitution.exe, который автоматически запустит фар.
Настройка эмулятора:
в FarRegSubstitution.ini есть всего три параметра: FarSave1, FarSave2, Far.
FarSave1 и FarSave2
- должны указывать на файлы с импортированными ключами из реестра, к примеру скриптом который входит в стандартную поставку фара: SaveSettings.bat.
Файлы должны содержать в себе ветки: HKEY_CURRENT_USER\SOFTWARE\FAR и HKEY_LOCAL_MACHINE\SOFTWARE\FAR - это не обязательно, т.е. не проверяется, так отрабатывает SaveSettings.bat, под него и заточено.
Формат файлов должен быть: REGEDIT4 (файлы созданные при помощи скрипта SaveSettings.bat этому параметру удовлетворяют). Формат: Windows Registry Editor Version 5.00 - не пойдет.
Настройки должны указываться с полными путями, или простым относительным путем, если эмулятор лежит рядом с Far.exe и reg файлами. Не должно быть чего-то такого "../../far/Far.exe"
По умолчанию, настроено так, что предполагается расположение эмулятора рядом с Far.exe.
Работа эмулятора:
Эмулятор считывает информацию из FarRegSubstitution.ini, запускает фар, создает поток в его адресном пространстве, который загружает rsinject.dll, далее rsinject.dll создает в памяти объект эмулятора реестра и экспортирует туда ключи из файлов указанных в FarRegSubstitution.ini, затем подменяет вызовы процедур обращения к реестру на свои собственные.
Объект эмулятора реестра работает так: при вызове следующих функции: RegOpenKeyEx, RegCreateKeyEx, RegOpenKeyA, проверяет идет ли обращение к ключам: HKEY_CURRENT_USER\SOFTWARE\FAR и HKEY_LOCAL_MACHINE\SOFTWARE\FAR, если нет, то он перенаправляет вызов системному реестру, если да, то отрабатывает эмулятор.
При вызове всех остальных функции, проверяется, существования в эмуляторе открытого ключа с передающимся идентификатором, если такой ключ не находится, то обращение передается системному реестру.
Ограничения:
Платформа только 32-х битная, не реализованы процедуры для работы с юникодом, эмулятор не пойдет в линейке win9х, winME.
Эмулируемые процедуры:
RegOpenKeyExA
RegDeleteValueA
RegDeleteKeyA
RegCreateKeyExA
RegSetValueExA
RegQueryValueA
RegOpenKeyA
RegEnumKeyExA
RegQueryValueExA
RegCloseKey
RegEnumValueA
Это только те процедуры, которые использует Far.exe, плагины могут (и используют) более расширенный список процедур, которые эмулятор обрабатывать не будет, они будут обрабатываться системным реестром.
При парсинге reg файлов корректно обрабатываются только следующие типы данных: REG_SZ, REG_DWORD(dword), REG_BINARY(hex), REG_EXPAND_SZ(hex(2)) REG_MULTI_SZ(hex(7)).
Обработка типов: REG_NONE, REG_DWORD_LITTLE_ENDIAN, REG_DWORD_BIG_ENDIAN, REG_LINK, REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_RESOURCE_REQUIREMENTS_LIST – не предусмотрена, но фар их вроде бы и не использует.