Форум: "WinAPI";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
ВнизПомогите с ACL!!!!!!!!!! Никак не удается получить список АСЕ Найти похожие ветки
← →
TPig (2002-09-24 16:01) [0]Пытаюсь сделать инструментарий для разрешения/запрешения/изменения доступа к файлам, папкам, дискам, смотрю МСДН по вопросам безопаности в 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;
← →
Набережных С. (2002-09-24 20:33) [1]У тебя, случаем, жара нет?:)) Попробуй так:
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. Может, пока не стоит?
← →
Набережных С. (2002-09-25 09:02) [2]Черт, у меня вчера тоже был жар. Конечно, нужно так:
pAce: ^PACE_HEADER;
Что-же никто не поправил-то? Явная же глупость...
← →
TPig (2002-09-25 11:03) [3]Лана пасиба за сочувствие =) и участие вопрос закрыт, тк разобрался сам!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c