Solved

TRegistry.SaveKey

Posted on 2000-04-28
8
1,330 Views
Last Modified: 2008-03-17
Delphi 5, TRegistry.SaveKey
function SaveKey(const Key, FileName: String): Boolean; does not work anyway.
Someone knows the usage to make it work?
Regards
Wandrey
0
Comment
Question by:wandrey
8 Comments
 
LVL 1

Expert Comment

by:msedi
ID: 2758562
Hello,

I don't know what you did before and what functions you have used before. So I begin with the first step:

var
  Reg : TRegistry;

begin
  Reg := TRegistry.Create();
  Reg.RootKey := HKEY_LOCAL_MACHINE; <- Maybe that's what you forgot

Good luck,
Martin

 
0
 

Author Comment

by:wandrey
ID: 2758605
Ok, thats all simple beginning - I have wrote many tools with TRegistry, access local and remote hosts, read, write and change values - all of that was no problem. But the SaveKey does not function at all - not in the manner the online help suggests nor in any other imaginable possibility.
Background: I want to write a hole key with all of its subkeys and values to a diskfile for later campares to avoid the enumaration through the hole keys and values. The prog. must run on NT 4 SP6 in the admin security context (so there are no restrictions).
0
 
LVL 1

Expert Comment

by:msedi
ID: 2758628
Hello,

I've looked in the Borland community

http://community.borland.com/article/0,1410,10348,00.html

looks like there's an error in D5 TRegistry.

Good luck, Martin
0
 

Author Comment

by:wandrey
ID: 2758686
Hello,
thanks for all your efforts, I have search and found these and other articles also. But there seem to be some people out there, who has solve this problem, or might say dont have this problem.(i.e. in here:qid=10128124 is a question around this topic).
regards
Willy
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:wandrey
ID: 2758698
Concrete:
Called from Button1Click()->
>>>>>>>>>>>>>>>>>>>>>>>>
procedure TForm1.scanregpath;
var i:integer;
    sl:tstringlist;
begin
    cu := TRegistry.Create;
    cu.RootKey := HKEY_LOCAL_MACHINE;
  try
    if cu.savekey('\software\McAfee\VirusScan','c:\temp\rkey') then
      showmessage('Written...')
    else showmessage('Fail');
  finally
    cu.Free;
  end;
end;
<<<<<<<<<<<<<<<<<<<<<<<<<<<<
This returns "Fail". The file in C:\TEMP was created but empty.
0
 
LVL 17

Expert Comment

by:inthe
ID: 2758888
Hi,
i just tested this and it seems to work ok ,see how it goes for you :

implementation

{$R *.DFM}
uses registry;

procedure TForm1.Button1Click(Sender: TObject);
var
 reg : tregistry;
begin
 Reg := TRegistry.Create;
 Reg.RootKey:=HKEY_LOCAL_MACHINE;  {OR HKEY_USERS }
  if not fileexists('c:\myreg.reg') then
   try
     if Reg.SaveKey('\Software\Borland\Delphi', 'c:\myreg.reg') then
        ShowMessage( 'Saved' )
      else
        ShowMessage( 'Error Saving' )
        finally
      Reg.Free;
    end
  else showmessage('File already exists');
 end;

Regards Barry
0
 
LVL 3

Accepted Solution

by:
shenqw earned 25 total points
ID: 2758966
//Win98 is ok.
//On NT you must have backup Privileges

procedure TForm1.Button1Click(Sender: TObject);
const
  ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
  SHTDWN_PRIV = 'SeBackupPrivilege';
  PRIV_SIZE   = sizeOf(TTokenPrivileges);
var
  cu:TRegistry;
  TokenPriv, Dummy: TTokenPrivileges;
  Token: THandle;
  Len:DWORD;
begin
    cu := TRegistry.Create;
    cu.RootKey := HKEY_LOCAL_MACHINE;
    DeleteFile('c:\temp\rkey');
    OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token);
    LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid);
    TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    TokenPriv.PrivilegeCount := 1;  // One privilege to set
    AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len);
    try
      if cu.savekey('\Software\NuMega','c:\temp\rkey') then
        showmessage('Written...')
      else showmessage('Fail');
    finally
      cu.Free;
    end;
end;
0
 

Author Comment

by:wandrey
ID: 2768192
Thanks, this was very good!
Regards
Willy
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now