在写一个清理IE浏览痕迹的小程序,写到清理IE自动完成这里卡住了!
因为IE自动完成表单和密码在:HKEY_CURRENT_USER\Software\Microsoft\Protected Storage System Provider下,可是用TRegistry操作却无法删除,也无法访问!后来在网上查是权限问题,请高手指点一下,如何在代码中实现权限修改,让自己的程序能删除该键下的项和值?

解决方案 »

  1.   

    procedure SetPrivilege;
    var
       OldTokenPrivileges, TokenPrivileges: TTokenPrivileges;
       ReturnLength: dword;
       hToken: THandle;
       Luid: int64;
    begin
       OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
       LookupPrivilegeValue(nil, 'SeDebugPrivilege', Luid);
       TokenPrivileges.Privileges[0].luid := Luid;
       TokenPrivileges.PrivilegeCount := 1;
       TokenPrivileges.Privileges[0].Attributes := 0;
       AdjustTokenPrivileges(hToken, False, TokenPrivileges, SizeOf(TTokenPrivileges), OldTokenPrivileges, ReturnLength);
       OldTokenPrivileges.Privileges[0].luid := Luid;
       OldTokenPrivileges.PrivilegeCount := 1;
       OldTokenPrivileges.Privileges[0].Attributes := TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength);
    end;
      

  2.   

    Debug权限解决不了这个问题!!
      

  3.   

    我记得有个RegGetKeySecurity和RegSetKeySecurity的API,相关用法看看MSDN吧。我也只是记得,印象有点模糊了
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/z1132hhy(VS.80).aspx
    http://msdn.microsoft.com/zh-cn/library/ewb9wcf9(VS.80).aspx
    那个reggetkey的只有鸟文的,我反正是看不懂……
      

  5.   

    权限的问题非常简单,你调用一个DOS命令即可改掉,连TRegistry都不需要,可以直接修改注册表键值,还可以改权限。
      

  6.   

    请mwy654321高手指点迷津,本人再加分感谢您!
    跪拜~
      

  7.   

    难道是传说中的regini?
    http://support.microsoft.com/kb/237607/zh-cn
    这个吗?
      

  8.   

    如果是VISTA 更不好解决 
      

  9.   

    vista其实好解决,只要rundll32带几个参数就能实现,可是在xp中却没有这样的参数,所以很难解决,用dos可以,所过程很复杂(可能是因为我没有解决子键继承权限的问题),需要一个键一个键,一个项一个项的来修改权限,烦不胜烦!
    还请高手指点一下,如何用delphi实现!
      

  10.   

    用regini可以,当然也有专门的API来实现,只不过麻烦一些。
      

  11.   

    问题解决了,感谢mwy654321、gyk120、READYOUX等前辈们回复我的贴子!
    再次感谢!