Форум: "Прочее";
Текущий архив: 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