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