Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Gelöst] BuildExplicitAccessWithName - LIMIT_CONTROL: Wie rückgängig machen ? (https://www.delphipraxis.net/184508-%5Bgeloest%5D-buildexplicitaccesswithname-limit_control-wie-rueckgaengig-machen.html)

hathor 31. Mär 2015 22:04


[Gelöst] BuildExplicitAccessWithName - LIMIT_CONTROL: Wie rückgängig machen ?
 
Mit der 1. Procedure wird der Zugriff auf eine USB-HDD gesperrt.
Mit der 2. Procedure soll der Zugriff wieder möglich werden.
Geht aber nicht...wo ist der Fehler?

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject); //LIMIT_CONTROL
const
  FULL_CONTROL     = $001F01FF;
  READ_EXEC_CONTROL = $001200A9;
  LIMIT_CONTROL    = $001000A9;
  MODIFY_CONTROL   = $001301BF;
var
  path: string;
  pNewDACL : PACL;
  EA : array [0..5] of EXPLICIT_ACCESS;
begin
  path:='G:\';
  ZeroMemory(@EA,6*Sizeof(EXPLICIT_ACCESS));
  BuildExplicitAccessWithName(@EA[0], PChar('USER'), LIMIT_CONTROL , SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  BuildExplicitAccessWithName(@EA[2], PChar('IUSR_<COMPUTERNAME>'), MODIFY_CONTROL , SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); // access for other user
  BuildExplicitAccessWithName(@EA[4], PChar('SYSTEM'),LIMIT_CONTROL , SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  SetEntriesInAcl(1, @EA[0], nil, pNewDACL);
  SetEntriesInAcl(1, @EA[2], pNewDACL, pNewDACL);
  SetEntriesInAcl(1, @EA[4], pNewDACL, pNewDACL);
  SetNamedSecurityInfo(PChar(path), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NIL, NIL, pNewDACL, NIL);
end;

procedure TForm1.Button6Click(Sender: TObject); //FULL_CONTROL
const
  FULL_CONTROL     = $001F01FF;
  READ_EXEC_CONTROL = $001200A9;
  LIMIT_CONTROL    = $001000A9;
  MODIFY_CONTROL   = $001301BF;
var
  path: string;
  pNewDACL : PACL;
  EA : array [0..5] of EXPLICIT_ACCESS;
begin
  path:='G:\';
  ZeroMemory(@EA,6*Sizeof(EXPLICIT_ACCESS));
  BuildExplicitAccessWithName(@EA[0], PChar('USER'), FULL_CONTROL,SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  BuildExplicitAccessWithName(@EA[2], PChar('IUSR_<COMPUTERNAME>'), MODIFY_CONTROL , SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); // access for other user
  BuildExplicitAccessWithName(@EA[4], PChar('SYSTEM'),FULL_CONTROL,SET_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

  SetEntriesInAcl(1, @EA[0], nil, pNewDACL);
  SetEntriesInAcl(1, @EA[2], pNewDACL, pNewDACL);
  SetEntriesInAcl(1, @EA[4], pNewDACL, pNewDACL);
  SetNamedSecurityInfo(PChar(path), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NIL, NIL, pNewDACL, NIL);
end;

himitsu 31. Mär 2015 22:22

AW: BuildExplicitAccessWithName - LIMIT_CONTROL: Wie rückgängig machen
 
Einige der APIs haben ein Result, daß einem sagt, was sie nicht mochten. :stupid:

PS: Der Compiler meckert nicht zufällig über eine der Variablen? :wink:
Zitat:

Zitat von NewAcl [out]
A pointer to a variable that receives a pointer to the new ACL. If the function succeeds, you must call the LocalFree function to free the returned buffer.


hathor 31. Mär 2015 22:32

AW: BuildExplicitAccessWithName - LIMIT_CONTROL: Wie rückgängig machen
 
Das sind die Rückgabe-Werte der letzten 4 Zeilen bei BEIDEN Prozeduren:
1332
1332
0
0

-------------------------
Error 1332 is ERROR_NONE_MAPPED
"No mapping between account names and security IDs was done." (winerror.h)

Die 1. Proc funktioniert, das heisst: USB-HDD ist "tot".
In der Datenträgerverwaltung wird die USB-HDD normal angezeigt.

hathor 1. Apr 2015 16:45

AW: BuildExplicitAccessWithName - LIMIT_CONTROL: Wie rückgängig machen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe nun einen Code, mit dem der Zugriff wieder möglich ist.

Wer selbst experimentieren möchte, sollte UNBEDINGT eine leere HDD oder eine mit nutzlosen Daten nehmen!

Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject); //FULL_CONTROL for Everyone
var
  TmpString: String;
  pSD : Pointer;
  NewDacl, OldDacl: PACl;
  EA: array [0..5] of EXPLICIT_ACCESS;
  ret : Cardinal;
begin
  TmpString := 'G:\';
  GetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT,
                DACL_SECURITY_INFORMATION, nil, nil, @OldDacl, nil, pSD);
  BuildExplicitAccessWithName(@EA, PChar('Everyone'), GENERIC_ALL,
                GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  SetEntriesInAcl(1, @EA, OldDacl, NewDacl);
  ret:= SetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT,
                DACL_SECURITY_INFORMATION, nil, nil, NewDacl, nil);
  if ret= ERROR_SUCCESS then
  ShowMessage('Bei diesem Objekt wurden keine Objekttypen zugeordnet.'+#13#10+
            'Achtung: Dies ist ein mögliches Sicherheitsrisiko, weil jeder,'+#13#10+
            'der Zugriff auf dieses Objekt hat, dieses besitzen kann.'+#13#10+
            'Der Besitzer dieses Objekts sollte so bald wie möglich'+#13#10+
            'Berechtigungen zuordnen.');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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