با سلام
فكر كنم سوال گويا باشد ولي بيشتر توضيح مي دم
من در هنگام استفاده از تابع SetEntriesInAcl كد خطا 87 رو مي گيرم
كد خود و ساير كد هاي مشابه رو بررسي كردم
لازم به ذكر است كه اگر كد هاي ذكر شده را در دلفي 2010 استفاده كنم خطا نمي دهد
ولي در دلفي 7 مي دهد
pDacl := nil;
pSD := nil;
pNewDacl := nil;
dwRes := GetSecurityInfo(hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pDacl, nil, pSD);
if ERROR_SUCCESS <> dwRes then
begin
if Assigned(pSD) then
LocalFree(Hlocal(pSD^));
if Assigned(pNewDacl) then
LocalFree(HLocal(pNewDacl));
end;
User:='CURRENT_USER';
ZeroMemory(@ea, sizeof(EXPLICIT_ACCESS));
ea.grfAccessPermissions :=SECTION_MAP_WRITE;
ea.grfAccessMode := GRANT_ACCESS;
ea.grfInheritance := NO_INHERITANCE;
ea.Trustee.TrusteeForm := TRUSTEE_IS_NAME;
ea.Trustee.TrusteeType := TRUSTEE_IS_USER;
ea.Trustee.ptstrName := PAnsiChar(user[1]);
dwRes := SetEntriesInAcl(1, @ea, pDacl, pNewDacl);
if ERROR_SUCCESS <> dwRes then
begin
if Assigned(pSD) then
LocalFree(Hlocal(pSD^));
if Assigned(pNewDacl) then
LocalFree(HLocal(pNewDacl));
raise Exception.Create(Format('Error ? %u', [dwRes]))
end;
dwRes := SetSecurityInfo
(hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pNewDacl, nil);
if ERROR_SUCCESS <> dwRes then
begin
if Assigned(pSD) then
LocalFree(Hlocal(pSD^));
if Assigned(pNewDacl) then
LocalFree(HLocal(pNewDacl));
end;