Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Registry Permissions setzen (https://www.delphipraxis.net/88332-registry-permissions-setzen.html)

cytrinox 14. Mär 2007 08:38


Registry Permissions setzen
 
Hi,

ich hab hier ein klitzekleines Problem... das mich jetzt schon über 3 Tage beschäftigt :evil:

Ich muss auf ein paar Rechnern per Delphi Programm bestimmte Rechte für einen Key in der Registry setzen,
genau genommen unter HKEY_LOCAL_MACHINE\Software\Firma\Produkt\Services . Die Schlüssel sind schon vorhanden, d.h. die kann ich nicht irgendwo anders hinschieben.

Und zwar braucht _jeder_ User auf dem Rechner Lese/Schreib-Rechte auf alle Values in diesem Schlüssel.

Jetzt hab ich google, delphi.* newsgroups etc. durchsucht aber was wirklich brauchbares kommt nicht dabei raus.
Jedoch eine kleine Komponente hab ich gefunden - die auch genau das machen würde was ich brauch - die aber leider irgendwas in der Registry verballert...

Hier die Sache bezüglich dieser Komponente: http://www.elists.org/pipermail/delp...ay/023728.html


Delphi-Quellcode:
procedure AddRegistrySecurity (key : HKEY; const userName : string);
var

  f : TNTRegistryObject;
  acl : TAccessControlList;
begin
  acl := Nil;


  f := TNTRegistryObject.Create(hndkey);
  try

    acl := TAccessControlList.Create;
    f.GetDiscretionaryAccessList(acl);

    acl.AddElement(TAccessControlElement.Create(userName, aeAccessAllowed, OBJECT_INHERIT_ACE or CONTAINER_INHERIT_ACE, FILE_ALL_ACCESS));
    f.SetDiscretionaryAccessList(acl);

  except
  ShowMessage('error2');
  end;
    acl.Free;
    f.Free;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
if RegOpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Firma\Produkt\Services', hndKey) = ERROR_SUCCESS then
  begin
    AddRegistrySecurity(hndKey, 'Jeder');
    RegCloseKey(hndkey);
  end
  else
  begin
    showMessage('not found');
  end;
end;

Für ich das ganze aus gibts keinerlei Fehlermeldungen/Exceptions. Gehe ich allerdings mit regedit zu diesem Schlüssel und schau mir die Zugriffsrechte an, sagt regedit die Zugriffsrechte wären nicht in der richtigen Reihenfolge. Erst wenn regedit die dann wieder sortiert hat stehen die Zugriffsrechte richtig drin und erst DANN kann das Programm, welches auf diese Schlüssel schreibend zugreifen muss auch wirklich zugreifen (für die, die wie ich auf den Gedanken gekommen sind: egal was regedit anzeigt/sagt, vielleicht tuts ja trotzdem)

Dazu muss man noch sagen, dass diese Komponente eine Datei Namens Lmglobal.pas bzw dcu braucht.. die hatte ich hier aber nicht.
Bei google gibts dazu genau 3 Hits von irgend einer französischen Seite von der ich mir diese Datei dann gezogen hab... vielleicht liegt ja da auch irgendwo das Problem.

Ich benutze übrigens Delphi 2006, getestet hab das alles bisher nur unter WinXP mit SP2 in einer VMware, allerdings soll das von Windows 2000 bis Vista laufen - Würgarounds speziell für XP oder so bringen mir da nix.


Bitt Bitte Bitte mit Zucker obendrauf - hat irgendwer dafür ne Lösung? :(

Remko 14. Mär 2007 09:14

Re: Registry Permissions setzen
 
CURRENT_MACHINE doesn't exist, it's either HKEY_CURRENT_USER (user has full permissions here) OR HKEY_LOCAL_MACHINE (user has only read permissions here). Per user settings are written to HKEY_CURRENT_USER, global program settings are storedin HKEY_LOCAL_MACHINE normally.

cytrinox 14. Mär 2007 09:29

Re: Registry Permissions setzen
 
Sorry, Tippfehler da oben, meinte natürlich HKEY_LOCAL_MACHINE

Im Quellcode stehts ja richtig...

Remko 14. Mär 2007 10:33

Re: Registry Permissions setzen
 
See Registry Key Security and Access Rights

You can specify a security descriptor for a registry key when you call the MSDN-Library durchsuchenRegCreateKeyEx or MSDN-Library durchsuchenRegSetKeySecurity function. If you specify NULL, the key gets a default security descriptor. The ACLs in a default security descriptor for a key are inherited from its direct parent key.

To get the security descriptor of a registry key, call the GetNamedSecurityInfo or GetSecurityInfo function.

Delphi translation of RegSetSecurity can be found in the unit JwaWinReg.pas from the Jedi Api Lib


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz