string CIniFile::ValueName(const string &keyname, S32 const valueID) const { S32 sectionId = findSection(keyname); if(sectionId == noID) return ""; return ValueName(sectionId, valueID); }
string CIniFile::ValueName( string const keyname, unsigned const valueID) const { long keyID = FindKey( keyname); if ( keyID == noID) return ""; return ValueName( keyID, valueID); }
// Получение изменяемого имени параметра. // Тоже используется UID без префикса string GetValueName(const string& Suffix) { string Uid = GenerateUidAsString(""); string ValueName(Uid.t_str(), Uid.Length() - 5); ValueName += Suffix; DBGRPTDBG("GetValueName", "returning value_name='%s'", ValueName.t_str()); return ValueName; }
size_t QueryRequest::get_indices(StringRef name, IndexVec* indices) { set_has_names_for_values(true); if (value_names_.get_indices(name, indices) == 0) { if (value_names_.size() > elements_count()) { // No more space left for new named values return 0; } if (name.size() > 0 && name.front() == '"' && name.back() == '"') { name = name.substr(1, name.size() - 2); } indices->push_back(value_names_.add(ValueName(name.to_string()))); } return indices->size(); }
string CIniFile::GetValueName( const string §ion, S32 const keyID) const { return ValueName( section, keyID); }
string CIniFile::GetValueName(S32 const sectionID, S32 const keyID) const { return ValueName(sectionID, keyID); }
//***************************************************************************** //***************************************************************************** DWORD _CopyRegistryKey(HKEY hkSource, HKEY hkDest) { // Info über den Key besorgen DWORD nSubKeys = 0; DWORD MaxSubkeyLen = 0; DWORD MaxClassLen = 0; DWORD nValues = 0; DWORD MaxValuenameLen = 0; DWORD MaxValueLen = 0; LONG lErg = RegQueryInfoKey(hkSource, NULL, // Class Buffer NULL, // ->Classbuffer Size NULL, // Reserved &nSubKeys, // Anzahl Unterschlüssel &MaxSubkeyLen, &MaxClassLen, &nValues, &MaxValuenameLen, &MaxValueLen, NULL, // ->Länge des Security Descriptors NULL); // ->FILETIME des letzten Schreibzugriffs if(lErg!=ERROR_SUCCESS) return 1; MaxSubkeyLen++; MaxClassLen++; MaxValuenameLen++; MaxValueLen++; // Zuerst durchenumerieren der Subkeys STRING_AP SubkeyName(MaxSubkeyLen); for(DWORD i=0;i<nSubKeys;i++) { DWORD dwKeynameLen = MaxSubkeyLen; FILETIME ft; // Namen des Keys ermitteln lErg = RegEnumKeyEx(hkSource,i,SubkeyName.s,&dwKeynameLen,NULL,NULL,NULL,&ft); if(lErg!=ERROR_SUCCESS) continue; // Source-Subkey öffnen HKEY hkNewSource = NULL; lErg = RegOpenKeyEx(hkSource,SubkeyName.s,0,KEY_READ,&hkNewSource); if(lErg!=ERROR_SUCCESS) continue; // Destination-Subkey erzeugen HKEY hkNewDest = NULL; lErg = RegCreateKeyEx(hkDest,SubkeyName.s,NULL,NULL,0,KEY_WRITE,NULL,&hkNewDest,NULL); if(lErg!=ERROR_SUCCESS) { RegCloseKey(hkNewSource); hkNewSource = NULL; continue; }; // Rekursiv weiterbearbeiten _CopyRegistryKey(hkNewSource,hkNewDest); // Keys zumachen RegCloseKey(hkNewSource); RegCloseKey(hkNewDest); }; // Jetzt durchnumerieren und Schreiben der Values STRING_AP ValueName(MaxValuenameLen); STRING_AP Value(MaxValueLen); for(DWORD i=0;i<nValues;i++) { DWORD dwVnl = MaxValuenameLen; DWORD dwType = 0; DWORD dwDs = MaxValueLen; lErg = RegEnumValue(hkSource,i,ValueName.s,&dwVnl,NULL,&dwType,(BYTE*)Value.s,&dwDs); if(lErg!=ERROR_SUCCESS) continue; lErg = RegSetValueEx(hkDest,(const char*)ValueName.s,0,dwType,(const unsigned char*)Value.s,dwDs); }; return 0; };