Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
Урсулапов_   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1230911401
Константинов
2009-01-02 18:50
2009.03.01
Как починить?


15-1230488629
TCrash
2008-12-28 21:23
2009.03.01
А подскажите готовое решение


15-1230653448
Kerk
2008-12-30 19:10
2009.03.01
Медиа-библиотека


15-1231190566
Банког
2009-01-06 00:22
2009.03.01
Параллельные алгоритмы?


10-1152862016
deplhi
2006-07-14 11:26
2009.03.01
property in com





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский