Hi, All!
Блин, досадная трабла, не знаю как побороться.
Уже что только не переделал.
Итак, вот кусок кода (Delphi):
Var
PSec: PSecurityDescriptor;
Count: DWORD;
pAccessList: PEXPLICIT_ACCESS_A;
J: Integer;
aDACL: PACL;
dDefaulted, dPresent: BOOL;
Begin
PSec := GetServiceSD(DACL_SECURITY_INFORMATION);
Try
//ConvertSDtoAbsolute(pSec);
Win32Check(GetSecurityDescriptorDacl(pSec, dPresent, aDACL, dDefaulted));
If Not dPresent Then Exit;
pAccessList := Nil; Count := 0;
J := GetExplicitEntriesFromAcl(aDacl^, Count, pAccessList);
If J <> ERROR_SUCCESS Then // <=== Здесь происходит трабла. Возвращаемый код
// равен ошибке 87, что означает "Параметр задан неверно"
Raise Exception.Create('Win32Error: ' + SysErrorMessage(J));
---
Что здравого можно придумать по этому поводу? Я уже изматюгался весь. Мелкософт говорит, что GetExplicitEntriesFromAcl сам создаст нужный буфер, который надо потом LocalFree.
Причём неважно, из кагого SD DACL пихаешь - абсолютного или Self-relative, всё равно ЕГГОГ 87 ;-))
Заранее спасибо за советы, добрый All!
|