Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с ACL!!!!!!!!!! Никак не удается получить список АСЕ [D6, NT4, Win2k, WinXP]


TPig ©   (2002-09-24 16:01:00) 

Пытаюсь сделать инструментарий для разрешения/запрешения/изменения доступа к файлам, папкам, дискам, смотрю МСДН по вопросам безопаности в NT. Все работает кроме получения АСЕ, вот код подскажите где может быть ошибка?

function GetObjectPermissions(szObjectName: LPTSTR): Boolean;
var
ObjType: SE_OBJECT_TYPE;
pOwnerSID: PPSID;
pGroupSID: PPSID;
pDACL: PACL;
pSACL: PACL;
pSID: PSECURITY_DESCRIPTOR;
lpAceHeader: PACE_HEADER;
//pAce: ^PACE_HEADER;
pAce: PACL;
i: Integer;
X: DWORD; //as ERRORCODE
begin
//Надо бы получить идентификатор системы те какая файловая система FAT32, NTFS
//Пытаемся читать свойства объекта
//Конкретно файла или каталога
X:=GetNamedSecurityInfo(szObjectName,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
pOwnerSID,
nil,
@pDACL,
nil,
pSID);
if (X=NERR_Success) and (pDACL<>nil) then begin
i:=0;
//Для каждой записи получаем структуру
while (GetAce(pDACL,i,pAce)) do begin
ShowMessage(intToStr(x));
i:=pDACL.AceCount;
ShowMessage(intToStr(i));
inc(i);
end;
X:=GetLastError;
ShowMessage("Errorcode: " + intToStr(x));
end;
end;


TPig   (2002-09-25 11:03:00) [1]

Лана пасиба за сочувствие =) и участие вопрос закрыт, тк разобрался сам!


Набережных С.   (2002-09-25 09:02:00) [2]

Черт, у меня вчера тоже был жар. Конечно, нужно так:
pAce: ^PACE_HEADER;
Что-же никто не поправил-то? Явная же глупость...


Набережных С.   (2002-09-24 20:33:00) [3]

У тебя, случаем, жара нет?:)) Попробуй так:

type
TACLSizeInfo = record
AceCount: DWORD;
AclBytesInUse: DWORD;
AclBytesFree: DWORD;
end;

function GetObjectPermissions(szObjectName: LPTSTR): Boolean;
var
ObjType: SE_OBJECT_TYPE;
pOwnerSID: PSID;
pGroupSID: PSID;
pDACL: PACL;
pSACL: PACL;
pSID: PSECURITY_DESCRIPTOR;
// lpAceHeader: PACE_HEADER;
//pAce: ^PACE_HEADER;
pAce: PACL;
i: DWORD;
X: DWORD; //as ERRORCODE

n:integer;
SizeInfo:TACLSizeInfo;
begin
//Надо бы получить идентификатор системы те какая файловая система FAT32, NTFS
//Пытаемся читать свойства объекта
//Конкретно файла или каталога
X:=GetNamedSecurityInfo(szObjectName,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
@pOwnerSID,
nil,
@pDACL,
nil,
pSID);
if X <> ERROR_Success then
begin
SetLastError(X);
RaiseLastWin32Error;
end;
try
if pDACL = nil then Exit;
i:=0;
//Для каждой записи получаем структуру
if not GetAclInformation(pDACL^,@SizeInfo,SizeOf(SizeInfo),AclSizeInformation)then RaiseLastWin32Error;
ShowMessage(intToStr(SizeInfo.AceCount));
while i < SizeInfo.AceCount do
begin
(GetAce(pDACL^,i,Pointer(pAce)));
// Работай с АСЕ здесь
inc(i);
end;
finally
LocalFree(Cardinal(pSID));
end;
end;

P.S. Может, пока не стоит?


Наверх

Титульная страница Поиск, карта сайта Написать письмо