![]() |
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: ![]()
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? :( |
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.
|
Re: Registry Permissions setzen
Sorry, Tippfehler da oben, meinte natürlich HKEY_LOCAL_MACHINE
Im Quellcode stehts ja richtig... |
Re: Registry Permissions setzen
See
![]() You can specify a security descriptor for a registry key when you call the ![]() ![]() 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 ![]() |
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