ちょうど今、ソフトウェアパッケージのインストール中に起動される小さなアプリケーションでローカリゼーションのバグを修正することを検討しています。小さなアプリケーションは、基本的に、アプリケーションデータ内の独自のフォルダに対するパーミッションを総当たり攻撃して、全員をフルアクセスに設定します。
問題は、全員がローカライズされていない場合に発生します。私は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;
代わりにどの関数を使用することを検討する必要がありますか?