powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реестр
10 сообщений из 10, страница 1 из 1
Реестр
    #32750657
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуисто посмотрите!
что может быть легче, сохранить ветвь из Реестра в файл

TRegistry& regKey = *new TRegistry();
regKey.SaveKey("Software\\My Software", "c:\\Info.reg");
delete &regKey;

И что из етого выходит?
Появляется файл, но пустой!
Подскажите, может я что нитак делаю?

Доступ к реестру открыт записывать могу, читать могу а вот в файл експортировать неполучается!
...
Рейтинг: 0 / 0
Реестр
    #32750709
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот пример допустим попробуй ..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
TRegistry * reg = new TRegistry();
AnsiString FileName = "c:\\test.reg";
AnsiString RegString = "Software\\My Software";

reg->RootKey = HKEY_LOCAL_MACHINE; // видимо из-зи этого и не находил он у тебя ветку 
if (reg->SaveKey(RegString, Filename)) 
  {
      ShowMessage("Saved: " + Filename);
  }
else
  {
      ShowMessage("NOT saved");
  };
delete reg;


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Реестр
    #32751435
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, всеравно образуется пустой файл,
попробуй сам увидеш (Borland C++ 6)
...
Рейтинг: 0 / 0
Реестр
    #32752181
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм , будет время посмотрю ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Реестр
    #32752324
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, небольшой поправка однака!

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


Вот например:
(бильдером правда не владею, тока API)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#include<windows.h>
#include<stdio.h>


main()
{

TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;

 if(!OpenProcessToken(GetCurrentProcess(),
                        TOKEN_ADJUST_PRIVILEGES,
                        &hToken ));


 if(!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &luid));

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


AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
                                NULL, NULL );

 //здесь по идее надо проверить ошибки насчет полученного доступа 

 HKEY hk;
 LONG result= 0 ;
 DWORD dwDisposition;

 if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hk)!=ERROR_SUCCESS)
	 MessageBox(NULL,"registry open","ERROR",MB_OK);
 
 


 
 result=RegSaveKey(hk, "c:\\temp\\reg\\reg2", NULL);
 if(result!=ERROR_SUCCESS)
 {
	 char err[ 80 ];
	 sprintf(err,"error: %u result=%u",GetLastError(),result);
        MessageBox(NULL,err,"ERROR",MB_OK);
 }
 if(RegCloseKey(hk)!=ERROR_SUCCESS)
		MessageBox(NULL,"registry close","ERROR",MB_OK);

}


Код надо запускать из-под админа или backup operator,
в общем у кого привелегии есть.

Да, и еще- всегда проверяйте наличие файла, в который писать собираетесь.
Если он есть - уничтожайте предварительно, ибо этот API это перетирать не умеет.
Удачи!
...
Рейтинг: 0 / 0
Реестр
    #32753075
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного изменил и запустил под билдер, так вот дает ошибку на последних двух шагах:

TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;

if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken )) ShowMessage("Token Open Error");

if(!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &luid)) ShowMessage("Privilegies Error");

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

if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL )) ShowMessage("Set Privileges Error");

HKEY hk;
LONG result;
DWORD dwDisposition;

if(RegOpenKeyEx(HKEY_CURRENT_USER,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_EXECUTE,&hk)!=ERROR_SUCCESS) MessageBox(NULL,"registry open","ERROR",MB_OK);

result=RegSaveKey(hk, "c:\\test.reg", NULL);
if(result!=ERROR_SUCCESS)
{
char err[80];
sprintf(err,"error: %u result=%u",GetLastError(),result);
MessageBox(NULL,err,"ERROR",MB_OK);
}
if(RegCloseKey(hk)!=ERROR_SUCCESS) MessageBox(NULL,"registry close","ERROR",MB_OK);

error 1300 result 1314!
...
Рейтинг: 0 / 0
Реестр
    #32753080
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да кстати
RegOpenKeyEx - winNT version
файл создается пустым
...
Рейтинг: 0 / 0
Реестр
    #32753969
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой простите --null--, кажется работает, но только с правами Админа или Бакап оператора, неужели нельзя с провами обычного юзера? Я же в принципе могу записываит и читать все значения реестра и даже могу запускать regedit.
...
Рейтинг: 0 / 0
Реестр
    #32754087
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AliGator, насколько я понимаю, нельзя.
В отличие от просто просмотра ключей это считается операцией
резервного копирования и потому требует привилегий.
И именно SE_BACKUP_NAME.
Впрочем, тут есть широкое поле для экспериментов - Вам и карты в руки :-)

Между прочим, regedit как-то это делает из-под простого юзера - либо он
не пользуется этим API, либо как-то с правами мутит, может импесронацию
делает или еще что.
Поэтому забавно просто посмотреть в отладчике, какой вызов делает regedit, когда экспортирует в файл.
Может статься, что он просто тупо рекурсивно читает ветвь и "руками"
ее сохраняет, не удивлюсь, это ж технологии Microsoft :-)


Кстати, не помню, как это работает в Win9x, где нету привилегий.
...
Рейтинг: 0 / 0
Реестр
    #32758111
AliGator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) Дааааааааааа, ну и за это спасибо.

Если кто знает что нибудь пишите плз. тема еще открыта...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Реестр
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]