void CInfo::Save() const { CS_LOCK CKey key; CreateMainKey(key, kKeyName); key.SetValue(kLevel, (UInt32)Level); key.SetValue(kArchiver, ArcType); key.SetValue(kShowPassword, ShowPassword); key.SetValue(kEncryptHeaders, EncryptHeaders); key.RecurseDeleteKey(kArcHistory); key.SetValue_Strings(kArcHistory, ArcPaths); key.RecurseDeleteKey(kOptionsKeyName); { CKey optionsKey; optionsKey.Create(key, kOptionsKeyName); for (int i = 0; i < Formats.Size(); i++) { const CFormatOptions &fo = Formats[i]; CKey fk; fk.Create(optionsKey, fo.FormatID); SetRegUInt32(fk, kLevel, fo.Level); SetRegUInt32(fk, kDictionary, fo.Dictionary); SetRegUInt32(fk, kOrder, fo.Order); SetRegUInt32(fk, kBlockSize, fo.BlockLogSize); SetRegUInt32(fk, kNumThreads, fo.NumThreads); SetRegString(fk, kMethod, fo.Method); SetRegString(fk, kOptions, fo.Options); SetRegString(fk, kEncryptionMethod, fo.EncryptionMethod); } } }
BOOL RegisterHelper(LPCTSTR* rglpszRegister, LPCTSTR* rglpszSymbols, BOOL bReplace) { ASSERT(rglpszRegister != NULL); ASSERT(rglpszSymbols != NULL); CString strKey; CString strValueName; CString strValue; // keeping a key open makes this go a bit faster CKey keyTemp; VERIFY(keyTemp.Create(HKEY_CLASSES_ROOT, _T("CLSID"))); BOOL bResult = TRUE; while (*rglpszRegister != NULL) { LPCTSTR lpszKey = *rglpszRegister++; if (*lpszKey == '\0') continue; LPCTSTR lpszValueName = lpszKey + lstrlen(lpszKey) + 1; LPCTSTR lpszValue = lpszValueName + lstrlen(lpszValueName) + 1; strKey.ReleaseBuffer( FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, lpszKey, NULL, NULL, strKey.GetBuffer(256), 256, (va_list*) rglpszSymbols)); strValueName = lpszValueName; strValue.ReleaseBuffer( FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, lpszValue, NULL, NULL, strValue.GetBuffer(256), 256, (va_list*) rglpszSymbols)); if (strKey.IsEmpty()) { TRACE1("Warning: skipping empty key '%s'.\n", lpszKey); continue; } CKey key; VERIFY(key.Create(HKEY_CLASSES_ROOT, strKey)); if (!bReplace) { CString str; if (key.GetStringValue(str, strValueName) && !str.IsEmpty()) continue; } if (!key.SetStringValue(strValue, strValueName)) { TRACE2("Error: failed setting key '%s' to value '%s'.\n", (LPCTSTR)strKey, (LPCTSTR)strValue); bResult = FALSE; break; } } return bResult; }
void SaveCompressionInfo(const NCompression::CInfo &info) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey compressionKey; compressionKey.Create(HKEY_CURRENT_USER, GetKeyPath(kCompressionKeyName)); compressionKey.RecurseDeleteKey(kCompressionHistoryArchivesKeyName); { CKey historyArchivesKey; historyArchivesKey.Create(compressionKey, kCompressionHistoryArchivesKeyName); for(int i = 0; i < info.HistoryArchives.Size(); i++) { wchar_t numberString[16]; ConvertUInt64ToString(i, numberString); historyArchivesKey.SetValue(numberString, info.HistoryArchives[i]); } } // compressionKey.SetValue(kSolid, info.Solid); // compressionKey.SetValue(kMultiThread, info.MultiThread); compressionKey.RecurseDeleteKey(kCompressionOptionsKeyName); { CKey optionsKey; optionsKey.Create(compressionKey, kCompressionOptionsKeyName); for(int i = 0; i < info.FormatOptionsVector.Size(); i++) { const NCompression::CFormatOptions &fo = info.FormatOptionsVector[i]; CKey formatKey; formatKey.Create(optionsKey, fo.FormatID); SetRegString(formatKey, kCompressionOptions, fo.Options); SetRegString(formatKey, kCompressionMethod, fo.Method); SetRegString(formatKey, kEncryptionMethod, fo.EncryptionMethod); SetRegUInt32(formatKey, kCompressionLevel, fo.Level); SetRegUInt32(formatKey, kCompressionDictionary, fo.Dictionary); SetRegUInt32(formatKey, kCompressionOrder, fo.Order); SetRegUInt32(formatKey, kCompressionBlockSize, fo.BlockLogSize); SetRegUInt32(formatKey, kCompressionNumThreads, fo.NumThreads); } } compressionKey.SetValue(kCompressionLevelValueName, UInt32(info.Level)); compressionKey.SetValue(kCompressionLastFormatValueName, GetSystemString(info.ArchiveType)); compressionKey.SetValue(kCompressionShowPasswordValueName, info.ShowPassword); compressionKey.SetValue(kCompressionEncryptHeadersValueName, info.EncryptHeaders); // compressionKey.SetValue(kCompressionMaximizeValueName, info.Maximize); }
static void SaveStringList(LPCTSTR valueName, const UStringVector &folders) { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue_Strings(valueName, folders); }
void SavePanelPath(UInt32 panel, const UString &path) { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(GetPanelPathName(panel), path); }
static void SaveOption(const TCHAR *value, bool enabled) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey optionsKey; optionsKey.Create(HKEY_CURRENT_USER, GetKeyPath(kOptionsInfoKeyName)); optionsKey.SetValue(value, enabled); }
static void SaveValue(const TCHAR *value, UInt32 valueToWrite) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey optionsKey; optionsKey.Create(HKEY_CURRENT_USER, GetKeyPath(kOptionsInfoKeyName)); optionsKey.SetValue(value, valueToWrite); }
void WriteInternalAssociations(const CObjectVector<CExtInfo> &items) { NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CKey mainKey; mainKey.Create(HKEY_CURRENT_USER, kCUKeyPath); mainKey.RecurseDeleteKey(kAssociations); CKey associationsKey; associationsKey.Create(mainKey, kAssociations); for(int i = 0; i < items.Size(); i++) { const CExtInfo &extInfo = items[i]; CKey key; key.Create(associationsKey, GetSystemString(extInfo.Ext)); key.SetValue(kExtPlugins, JoinStrings(extInfo.Plugins)); // key.SetValue(kExtEnabled, extInfo.Enabled); } }
static void AddContextMenuHandlerCommon(const CSysString &keyName) { DeleteContextMenuHandlerCommon(keyName); NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey key; key.Create(HKEY_CLASSES_ROOT, GetFullContextMenuKeyName(keyName)); key.SetValue(NULL, kExtensionCLSID); }
static void AddDragDropMenuHandlerCommon(const CSysString &keyName) { DeleteDragDropMenuHandlerCommon(keyName); NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CLASSES_ROOT, GetFullDragDropMenuKeyName(keyName)); key.SetValue(NULL, kExtensionCLSID); }
LONG SetValue(HKEY parentKey, LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) { MYASSERT(value != NULL); CKey key; LONG res = key.Create(parentKey, keyName); if (res == ERROR_SUCCESS) res = key.SetValue(valueName, value); return res; }
LONG CKey::SetKeyValue(LPCTSTR keyName, LPCTSTR valueName, LPCTSTR value) throw() { MYASSERT(value != NULL); CKey key; LONG res = key.Create(_object, keyName); if (res == ERROR_SUCCESS) res = key.SetValue(valueName, value); return res; }
void SaveWorkDirInfo(const NWorkDir::CInfo &info) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey optionsKey; optionsKey.Create(HKEY_CURRENT_USER, GetKeyPath(kOptionsInfoKeyName)); optionsKey.SetValue(kWorkDirTypeValueName, UInt32(info.Mode)); optionsKey.SetValue(kWorkDirPathValueName, info.Path); optionsKey.SetValue(kTempRemovableOnlyValueName, info.ForRemovableOnly); }
void SaveExtractionInfo(const NExtract::CInfo &info) { NSynchronization::CCriticalSectionLock lock(g_RegistryOperationsCriticalSection); CKey extractionKey; extractionKey.Create(HKEY_CURRENT_USER, GetKeyPath(kExtractionKeyName)); extractionKey.RecurseDeleteKey(kExtractionPathHistoryKeyName); { CKey pathHistoryKey; pathHistoryKey.Create(extractionKey, kExtractionPathHistoryKeyName); for(int i = 0; i < info.Paths.Size(); i++) { wchar_t numberString[16]; ConvertUInt64ToString(i, numberString); pathHistoryKey.SetValue(numberString, info.Paths[i]); } } extractionKey.SetValue(kExtractionExtractModeValueName, UInt32(info.PathMode)); extractionKey.SetValue(kExtractionOverwriteModeValueName, UInt32(info.OverwriteMode)); extractionKey.SetValue(kExtractionShowPasswordValueName, info.ShowPassword); }
void AddShellExtensionInfo(const CSysString &extension, const UString &programTitle, const UString &programOpenCommand, const UString &iconPath, int iconIndex, const void *shellNewData, int shellNewDataSize) { DeleteShellExtensionKey(extension); DeleteShellExtensionProgramKey(extension); NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CSysString programKeyName = GetExtProgramKeyName(extension); { CKey extKey; extKey.Create(HKEY_CLASSES_ROOT, GetExtensionKeyName(extension)); extKey.SetValue(NULL, programKeyName); if (shellNewData != NULL) { CKey shellNewKey; shellNewKey.Create(extKey, kShellNewKeyName); shellNewKey.SetValue(kShellNewDataValueName, shellNewData, shellNewDataSize); } } CKey programKey; programKey.Create(HKEY_CLASSES_ROOT, programKeyName); programKey.SetValue(NULL, programTitle); { CKey iconKey; iconKey.Create(programKey, kDefaultIconKeyName); UString iconPathFull = iconPath; if (iconIndex >= 0) { iconPathFull += L","; wchar_t s[32]; ConvertUInt64ToString((UInt64)iconIndex, s); iconPathFull += s; } iconKey.SetValue(NULL, iconPathFull); } CKey shellKey; shellKey.Create(programKey, kShellKeyName); shellKey.SetValue(NULL, TEXT("")); CKey openKey; openKey.Create(shellKey, kOpenKeyName); openKey.SetValue(NULL, TEXT("")); CKey commandKey; commandKey.Create(openKey, kCommandKeyName); commandKey.SetValue(NULL, programOpenCommand); }
void CWindowInfo::Save() const { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); { Byte buf[kWindowPositionHeaderSize]; Set32(buf, rect.left); Set32(buf + 4, rect.top); Set32(buf + 8, rect.right); Set32(buf + 12, rect.bottom); SetBool(buf + 16, maximized); key.SetValue(kPositionValueName, buf, kWindowPositionHeaderSize); } { Byte buf[kPanelsInfoHeaderSize]; Set32(buf, numPanels); Set32(buf + 4, currentPanel); Set32(buf + 8, splitterPos); key.SetValue(kPanelsInfoValueName, buf, kPanelsInfoHeaderSize); } }
void CListViewInfo::Save(const UString &id) const { const UInt32 dataSize = kListViewHeaderSize + kColumnInfoSize * Columns.Size(); CByteArr buf(dataSize); Set32(buf, kListViewVersion); Set32(buf + 4, SortID); SetBool(buf + 8, Ascending); FOR_VECTOR (i, Columns) { const CColumnInfo &column = Columns[i]; Byte *p = buf + kListViewHeaderSize + i * kColumnInfoSize; Set32(p, column.PropID); SetBool(p + 4, column.IsVisible); Set32(p + 8, column.Width); } { NSynchronization::CCriticalSectionLock lock(g_CS); CKey key; key.Create(HKEY_CURRENT_USER, kCulumnsKeyName); key.SetValue(GetSystemString(id), (const Byte *)buf, dataSize); } }
static LONG CreateMainKey(CKey &key, LPCTSTR keyName) { return key.Create(HKEY_CURRENT_USER, GetKeyPath(keyName)); }
static void SaveOption(const TCHAR *value, bool enabled) { CKey key; key.Create(HKEY_CURRENT_USER, kCU_FMPath); key.SetValue(value, enabled); }
static LONG MyCreateKey(CKey &key, HKEY parentKey, LPCTSTR keyName, UInt32 wow) { return key.Create(parentKey, keyName, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | wow); }
LONG AddShellExtensionInfo(HKEY hkey, const CSysString &ext, const UString &programTitle, const UString &programOpenCommand, const UString &iconPath, int iconIndex // , const void *shellNewData, int shellNewDataSize ) { LONG res = 0; DeleteShellExtensionInfo(hkey, ext); // NSynchronization::CCriticalSectionLock lock(g_CriticalSection); CSysString programKeyName; { CSysString ext2 = ext; if (iconIndex < 0) ext2 = TEXT("*"); programKeyName = GetExtProgramKeyName(ext2); } { CKey extKey; res = extKey.Create(hkey, GetExtKeyPath(hkey, ext)); extKey.SetValue(NULL, programKeyName); /* if (shellNewData != NULL) { CKey shellNewKey; shellNewKey.Create(extKey, kShellNewKeyName); shellNewKey.SetValue(kShellNewDataValueName, shellNewData, shellNewDataSize); } */ } CKey programKey; programKey.Create(hkey, GetFullKeyPath(hkey, programKeyName)); programKey.SetValue(NULL, programTitle); { CKey iconKey; UString iconPathFull = iconPath; if (iconIndex < 0) iconIndex = 0; // if (iconIndex >= 0) { iconPathFull += L','; wchar_t s[16]; ConvertUInt32ToString((UInt32)iconIndex, s); iconPathFull += s; } iconKey.Create(programKey, kDefaultIconKeyName); iconKey.SetValue(NULL, iconPathFull); } CKey shellKey; shellKey.Create(programKey, kShellKeyName); shellKey.SetValue(NULL, TEXT("")); CKey openKey; openKey.Create(shellKey, kOpenKeyName); openKey.SetValue(NULL, TEXT("")); CKey commandKey; commandKey.Create(openKey, kCommandKeyName); commandKey.SetValue(NULL, programOpenCommand); return res; }
void SaveRegLang(const UString &langFile) { CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(kLangValueName, langFile); }
void SaveUi32Val(const TCHAR *name, UInt32 value) { CKey key; key.Create(HKEY_CURRENT_USER, kCUBasePath); key.SetValue(name, value); }
void SaveRegEditor(const UString &editorPath) { CKey key; key.Create(HKEY_CURRENT_USER, kCU_FMPath); key.SetValue(kEditor, editorPath); }