델마당에 자료가 있었는데.. 그래도 하니까.... 잘 되지 않는것 같습니다.
NTFS에는 FAT32와 달리 폴더에 등록정보에 보안이라는 탭이 하나 더 있지요. 폴더를 사용할수 있는 계정을 설정하는 겁니다..
그걸 델파이로 구현 할수 있는 물어보고 싶군요..
제가 어디서 소스를 구한것 같은데.. 잘 이해가 가지 않아서 같이 올립니다.
소스 중간에
BuildExplicitAccessWithName(@EA[0], PChar(TrusteeName), AccessPermissions, AccessMode, Inheritance);
위와 같은 문장이 나오는데.. inheritance 에서 걸려요.. 왜 걸리는 알수가 없군요.. 그래서 숫자 0을 넣어서 하려고 햇는 함수에 파라미터를 어떻게 대입해야 할지 잘 모르겠습니다...
아시는 분 좀 알려주세요..
참고로 밑에 함수를 돌리려면 델파이 예제 소스 중에 AclAP.pas 를 포함하는 소스가 있습니다.. AclAP를 uses절에 추가해 주셔야 합니다.
function SetNTFSPermissionsOnFolder(FolderName, TrusteeName: string; AccessPermissions: Cardinal; AccessMode: ACCESS_MODE): integer;
var
pOldDACL, pNewDACL: PACL;
pSD: Pointer;
EA: array[0..1] of EXPLICIT_ACCESS_A;
rCode: integer;
cCountOfExplicitEntries: Cardinal;
begin
// get a pointer to the existing DACL
rCode := GetNamedSecurityInfo(PChar(FolderName), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, @pOldDACL, nil, pSD);
if rCode <> 0 then
begin
result := rCode;
end else
begin
// initialize an EXPLICIT_ACCESS structure to allow access
BuildExplicitAccessWithName(@EA[0], PChar(TrusteeName), AccessPermissions, AccessMode, Inheritance);
// create a new ACL by merging the EXPLICIT_ACCESS structure with the existing DACL
cCountOfExplicitEntries := 1;
rCode := SetEntriesInAcl(cCountOfExplicitEntries, @EA[0], pOldDACL, pNewDACL);
if (rCode <> 0) then
begin
result := rCode;
end else
begin
// attach the new ACL as the object's DACL
rCode := SetNamedSecurityInfo(PChar(FolderName), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pNewDACL, nil);
result := rCode;
end;
end;
if (pSD <> nil) then LocalFree(Cardinal(pSD));
if (pNewDACL <> nil) then LocalFree(Cardinal(pNewDACL));
end;
아마 되겠죠..
지원하는 API 함수가 있다면 델파이에서 못쓸 이유가 없습니다.
그런데, 어째서 그런 기능이 필요한지 모르겠군요..
다른 사람의 컴퓨터에 몰래 들어가서, 특정 폴더의 사용권한을 독차지 할 수도 있습니다. 아마 어드민 권한도 제거할 수 있을 겁니다..
왜 그런 기능을 찾는지 모르겠군요..
즐푸하세여..
타락천사..