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

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

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

Доступ к реестру открыт записывать могу, читать могу а вот в файл експортировать неполучается!
...
Рейтинг: 0 / 0
22.10.2004, 15:03
    #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
23.10.2004, 08:54
    #32751435
AliGator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реестр
Нет, всеравно образуется пустой файл,
попробуй сам увидеш (Borland C++ 6)
...
Рейтинг: 0 / 0
25.10.2004, 10:06
    #32752181
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реестр
Хмм , будет время посмотрю ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
25.10.2004, 11:11
    #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
25.10.2004, 15:27
    #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
25.10.2004, 15:29
    #32753080
AliGator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реестр
Да кстати
RegOpenKeyEx - winNT version
файл создается пустым
...
Рейтинг: 0 / 0
26.10.2004, 07:45
    #32753969
AliGator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реестр
Ой простите --null--, кажется работает, но только с правами Админа или Бакап оператора, неужели нельзя с провами обычного юзера? Я же в принципе могу записываит и читать все значения реестра и даже могу запускать regedit.
...
Рейтинг: 0 / 0
26.10.2004, 09:52
    #32754087
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реестр
AliGator, насколько я понимаю, нельзя.
В отличие от просто просмотра ключей это считается операцией
резервного копирования и потому требует привилегий.
И именно SE_BACKUP_NAME.
Впрочем, тут есть широкое поле для экспериментов - Вам и карты в руки :-)

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


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

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


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