Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.01;
Скачать: CL | DM;

Вниз

Как подключиться к удаленному реестру?   Найти похожие ветки 

 
Урсулапов_   (2008-12-30 10:02) [0]

Делаю так:
procedure TForm1.Button1Click(Sender: TObject);
begin
RegIniFile := TRegIniFile.Create("Software");
RegIniFile.RootKey := HKEY_LOCAL_MACHINE;
If not (RegIniFile.RegistryConnect("\\Sw_client")) then ShowMessage("Not Connected");
RegIniFile.Free;
end;

При выполнении выводится сообщение "Not connected", то есть не подключился к реестру.
И еще непонятно, где тут надо было вводить логин и пароль пользователя, под именем которого я подключаюсь к реестру, может проблема в этом?
Заранее спасибо.


 
Skyle ©   (2008-12-30 10:15) [1]

В MSDN всё есть

If the current user does not have proper access to the remote computer, the call to RegConnectRegistry fails. To connect to a remote registry, call LogonUser with LOGON32_LOGON_NEW_CREDENTIALS and ImpersonateLoggedOnUser before calling RegConnectRegistry.

Читать про функцию RegConnectRegistry


 
Урсулапов_   (2008-12-30 14:19) [2]

Спасибо за RegConnectRegistry.
Итак, откопал следующий код:
function Logon: Boolean;
var
 hToken: Cardinal;
 tp, oldtp: TTokenPrivileges;
 retlen: DWORD;
begin
 Result := ImpersonateSelf(SecurityImpersonation);
 if Result then begin
 // Obtain the current process" token
   Result := OpenProcessToken(GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken);
 end;
 if Result then begin
   // Obtain the LUID of the SeTcbPrivilege
   Result := LookupPrivilegeValue(nil, "SeTcbPrivilege", tp.Privileges[0].Luid);
 end;
 if Result then begin
   // Grant the SeTcbPrivilege
   tp.PrivilegeCount := 1;
   tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(hToken, False, tp, sizeof(TTokenPrivileges), oldtp, retlen);
 end;
 if Result then begin
   // Attempt a logon
   Result := LogonUser("login", "remote_computer", "password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken);
 end;
 if not Result then begin
   // Show the error if any of the above APIs fails
   raise Exception.Create("The logon failed because "" +
   SysErrorMessage(GetLastError()) + """);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Key      : HKEY;
 SubKey   : HKEY;
 Buff_key : array[0..1024] of Char;
 DataType : DWORD;
 Size     : DWORD;
begin

 if not Logon then showMessage("asdaqe");
 
//Подключение к реестру удаленного компьютера
 RegConnectRegistry("remote_computer", HKEY_LOCAL_MACHINE, Key);
 try
   //Открытие ключа
   RegOpenKeyEx(Key, "Software\Microsoft\Windows\CurrentVersion\Uninstall\NOD32",0, KEY_READ, SubKey);
    try
     Buff_key := "";
     Size := SizeOf(Buff_key);
     //Получение данных
     RegQueryValueEx(SubKey, "DisplayName", nil, @DataType, @Buff_key, @Size);

     ShowMessage(Buff_key);
   finally
     RegCloseKey(SubKey);
   end;
 finally
//    RegCloseKey(Key);
 end;
end;


Тут изменил    
Result := LogonUser("login", "remote_computer", "password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken);, но эта функция не выдает ошибку (исключение - Логин и пароль не опознаны) только тогда, когда login равен логину, а password равен паролю в моем компьютере, а изменение значения remote_computer кажется, не играет никакой роли.
Что тут неправильно? :(


 
Урсулапов_   (2008-12-30 15:40) [3]

Каким должно быть  значение второго параметра в функции
LogonUser("login", "remote_computer", "password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken)
, если удаленный компьютер не является членом домена, а только является компьютером "remote_computer" в рабочей группе "workgroup"?


 
Урсулапов_   (2008-12-31 07:20) [4]

Хм...
http://msdn.microsoft.com/ru-ru/library/aa378184(en-us,VS.85).aspx

> The LogonUser function attempts to log a user on to the
> local computer. The local computer is the computer from
> which LogonUser was called. You cannot use LogonUser to
> log on to a remote computer.

))))Прошу прощения, не заметил.
Итак, мне надо было писать
LogonUser("login", ".", "password", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, hToken)
где login и password - логин/пароль удаленного компьютера.
Delphi 7 выдает ошибку, что не знает такую константу(ну или переменную) - LOGON32_LOGON_NEW_CREDENTIALS.
Извините, а вы не знаете, какое числовое значение можно вместо него поставить?
Спасибо.


 
Skyle ©   (2008-12-31 07:30) [5]


> Извините, а вы не знаете, какое числовое значение можно
> вместо него поставить?

В winbase.h написано

define LOGON32_LOGON_NEW_CREDENTIALS 9


 
Урсулапов_   (2008-12-31 08:33) [6]

Ура. Вот так - работает.
function Logon: Boolean;
var
 hToken: Cardinal;
 tp, oldtp: TTokenPrivileges;
 retlen: DWORD;
begin
 Result := ImpersonateSelf(SecurityImpersonation);
 if Result then begin
 // Obtain the current process" token
   Result := OpenProcessToken(GetCurrentProcess(),
   TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken);
 end;
 if Result then begin
   // Obtain the LUID of the SeTcbPrivilege
   Result := LookupPrivilegeValue(nil, "SeTcbPrivilege", tp.Privileges[0].Luid);
 end;
 if Result then begin
   // Grant the SeTcbPrivilege
   tp.PrivilegeCount := 1;
   tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(hToken, False, tp, sizeof(TTokenPrivileges), oldtp, retlen);
 end;
 if Result then begin
   // Attempt a logon
   Result := LogonUser("login", ".", "password", 9, LOGON32_PROVIDER_WINNT50, hToken);
 end;
 if not Result then begin
   // Show the error if any of the above APIs fails
   raise Exception.Create("The logon failed because "" +
   SysErrorMessage(GetLastError()) + """);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 RegIni:TRegIniFile;
 Str : string;
begin
 if not Logon then showMessage("Failed to logon");
 RegIni:=TRegIniFile.Create("Software");
 RegIni.RootKey := HKEY_LOCAL_MACHINE;
 RegIni.RegistryConnect("\\remote_computer");
 Str := RegIni.ReadString("Software\Microsoft\Windows\CurrentVersion\Uninstall\NOD32","D isplayName","Oh no");
 ShowMessage(Str);
 RegIni.Free;
end;

Все понятно, Skyle - большое спасибо! Вопрос закрыт. )))


 
Урсулапов_   (2009-01-05 12:26) [7]

О нет. Не работает. :(
Вернулся после праздников, проверил - не подключается.. Может я тогда много выпил?..



Страницы: 1 вся ветка

Текущий архив: 2009.03.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
9-1177961298
Mr.Vlad
2007-04-30 23:28
2009.03.01
Курсоры


15-1230270627
Урсулапов_
2008-12-26 08:50
2009.03.01
Как определить антивирус на удаленном компьютере


9-1178024466
Ксандр
2007-05-01 17:01
2009.03.01
Как работать с мышью


6-1198579437
Свой
2007-12-25 13:43
2009.03.01
Webserver application и доступ к файлам под IIS 5.1


15-1230522009
Slider007
2008-12-29 06:40
2009.03.01
С днем рождения ! 28 декабря 2008 воскресенье