AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CreateDirectory vs cacls

Ein Thema von mikelpahl · begonnen am 1. Okt 2009 · letzter Beitrag vom 26. Okt 2009
Antwort Antwort
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

CreateDirectory vs cacls

  Alt 1. Okt 2009, 16:01
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
Michael Pahl
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: CreateDirectory vs cacls

  Alt 1. Okt 2009, 17:12
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ß
  Mit Zitat antworten Zitat
mikelpahl

Registriert seit: 28. Jun 2004
Ort: Karlsruhe
12 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: CreateDirectory vs cacls

  Alt 26. Okt 2009, 14:08
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:
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
Gruss

Michael
Michael Pahl
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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