Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hat Benutzer Schreibrechte (lokal/LAN)? (https://www.delphipraxis.net/103918-hat-benutzer-schreibrechte-lokal-lan.html)

Sir Rufo 18. Okt 2010 10:34

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Dezipaitor (Beitrag 1056284)
Und dann wäre da noch die Sache mit >=Vista und SecurityLevel, das im Code auch nicht geprüft wird. Letztendlich muss man die Datei zum Schreiben öffnen, um kurz Gewissheit zu haben.

Wenn du die Auswirkung der UAC meinst, dann kann ich das aber nicht nachvollziehen. (s. Anhang)

Dezipaitor 18. Okt 2010 12:45

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Zitat:

Zitat von p80286 (Beitrag 1056285)
Ich hab den Beispielcode von Matze mal auf unser Netzwerk losgelassen, und er funktioniert so wie er soll.

Mal eben etwas ausprobieren reicht nicht aus, den Code als funktionsfähig zu deklarieren. Ich kenne die Grundlagen zu dem Thema und kann daher die Probleme am Code sehen. Die Fehler durch Tests zu finden ist, wie die Nadel im Heuhaufen. Dass der Code nicht unbedingt im Netzwerk funktionieren muss, findet man schließlich auch nicht so leicht durch Tests heraus. Die Labelsecurity in Vista kommt halt jetzt noch dazu. Die Funktion wird TRUE zurückliefern, wenn ein Objekt eine höheres Integritylabel besitzt als der Nutzer.

Helmi 18. Okt 2010 16:38

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Hallo,

wärs dann nicht einfacher/besser die dreckige Version zu verwenden, indem man versucht eine Datei zu erzeugen, schlägt dies fehl dann weiss man (vermutet man) dass man keine Schreibrechte hat.

shmia 18. Okt 2010 18:19

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Folgender Code prüft, ob eine bestehende Datei beschreibbar ist:
Delphi-Quellcode:
function FileIsWriteable(const filename:string):Boolean;
var
   hnd: THandle;
begin
   hnd := CreateFile(PChar(filename), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   Result := hnd <> INVALID_HANDLE_VALUE;
   if Result then
      CloseHandle(hnd);
end;
Um zu prüfen, ob man in einem Verzeichnis eine neue Datei erzeugen kann,
also ob man Schreibrechte in einem Verzeichnis hat,
muss man einfach versuchen eine Datei zu schreiben.
Man sollte eine Dateiendung verwenden, die sonst nicht benützt wird (.tmp, .$$$).
Wenn man Pech hat, kann man die temporäre Datei erzeugen, aber danach nicht mehr löschen.
Das kommt aber relativ selten vor.

Dezipaitor 18. Okt 2010 23:24

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Also eigentlich sollte man es so machen. CreateFile hat doch noch irgendwo so ein temporary Flag, so dass die Datei gelöscht wird, sobald alle Handles geschlossen sind (bin zu faul zum suchen :-D ). Ich würde dann auch alle Share Attribute rausmachen, so dass kein anderer Prozess zwischendrin die Datei öffnen kann. Soll ja nur getestet werden, ob das geht. Gab es nicht auch noch ein Flag für zufällige Namen? (faul :-D )
Wenn das so gemacht wird, dann gibt es auch kein Problem mit dem Löschen, außer die Verbindung reißt ab. Obwohl selbst dann die Datei vom Server automatisch gelöscht werden sollte.

Zitat:

Zitat von Sir Rufo (Beitrag 1056293)
Zitat:

Zitat von Dezipaitor (Beitrag 1056284)
Und dann wäre da noch die Sache mit >=Vista und SecurityLevel, das im Code auch nicht geprüft wird. Letztendlich muss man die Datei zum Schreiben öffnen, um kurz Gewissheit zu haben.

Wenn du die Auswirkung der UAC meinst, dann kann ich das aber nicht nachvollziehen. (s. Anhang)

Ich kann ehrlich gesagt nichts mit den Bildern anfangen. Such mal nach Integrity Level bzw Label im Inet oder hier. Diese Label kann man nur mit icacls anzeigen. Mit UAC haben die aber nicht wirklich etwas zu tun. Das ist nur ein zusätzliches Konzept zur Zugriffsbestimmung zur DACL.

Bernerbaer 19. Okt 2010 08:47

AW: Hat Benutzer Schreibrechte (lokal/LAN)?
 
Zitat:

Zitat von Helmi (Beitrag 1056369)
Hallo,

wärs dann nicht einfacher/besser die dreckige Version zu verwenden, indem man versucht eine Datei zu erzeugen, schlägt dies fehl dann weiss man (vermutet man) dass man keine Schreibrechte hat.

Für mich ist das nicht "dreckig" sondern die _einzige_ praktikable Lösung. Man ist dann auch nicht auf Vermutungen angewiesen, sondern erhält Vom OS auch einen konkreten Grund weshalb es nicht funktioniert hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Seite 2 von 2     12   

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