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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как экспортировать целиком ветвь реестра, Нужно получить определенную часть рестра 
:(
    Опции темы
BeeMaster
Дата 5.4.2008, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите пожалуйста как это можно реализовать. Гугл молчит по этому вопросу по этому решил написать сюда.

Дайте пример т.к я совсем новичок и почти в этом не разбераюсь =)))
PM MAIL   Вверх
Alexeis
Дата 5.4.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



  Думаю RegSaveKey то что нужно smile .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
BeeMaster
Дата 5.4.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А можно пример?
PM MAIL   Вверх
Alexeis
Дата 5.4.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Код

const SE_BACKUP_NAME ='SeBackupPrivilege';

procedure TForm1.FormCreate(Sender: TObject);
var
  hToken : THandle;
  luid   : TLargeInteger;
  tp     : TOKEN_PRIVILEGES;
  retlen : Cardinal;
  key    : HKEY;
  r      : Integer;
begin
  if not OpenProcessToken(GetCurrentProcess(),
                      TOKEN_ADJUST_PRIVILEGES,
                      hToken )
  then
    Begin
      ShowMessage('OpenProcessToken ' + IntToStr(GetLastError()));
      exit;
    end;

  if not LookupPrivilegeValue(nil, SE_BACKUP_NAME, luid)
  then
    begin
      ShowMessage('LookupPrivilegeValue' + IntToStr(GetLastError()));
      exit;
    end;

  tp.PrivilegeCount           := 1;
  tp.Privileges[0].Luid       := luid;
  tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

  AdjustTokenPrivileges(hToken, false, tp, sizeof(TOKEN_PRIVILEGES), nil, retlen);

  if (GetLastError() = ERROR_NOT_ALL_ASSIGNED)
  then
    Begin
      ShowMessage('The token does not have the specified privilege.');
    end;

  r := RegOpenKey(HKEY_CURRENT_USER, 'Software', key);
  r := RegSaveKey(key, 'C:\1.reg', nil);
  RegCloseKey(key);

  AdjustTokenPrivileges( hToken, true, PTokenPrivileges(nil)^, 0, nil, retlen);

  CloseHandle(hToken);
end;



Добавлено @ 17:36
 Еще такой вариант есть с использованием Regedit

Код

WinExec('regedit /e C:\RegData.reg HKEY_LOCAL_MACHINE\Software', SW_SHOW);


Да и еще тут есть http://forum.vingrad.ru/index.php?show_typ...showtopic=53881 почти такой же пример как я привел. Плохо искал...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
BeeMaster
Дата 5.4.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

const SE_BACKUP_NAME ='SeBackupPrivilege';
procedure TForm1.FormCreate(Sender: TObject);
var
  hToken : THandle;
  luid   : TLargeInteger;
  tp     : TOKEN_PRIVILEGES;
  retlen : Cardinal;
  key    : HKEY;
  r      : Integer;
begin
  if not OpenProcessToken(GetCurrentProcess(),
                      TOKEN_ADJUST_PRIVILEGES,
                      hToken )
  then
    Begin
      ShowMessage('OpenProcessToken ' + IntToStr(GetLastError()));
      exit;
    end;
  if not LookupPrivilegeValue(nil, SE_BACKUP_NAME, luid)
  then
    begin
      ShowMessage('LookupPrivilegeValue' + IntToStr(GetLastError()));
      exit;
    end;
  tp.PrivilegeCount           := 1;
  tp.Privileges[0].Luid       := luid;
  tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken, false, tp, sizeof(TOKEN_PRIVILEGES), nil, retlen);
  if (GetLastError() = ERROR_NOT_ALL_ASSIGNED)
  then
    Begin
      ShowMessage('The token does not have the specified privilege.');
    end;
  r := RegOpenKey(HKEY_CURRENT_USER, 'Software', key);
  r := RegSaveKey(key, 'C:\1.reg', nil);
  RegCloseKey(key);
  AdjustTokenPrivileges( hToken, true, nil, 0, nil, retlen);
  CloseHandle(hToken);
end;

Он выдает ошибку и кричит delphi на строку AdjustTokenPrivileges( hToken, true, nil, 0, nil, retlen); а если её удалить то файл получается нечитаемый

Код

WinExec('regedit /e C:\RegData.reg HKEY_LOCAL_MACHINE\Software', SW_SHOW);

Тут проблемма. Если в реестре есть пробел то она перестает работать. Пример: HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager

А с http://forum.vingrad.ru/index.php?show_typ...showtopic=53881 вообще я не понял как работать=(



У кого есть предложения?

Добавлено через 6 минут и 13 секунд
А можно сделать так.

Скопирывать HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager (должна остаться) и сохранить HKEY_CURRENT_USER\Software\Microsoft\123456 потом воспользоваться WinExec('regedit /e C:\RegData.reg HKEY_CURRENT_USER\Software\Microsoft\123456', SW_SHOW); и потом удалить HKEY_CURRENT_USER\Software\Microsoft\123456    .


 smile 
PM MAIL   Вверх
Alexeis
Дата 5.4.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(BeeMaster @  5.4.2008,  17:33 Найти цитируемый пост)
Он выдает ошибку и кричит delphi на строку AdjustTokenPrivileges( hToken, true, nil, 0, nil, retlen); а если её удалить то файл получается нечитаемый

А ну да точно тут должно быть так  
AdjustTokenPrivileges( hToken, true, PTokenPrivileges(nil)^, 0, nil, retlen);

Теперь на счет нечитабельности, кто сказал что файл должен быть читабельный? Сам открывал хоть раз файл реестра блокнотом? Там что-то типа базы данных, так что не читабельный еще не значит что сохранение прошло неправильно. На самом деле там все правильно, просто не для блокнота сделано.

На счет WinExec('regedit /e C:\RegData.reg HKEY_LOCAL_MACHINE\Software', SW_SHOW);

Пути с пробелами принято брать в двойные кавычки, например так 
Код

WinExec('regedit /e C:\RegData.reg "HKEY_LOCAL_MACHINE\Software"', SW_SHOW);





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
BeeMaster
Дата 5.4.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



За это отдельное спасибо
Код

WinExec('regedit /e C:\RegData.reg "HKEY_LOCAL_MACHINE\Software"', SW_SHOW);


<<<Теперь на счет нечитабельности, кто сказал что файл должен быть читабельный? Сам открывал хоть раз файл реестра блокнотом? Там что-то типа базы данных, так что не читабельный еще не значит что сохранение прошло неправильно. На самом деле там все правильно, просто не для блокнота сделано.


На счет этого. Я знаю как должна была выгледить запись. Но она действительно нечитаемая было потому что в блокноте смотрел.


Пасиб за помощь  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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