刚才我正在考虑使用在安装软件包期间触发的小型应用程序修复本地化错误。小应用程序本质上是暴力破解应用程序数据中我们自己的文件夹的权限,以将每个人设置为完全访问权限。
问题是每个人都没有被本地化。我知道我需要使用 SID,这对每个人来说都是S-1-1-0
. 我找不到使用 SID 设置权限的 WinAPI 函数。
刚才用到的函数BuildExplicitAccessWithName
和SetNamedSecurityInfo
如下图
function setfullaccess(foldername:string):boolean; //B2415 MDE
var
pDACL: PACL;
pEA: PEXPLICIT_ACCESS_A;
R: DWORD;
begin
result := true;
pEA := AllocMem(SizeOf(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(pEA, 'EVERYONE', GENERIC_ALL{GENERIC_READ},GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT{NO_INHERITANCE});
R := SetEntriesInAcl(1, pEA, nil, pDACL);
if R = ERROR_SUCCESS then
begin
if SetNamedSecurityInfo(pchar(foldername), SE_FILE_OBJECT,DACL_SECURITY_INFORMATION, nil, nil, pDACL, nil) <> ERROR_SUCCESS then result := false;
LocalFree(Cardinal(pDACL));
end
else result := false;//ShowMessage('SetEntriesInAcl failed: ' + SysErrorMessage(R));
end;
我应该考虑使用哪些功能?