Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wer hat welche Berechtigungen in einem Verzeichnis (https://www.delphipraxis.net/17094-wer-hat-welche-berechtigungen-einem-verzeichnis.html)

Sharky 25. Sep 2005 11:36

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Hai Nico,

eine Frage habe ich noch ;-)

Ich habe in deiner Funktion des Result-Type auf Integer geändert und im Code dann geschrieben:
Delphi-Quellcode:
begin
  Result := -1;
.
.
  if AccessCheck(SecurityDescriptor, ClientToken, AccessMask,
     GenericFileMapping, PrivilegeSet, PrivilegeSetLength, GrantedAccess,
     AccessStatus) then
  begin
    // Result := AccessStatus;
    Result := GetLastError
  end;
.
.
Dadurch kann ich etwas "leichter" die Fehler auflösen:
Delphi-Quellcode:
procedure TForm1.btn_Button1Click(Sender: TObject);
var
  pfad: string;
begin
  pfad := edt_Edit1.Text;
  case CheckAccessToFile(GENERIC_WRITE, pfad) of
    -1:
    begin
      ShowMessage('Fehler beim Ausführen')
    end;
    NO_ERROR:
    begin
      ShowMessage('Alles Okay')
    end;
    ERROR_ACCESS_DENIED:
    begin
      ShowMessage('Zugriff verweigert')
    end;
    ERROR_LOGON_FAILURE:
    begin
      ShowMessage('Fehler bei der Anmeldung')
    end;
  end;
end;
Ist das Okay so oder ist da noch eine Falle in meinem Code?

NicoDE 25. Sep 2005 11:46

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Jupp, der Benutzer könnte das Verzeichnis zwar auswähen aber nicht die Sicherheitsbeschreibungen lesen können (wenn ich noch länger darüber nachdenke fällt mir bestimmt noch mehr ein *g*).
Ich würde es so lassen (Boolean).
Was spricht gegen:
Delphi-Quellcode:
if not CheckAccessToFile(...) then
  case GetLastError of
    ERROR_TOO_STUPID,
    ERROR_GO_WINDOWS,
    ERROR_DROP_DEAD:
  //...
  end;
ps: wo ist dein else ?-)
pps: dein Code kann ohnehin nicht sicher funktionieren (zumindest nicht so wie du es erwartest), da im Erfolgsfalle 'LastError' nicht gesetzt wird...

Sharky 25. Sep 2005 11:58

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Zitat:

Zitat von NicoDE
...
Ich würde es so lassen (Boolean).
Was spricht gegen:

Jup, hast recht.
Zitat:

ps: wo ist dein else
Else war ausverkauft ;-)
Zitat:

.. da im Erfolgsfalle 'LastError' nicht gesetzt wird...
Ups, da bei meinen Testläufen LastError im Erfolgsfall immer 0 war hatt ich mich darauf verlassen.

Aber wie schon gesagt: Ich mache so wie von Dir vorgeschlagen.

Brainshock 7. Nov 2005 13:32

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Hi,

nochmal zum Test von Netzlaufwerken. Ich habe eine Freigabe unter XP (Zugriff: \\rechner\freigabe\ Berechtigungen: Jeder->Lesen) gemacht und die mit CheckAccessToFile() und FILE_GENERIC_WRITE getestet. Jetzt gibt mir die Funktion aber True zurück, wie kann das sein? :?

Gruß

NicoDE 7. Nov 2005 14:32

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Zitat:

Zitat von Brainshock
Ich habe eine Freigabe unter XP (Zugriff: \\rechner\freigabe\ Berechtigungen: Jeder->Lesen) gemacht und die mit CheckAccessToFile() und FILE_GENERIC_WRITE getestet. Jetzt gibt mir die Funktion aber True zurück, wie kann das sein?

Testest Du die Freigabe auf dem selben Rechner? Welche Parameter werden übergeben?

Brainshock 7. Nov 2005 15:54

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
1. Freigabe ist auf einem Nachbarrechner (\\eg01\testfreigabe) mit Windows XP.
2. Der Aufruf ist wie gehabt:

Delphi-Quellcode:
 
ShowMessage(BoolToStr(CheckAccessToFile(FILE_GENERIC_WRITE, '\\eg01\testfreigabe'), True) + ': ' + SysErrorMessage(GetLastError));

Brainshock 8. Nov 2005 07:53

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Wenn ich die Funktion mit einer Windows 2000 Freigabe teste (Berechtigung: Nur lesen) fliegt er schon bei GetFileSecurityW() mit "Zugriff verweigert" raus, was wahrscheinlich auch richtig so ist.

Nur warum liefert mir Windows XP falsche Werte ?

NicoDE 8. Nov 2005 08:17

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Wie ist der Rückgabewert wenn Du GENERIC_WRITE verwendest?
(gibt es sonst irgendwelchen Besonderheiten? Domäne vs Arbeitsgruppe, admintrativer Account, usw)

Luckie 8. Nov 2005 10:44

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
Was für ein XP? Home oder Professinal?

Brainshock 8. Nov 2005 11:56

Re: Wer hat welche Berechtigungen in einem Verzeichnis
 
@NicoDE:

Zitat:

Wie ist der Rückgabewert wenn Du GENERIC_WRITE verwendest?
Die Rückgabe ist "True: Der Vorgang wurde erfolgreich beendet".
Werte ich jetzt noch die Rückgabe GrantedAccess von AccessCheck() in CheckAccessToFile() aus, bekomme ich für GENERIC_WRITE mein False. Das sollte es doch sein oder ? :gruebel:

Zitat:

(gibt es sonst irgendwelchen Besonderheiten? Domäne vs Arbeitsgruppe, admintrativer Account, usw)
- Arbeitsgruppe
- Admin-Account (Administrator)

@Luckie
Zitat:

Was für ein XP? Home oder Professinal?
Ich benutze Windows XP Pro.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz