Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сжатие реестра 
:(
    Опции темы
MadCoder
  Дата 16.7.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Нашел код, который сжимает реестр, помогите пожалуйста перевести на Delphi:
Код

//----------------------------------------------------------------------
//
// CompactRegistry
//
// Compacts the Registry.
//
//----------------------------------------------------------------------
void CompactRegistry( HWND hDlg )
{
TCHAR backupHivePath[1024];
TCHAR backupHiveFile[1024];
TCHAR tmpBackupHiveFile[1024];
HKEY hKey;
int hive;
static const struct {
HKEY RootKey;
TCHAR * KeyName;
} HiveList[] = {
{ HKEY_LOCAL_MACHINE, _T("SYSTEM") },
{ HKEY_LOCAL_MACHINE, _T("SOFTWARE") },
{ HKEY_LOCAL_MACHINE, _T("SAM") },
{ HKEY_LOCAL_MACHINE, _T("SECURITY") },
{ HKEY_USERS, _T(".DEFAULT") },
{ NULL, NULL },
};


SetDlgItemText( hDlg, IDC_OPERATION,
_T("Compacting Registry hives:"));
SetDlgItemText( hDlg, IDC_PATHNAME, _T(""));

//
// Create a backup directory
//
ExpandEnvironmentStrings( _T("%SystemRoot%\\System32\\Config\\Newsid Backup"), 
backupHivePath, sizeof( backupHivePath)/sizeof(TCHAR) ); 
if( CreateDirectory( backupHivePath, NULL )) {

for( hive = 0; HiveList[hive].RootKey; ++hive ) {

SetDlgItemText( hDlg, IDC_PATHNAME, HiveList[hive].KeyName );

_stprintf( backupHiveFile, _T("%s\\%s.bak"),
backupHivePath, HiveList[hive].KeyName );

if( RegOpenKey( HiveList[hive].RootKey, HiveList[hive].KeyName, &hKey ) ==
ERROR_SUCCESS ) { 

RegFlushKey( hKey );
RegFlushKey( HKEY_LOCAL_MACHINE );

if( RegSaveKey( hKey, backupHiveFile, NULL ) == 
ERROR_SUCCESS ) { 

RegCloseKey( hKey );
_stprintf( tmpBackupHiveFile, _T("%s\\%s"), 
backupHivePath, HiveList[hive].KeyName );
RegReplaceKey( HiveList[hive].RootKey,
HiveList[hive].KeyName, backupHiveFile, 
tmpBackupHiveFile );

} else {

RegCloseKey( hKey );
}
}
}
}
}

PM WWW ICQ   Вверх
Virtuals
Дата 17.7.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



MadCoder, че тут переводить? smile  smile 
ищи где реализована функция 
backupHivePath
остальное в твоем примере "вода" smile 
PM MAIL ICQ   Вверх
dumb
Дата 17.7.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



backupHivePath - это буфер, просто форматирование кода убогое. smile
там если всмотреться, видно главное действо - RegSaveKey-RegReplaceKey
PM MAIL   Вверх
MadCoder
Дата 17.7.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Код написал Марк Русинович из SysInternals. Информацию нашел тут.

Я так понимаю, что этот код бекапит некоторые ветки в файл, а потом указывает этот файл для восстановления. Где тут сжатие?
PM WWW ICQ   Вверх
dumb
Дата 17.7.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



при восстановлении из файла, ветка пишется с нуля и таким образом получается дефрагментированной. сжатие получается за счет неиспользованных промежутков, которые неизбежно появляются при активном стирании-добавлении данных. вообще, суть та же, что и в БД/файловых системах.
т.е., если проводить аналогию с хардом, то это как дефрагментация путем копирования всех файлов на другой раздел, формат раздела и последующий возврат файлов на него.
PM MAIL   Вверх
Virtuals
Дата 23.7.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



dumb, сыплю голову пеплом, точно. smile плохо смотрел

Цитата

видно главное действо - RegSaveKey-RegReplaceKey

ага, данное действо можно даж из батника сделать, утилита REG. smile (правда не везде и не всегда, ибо права доступа еще есть ;) )
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.