Мое приложение широко читает и изменяет реестр Windows. Из-за характера приложения существует возможность уничтожения системы.
Чтобы избежать разрушения системы, я хочу создать временную копию моего реестра и использовать копию (файл .reg всего? Или любой другой подходящий формат экспорта) в своем приложении. Я предпочел бы сохранить все функции Windows одинаковыми, поэтому для тестирования я хочу подключить функции реестра моего собственного приложения к DLL, которая перенаправит все обращения к реестру в файл.
Я искал несколько библиотек, но такого не существует, или, может быть, я не знаю, что искать. Что я могу сделать в моей ситуации?
Короче:
Я хочу эмулировать реестр Windows
Я хочу создать подключаемую DLL, которая будет внедрена в мое собственное приложение
Хук DLL будет перехватывать все функции реестра Windows и перенаправлять их в файл в каталоге DLL.
Существует ли реализация реестра Windows с открытым исходным кодом? У меня есть только заголовки, но мне нужно точно такое же поведение, как в Windows, чтобы тщательно протестировать приложение.
Что я могу сделать в моей ситуации?
Реализуйте уровень абстракции поверх API реестра и получите доступ к API через уровень абстракции. Затем вставьте реализацию в код, который требует доступа к реестру.
class SettingsStore {
public:
SettingsStore(const std::string&); // receive path or "unique key" for your settings
virtual ~SettingsStore() = 0;
virtual std::string GetValue(const std::string& key) = 0;
virtual void SetValue(const std::string& key, const std::string& value) = 0;
// ...
};
class RegistryStore: public SettingsStore {
public:
SettingsStore(const std::string&); // receive path or "unique key" for your settings
virtual ~SettingsStore();
// implement in terms of Windows Registry API
virtual std::string GetValue(const std::string& key) override;
virtual void SetValue(const std::string& key, const std::string& value) override;
// ...
private:
// registry handle here
};
После этого реализуйте свой код в терминах вставленной ссылки на хранилище настроек.
Тогда ваш тестовый код может зависеть от TestStore (который расширяет SettingsStore) или чего-либо еще.
Короче:
Я хочу эмулировать реестр Windows
Я хочу создать подключаемую DLL, которая будет внедрена в мое собственное приложение
Это звучит сложно (и похоже на проблему x-y). Запрещает ли вам реализовать решение выше?