网上有很多关于设置注册表访问权限的例子要么是VB 要么是C的 Delphi 有没有关于设置注册表项权限的API呢,
比方说我要给下面这个注册的项加上权限不让 SYSTEM 或者 Administrators用户组修改里面的东西,也就是只有只读权限[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]
各位牛人,请发一下代码。或者把 http://topic.csdn.net/u/20091014/11/d6cab176-f946-4178-a799-af76d439a236.html
转成Delphi 的都可以,谢谢了!

解决方案 »

  1.   

    API是Windows提供的,理论上VB或C能调用的,Delphi也能调用
      

  2.   

    http://www.xpfox.net/article.asp?id=437
    需要jedi security库文件
      

  3.   

    钩几个API应该就可以了 ,然后再判断用户 
      

  4.   

    sanguomi 是否可以给个实例,SETACL这个东东就可以
      

  5.   

    参考一下,我给你的代码~  不仅仅适应于设置注册表的权限,还适应于文件和文件夹的权限。这是WINDOWS的API,可以说,是通用的。你参照以下代码,再阅读下里面用到的几个API函数;
    ==================================================================================// uses AclAPI 
    procedure SetUserAcl(const FileName: string; const ObjectType: TSeObjectType);
    var
      dRet: DWORD;
      eia: EXPLICIT_ACCESS;
      OldAcl, NewAcl: PACL;
      pSID: PSECURITY_DESCRIPTOR;
    begin
      try
        if SetEntriesInAcl(0, nil, nil, OldAcl) <> ERROR_SUCCESS then Exit;
        if SetEntriesInAcl(0, nil, nil, NewAcl) <> ERROR_SUCCESS then Exit;
        dRet :=GetNamedSecurityInfo(PChar(FileName), SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, nil, nil, OldAcl, nil, PSID);
        if dRet <> ERROR_SUCCESS then exit;
        ZeroMemory(@eia, sizeof(EXPLICIT_ACCESS));
        BuildExplicitAccessWithName(@eia, 'Administrators', KEY_ALL_ACCESS, DENY_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
        dRet := SetEntriesInAcl(1, @eia, nil, Newacl);
        if dRet <> ERROR_SUCCESS then exit;
        dRet := SetNamedSecurityInfo(PChar(FileName), SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION, nil, nil, Newacl, nil);
        if dRet <> ERROR_SUCCESS then exit;
      finally
        if NewAcl <> nil then LocalFree(HLOCAL(NewAcl));
        if OldAcl <> nil then LocalFree(HLOCAL(OldAcl));
        if pSID <> nil then LocalFree(HLOCAL(pSID));
      end;
    end;
    ==============================================================================