CreateDirectory vs cacls
Hallo,
da ich einen Programm geschreiben habe um unsere User im ActiveDirecory anzulegen, würde ich gerne auch die HomeDirectories der User aus Delphi heraus anlegen. Bisher haben wir unsere Verzeichnisse mit einer Batchdatei angelegt: md %1 echo J | cacls %1 /C /E /G Administratoren:F echo J | cacls %1 /C /E /G dh-karlsruhe\%2:F echo J | cacls %1 /C /E /R Jeder Ich wollte dies jetzt mit CreateDirectory aus Delphi heraus tun, habe aber keinen Plan wie man einen lpSecurityDescriptor für die dort benötigten SECURITY_ATTRIBUTES aufbaut. Da die Hilfe im Delphi von Version zu Version schlechter wird, habe ich dort auch keine Beispiele gefunden. Habe auch schon mehrere Stunden im DP gesucht. Hat da einer ein Beispiel für mich. Gruss Michael |
Re: CreateDirectory vs cacls
Hi,
schau dir mal dies an:JEDI API LIB & Windows Security Code Library (JWSCL) Ist ein Spezialgebiet von Christian. Dort sind auch ein paar Beispiele drin, die ein Einstieg ermöglichen. Gruß |
Re: CreateDirectory vs cacls
Hallo "Alter Mann",
vielen Dank für den Hinweis. Seltsam dass ich beim Suchen nicht auf die JWSCL selber gestossen bin. War zwar etwas mühsam sich im großen Umfang der JWSCL das richtige zu suchen. Der Zugriff geht damit super schnell. So sieht jetzt meine Funktion dazu in Delphi aus:
Delphi-Quellcode:
Gruss
Function SetDACL_Dir(DirName, StudName, DomainName : String):boolean;
var UserToken : TJwSecurityToken; FileObject : TJwSecureFileObject; Owner : TJwSecurityId; StudSid : TJwSecurityId; DACL : TJwDAccessControlList; begin result:=true; if not DirectoryExists(DirName) then begin result:=false; ErrorDialog('Verzeichnis "'+DirName+'" nicht gefunden!'); end; if result then begin JwInitWellKnownSIDs; UserToken := TJwSecurityToken.CreateTokenEffective(MAXIMUM_ALLOWED); Owner := UserToken.GetTokenOwner; try StudSid := TJwSecurityId.Create(DomainName,Studname); except result:=false; ErrorDialog('Student "'+StudName+'" im Verzeichnis "'+DomainName+'" nicht gefunden!'); end; if result then begin try FileObject := TJwSecureFileObject.Create(DirName); except result:=false; ErrorDialog('Verzeichnis konnte nicht gefunden werden "'+DirName+'" !'); end; end; if result then begin try if not FileObject.AccessCheck(WRITE_DAC) then //Make me owner if we cant access DACL begin //try to become owner JwEnablePrivilege(SE_TAKE_OWNERSHIP_NAME, pst_Enable); FileObject.Owner := Owner; end; DACL := FileObject.DACL; dacl.Clear; DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce,afContainerInheritAce], GENERIC_ALL, Owner, false)); DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce,afContainerInheritAce], GENERIC_ALL, StudSid, false)); FileObject.SetDACL(DACL); except result:=false; ErrorDialog('Fehler beim Setzen der Berechtigung auf "'+DirName+'" !'); end; end; Owner.Free; UserToken.Free; StudSid.free; FileObject.Free; end; end; // SetDACL Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz