Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с системным реестром удалённого компьютера в Delphi: безопасность и гибкость учётных записей

Delphi , Синтаксис , Справочник по API-функциям

Работа с системным реестром удалённого компьютера в Delphi

Вопрос пользователя касается возможности чтения и записи системного реестра удалённого компьютера с использованием различных учётных данных. В частности, пользователь использует Delphi для удалённого доступа к системному реестру, что успешно работает, когда учётная запись на локальном компьютере имеет права администратора на удалённом. Однако, для повышения безопасности и гибкости, пользователь хочет иметь возможность указывать учётные данные при подключении к системному реестру удалённого компьютера.

Пример кода для установки фонового изображения рабочего стола

procedure TForm1.SetWallpaperKey;
var
   reg: TRegistry;
begin
   reg:= TRegistry.Create;
   with reg do
   begin
      try
         if RegistryConnect('192.168.1.105') then // Указываем IP-адрес удалённого компьютера
            if OpenKey('\Control Panel\Desktop', False) then
            begin
               // Изменяем фоновое изображение и включаем его повторение
               WriteString('Wallpaper', 'c:\windows\CIRCLES.bmp');
               WriteString('TileWallpaper', '1');
               // Отключаем скринсейвер
               WriteString('ScreenSaveActive', '0');
            end;
      finally
         Free;
      end;
   end;
end;

Решение проблемы с использованием различных учётных данных

Для работы с системным реестром удалённого компьютера с использованием других учётных данных, можно использовать WMI (Windows Management Instrumentation) и классы, предоставляемые WMI, такие как StdRegProv. Этот класс позволяет читать и записывать значения системного реестра как на локальном, так и на удалённом компьютере.

Пример кода для чтения строки значения реестра:

uses
   ActiveX,
   ComObj,
   Windows,
   SysUtils;

procedure Invoke_StdRegProv_GetStringValue;
var
   FSWbemLocator: OLEVariant;
   FWMIService: OLEVariant;
   FWbemObjectSet: OLEVariant;
   FInParams: OLEVariant;
   FOutParams: OLEVariant;
begin
   FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
   FWMIService := FSWbemLocator.ConnectServer('192.168.52.128', 'root\default', 'Administrator', 'password');
   FWbemObjectSet := FWMIService.Get('StdRegProv');
   FInParams := FWbemObjectSet.Methods_.Item('GetStringValue').InParameters.SpawnInstance_;
   FInParams.hDefKey := HKEY_LOCAL_MACHINE;
   FInParams.sSubKeyName := 'SOFTWARE\Borland\Delphi\5.0';
   FInParams.sValueName := 'App';

   FOutParams := FWMIService.ExecMethod('StdRegProv', 'GetStringValue', FInParams);
   // Обработка результатов
end;

Примечание: При использовании StdRegProv необходимо учитывать версию операционной системы удалённого компьютера, так как namespace, в котором доступен класс, может отличаться.

Альтернативный способ

Используя функции Windows API, можно получить доступ к системному реестру удалённого компьютера, используя учётные данные, отличные от текущего пользователя. Для этого можно использовать функцию RegConnectRegistry в сочетании с LogonUser и ImpersonateLoggedOnUser.

Пример кода для доступа к системному реестру удалённого компьютера:

uses
   Windows,
   Registry,
   SysUtils;

procedure AccessRemoteRegistry(const lpMachineName, lpszUsername, lpszPassword: PChar);
var
   netResource: TNetResource;
   dwFlags: DWORD;
   dwRetVal: DWORD;
   phToken: THandle;
   phkResult: HKEY;
begin
   // ... (реализация функции, аналогичная представленной в оригинальном запросе)
end;

Использование класса TRegistry из Delphi с указанием учётных данных для подключения к системному реестру удалённого компьютера:

uses
   Registry;

procedure AccessRemoteRegistry2(const lpMachineName, lpszUsername, lpszPassword: PChar);
var
   netResource: TNetResource;
   dwFlags: DWORD;
   dwRetVal: DWORD;
   phToken: THandle;
   Reg: TRegistry;
begin
   // ... (реализация функции, аналогичная представленной в оригинальном запросе, с использованием TRegistry)
end;

Заключение

Для безопасной и гибкой работы с системным реестром удалённого компьютера в Delphi, можно использовать WMI класс StdRegProv или Windows API функции в сочетании с impersonation учётных данных. Это позволяет выполнять операции чтения и записи реестра, используя различные учётные записи, что повышает безопасность и удобство использования.

Создано по материалам из источника по ссылке.

Вопрос связан с необходимостью работы с системным реестром удалённого компьютера в среде разработки Delphi, с использованием различных учётных данных для повышения безопасности и гибкости.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:22:15/0.0038700103759766/0