从我的Win32应用程序中,我正在阅读和编写HKEY_CURRENT_USER\Software\Embarcadero\BDS\9.0\History Lists\hlRunParameters
,这是Delphi XE2 IDE写入运行时参数的地方。
这是写代码:
procedure TFrmCleanIDEParams.BtnWriteClick(Sender: TObject);
var
lReg : TRegistry;
lValue,
lKey : String;
i,
lNrToWrite,
lNrRegVals: Integer;
begin
.....
lKey := Trim(EdtRegKey.Text); // '\Software\Embarcadero\BDS\9.0\History Lists\hlRunParameters'
if lKey = '' then Exit;
if lKey[1] = '\' then lKey := Copy(lKey,2);
lReg := TRegistry.Create(KEY_READ or KEY_WRITE);
lReg.RootKey := HKEY_CURRENT_USER;
if not lReg.OpenKey(lKey,false) then
begin
MessageDlg('Key not found', mtError, mbOKCancel, 0);
Exit;
end;
if not lReg.ValueExists('Count') then
begin
MessageDlg('Value ''Count'' not found', mtError, mbOKCancel, 0);
Exit;
end;
lNrRegVals := lReg.ReadInteger('Count');
lNrToWrite := CLBParams.Items.Count; // TCheckListBox
lReg.WriteInteger('Count',lNrToWrite);
for i := 0 to lNrToWrite-1 do
begin
lValue := 'Item' + IntToStr(i);
lReg.WriteString(lValue,CLBParams.Items[i]);
end;
// Remove the rest:
for i := lNrToWrite to lNrRegVals-1 do
lReg.DeleteValue('Item' + IntToStr(i));
end;
的问题:
在RegEdit中,我看到关键内容按预期更改,但Delphi IDE没有获取这些更改
有些时候(重启?)以后HKEY_CURRENT_USER键有旧值
我认为有几件事可能是原因,但我不确定要攻击哪些:
我不应该使用HKEY_CURRENT_USER,而应该使用HKEY_USERS。如果是这种情况,我该如何获得我需要使用的正确S-1-5-etc
?
这是一个Windows 7 64位问题,虽然我的程序和Delphi IDE都是32位。 (如何)然后我需要更改TRegistry.Create
?
我阅读了这篇Delphi: Read 64-bits registry key from 32-bits process帖子,但仍然没有告诉我是否/何时使用不同的“访问密钥”
无论我的应用是32/64位,我是否总是需要使用this KEY_WOW64_64KEY
value?我看到HKEY_CURRENT_USER \ Software是shared, not redirected。 (如何)我需要区别对待这些吗?
BTW UAC已关闭,如果我的代码也可以与UAC一起工作,那就太好了。
答案 0 :(得分:1)
HKEY_CURRENT_USER
。HKEY_CURRENT_USER
对于标准用户令牌是可写的。唯一有意义的解释是另一个进程正在修改值。我的猜测是Delphi IDE就是那个过程。