[Lazarus] Remote Registry...

Sven Barth pascaldragon at googlemail.com
Fri Aug 23 21:30:28 CEST 2013


On 23.08.2013 19:51, waldo kitty wrote:
> On 8/23/2013 13:25, Sven Barth wrote:
>> On 23.08.2013 15:46, waldo kitty wrote:
>>> On 8/22/2013 23:08, Flávio Etrusco wrote:
>>>> I guess he means this:
>>>> http://msdn.microsoft.com/en-us/library/windows/desktop/ms724840%28v=vs.85%29.aspx
>>>>
>>>
>>> interesting... you'd think that people would mention these things and
>>> give links as above if it is what they are actually after... thanks for
>>> the pointer and to michael for the additional information... and
>>> definitely thanks to sven for the implementation...
>>>
>>> now we wait to see if the OP can update to the latest FPC SVN, as
>>> indicated by sven, to gain access to it...
>>
>> He can also use the functionality in 2.6.x, 2.7.1 "just" wraps the
>> necessary
>> house keeping.
>
> right but it has to be specifically added, correct? it has not (yet)
> been added other than in FPC trunk? i did see it come in here when i svn
> upped my FPC and lazarus a few hours ago ;)

Code in trunk:

=== code begin ===

sl := Nil;
reg := TRegistry.Create(KEY_READ);
try
   reg.RootKey := HKEY_USERS;
   if not reg.ConnectRegistry('\\SomeMachine') then
     raise Exception.Create('Could not connect');
   reg.OpenKeyReadOnly('\');

   sl := TStringList.Create;
   reg.GetKeyNames(sl);
   for s in sl do
     Writeln(s);
finally
   reg.Free;
   sl.Free;
end;

=== code end ===

Equivalent code in 2.6.2 and earlier:

=== code begin ===

sl := Nil;
reg := TRegistry.Create(KEY_READ);
try
   if RegConnectRegistry('\\SomeMachine', HKEY_USERS, key) <> 
ERROR_SUCCESS then
     raise Exception.Create('Could not connect');
   reg.RootKey := key;
   reg.OpenKeyReadOnly('\Software');

   sl := TStringList.Create;
   reg.GetKeyNames(sl);
   for s in sl do
     Writeln(s);
finally
   reg.Free;
   sl.Free;
end;

=== code end ===

>> For this he can open the remote registry with RegConnectRegistry
>> and pass resulting HKEY handle to the Rootkey property of a TRegistry
>> instance.
>> Afterwards he can work normally with TRegistry. At the end he needs to
>> close the
>> Rootkey using RegCloseKey. This is basically what TRegistry now does
>> in 2.7.1 as
>> well.
>
> can i assume that RegCloseKey sends the possibly modified key back to
> the remote? i'm just asking to learn O:)
>

You are only opening either HKEY_USERS, HKEY_LOCAL_MACHINE or 
HKEY_PERFORMANCE_DATA using 
RegConnectRegistry/TRegistry.ConnectRegistry. All other subkeys are 
opened using the normal registry API (be it directly or through 
TRegistry) and Windows handles the rest. When exactly it sends the 
modifications to the remote machine is up to Windows.

Regards,
Sven




More information about the Lazarus mailing list