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/)
-   -   Windows (Explorer) - Schreibzugriff blockieren (https://www.delphipraxis.net/163404-windows-explorer-schreibzugriff-blockieren.html)

trebor90 28. Sep 2011 01:13


Windows (Explorer) - Schreibzugriff blockieren
 
Guten Tag zusammen,

ich arbeite gerade an einem sehr spartanischen Programm, was die Groesse eines beliebigen Ornders ueberwacht und bei Ueberschreiten der festgelegten Grenze Alarm schlaegt. Das soll aber nicht alles sein.
Natuerlich soll bei Ueberschreiten der oberen Grenze nicht mehr geschrieben werden koennen.
Das heisst also, jeglicher Schreibzugriff muss umgehend blockiert werden.
Hat jemand eine Ahnung, wie ich das anstellen koennte?

Ich habe bereits mit Dateirechten (ACLs) gewerkelt und herumprobiert - nicht zufriedenstellend.
Zwar ist der Schreibuzgriff blockiert, aber nur solange ich den Ordner nicht oeffne, bzw. nicht ein Verzeichnis schon vorhandenen Namens hineinkopiere & ersetze (dann kopiert er einfach).
Zumal der Zugriff nicht sofort geblockt wird, sondern erst wenn ein neuer Schreibversuch unternommen wird (z. B. Kopierprozess bricht also nicht ab ...).

Gibt es also eine direkte Moeglichkeit, den schreibenden Zugriff auf ein Verzeichnis zu unterbinden?? - mit besonderem Hinblick auf den Windows Explorer, der ist ja der >Uebeltaeter< ...



Hoffe auf Hilfe - Ri
PS: Habe bereits so einige Posts hier und auf anderen Foren gelesen ...

Bernhard Geyer 28. Sep 2011 06:10

AW: Windows (Explorer) - Schribzugriff blockieren
 
Kannst du nicht Windows-Bordmittel für sowas verwenden?

trebor90 28. Sep 2011 07:51

AW: Windows (Explorer) - Schribzugriff blockieren
 
Nein, weil es sich dabei um, wie der Name schon sagt, DATENTRAEGER-Verwaltung handelt.
Und ausserdem ist dies benutzergezogen, das will ich nicht. Und ich moechte auch sehen, wieviel von dem Kontingent belegt ist, und wieviel frei (Progressbar).
Klappt ja schon alles - Ueberwachen des Verzeichnisses auf Aktivitaeten, Auslesen der Speicherplatzauslastung + visuelle Anzeige ...

Nur eben die Zugriffsblockade nicht ... :-(



--

Zacherl 28. Sep 2011 08:19

AW: Windows (Explorer) - Schribzugriff blockieren
 
Du könntest notfalls einen Hook verwenden.

trebor90 28. Sep 2011 08:24

AW: Windows (Explorer) - Schribzugriff blockieren
 
Kann man das bitte etwas genauer formulieren(?).
Ich kann damit kaum etwas anfangen (Hook, schonmal gehoert, glaube ich, ein Schlüsselereignis aufzufangen und weiterzuverarbeiten??) ...

Union 28. Sep 2011 08:27

AW: Windows (Explorer) - Schribzugriff blockieren
 
Oder ein Serverbetriebssystem (ab 2003 R2):
Code:
dirquota quota add /path:c:\klein /limit:100KB

himitsu 28. Sep 2011 08:41

AW: Windows (Explorer) - Schribzugriff blockieren
 
Hook:

Du leitest Systemfunktionen (WinAPI) um, also alle welche für Dateizugriffe vorhanden sind.
Darin prüfst du die "Erlaubnis", wenn es eraubt ist, dann wird zur ursprünglichen API weitergeleitet und wenn nicht, dann dieses entsprechend behandelt.

trebor90 28. Sep 2011 08:44

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Ich soll also Windows 7 aufgeben und stattdessen ein Serverbetriebssystem aufspielen???!!!!!!!! *kopfschuettel* :?
Ich will nicht, dass ihr meine Idee neu erfindet oder sagt, wie man es anders machen kann, sondern mein wirkliches Problem, die Schreibzugriffssperre, ernst nehmt. Zumal mein Porgramm ja auch die wichtige visuelle Komponente hat.

CCRDude 28. Sep 2011 10:34

AW: Windows (Explorer) - Schribzugriff blockieren
 
Union hat Dich schon ernst genommen. Um Dich in Hooks vernünftig einzuarbeiten (also soweit, daß Du Dich trauen kannst, den Code auch auf fremden Rechnern laufen zu lassen), rechne mal eine gute Woche Arbeitszeit. Ein wirklich ernsthaftes Auseinandersetzen vorausgesetzt, also nicht mit der Attitüde "ich will nicht daß ihr...".

In der Zeit kannst Du, wenn Du das Programm nur für Dich oder ein paar bestimmte Rechner brauchen solltest, etliche Betriebssystemsumstellungen hinbekommen.

Als Alternatividee würde ich doch wieder Union erst nehmen - was die Serverversion kann, steckt vielleicht auch, nur ohne Userinterface, in anderen Versionen. Finde also raus, mit welchem Feature Win2003R2 aufwärts das macht, und schaue nach, ob sich das irgendwo in der Windows API versteckt.

Union 28. Sep 2011 10:52

AW: Windows (Explorer) - Schribzugriff blockieren
 
Windows unterstützt ja ab XP bereits DiskQuota (glaub "Kontingent" auf Deutsch). Auf Verzeichnisebene wird es wesentlich komplizierter und erfordert evtl. nicht "nur" Hooks sondern Kerneltreiber. Und bei der Begrenzung hört es ja nicht auf. Schön wäre ja auch eine Simulation der Ermittlung des freien Speicherplatzes, das kriegt ja auch Windows Server weder bei Disk- noch bei Dir-Quota hin. D.h. Benutzer sieht Eigenschaften (1 TB frei) und er hat eigentlich nur noch 1 KB zur Verfügung.

Delphi-Laie 28. Sep 2011 10:56

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Hallo trebor90 oder ein Moderator, könnte bitte jemand von Euch diesen schlimmen Orthographiefehler im Titel des ersten Beitrages und damit der Diskussion korrigieren? Das würde auch spätere Suchen erleichtern. Danke!

trebor90 29. Sep 2011 10:06

AW: Windows (Explorer) - Schreibzugriff blockieren
 
So, ich melde mich wieder zu Wort:
Also zuerstmal kann ich den Titel der Diskussion nicht mehr aendern ...

Und ich habe probeweise mal Microsoft Windows Server 2008 inner VM installiert -
tippe ich allerdings >diskquota< oder >dirquota< in die Kommandozeile (EIngabeaufforderung) ein, wird dieser Befehl nicht gefunden :?: ... Ich suche aber noch weiter (die Diskquota.exe kriegt man irgendwie nicht zu downloaden).

Bei weiterem Suchen und Beschaeftigen mit Hooks bin ich dann auf folgendes gestossen:
http://delphi.about.com/library/code/ncaa030403b.htm
Lest euch am besten einmal - kurz - hinein.
Klingt gut und ist im Grunde das, was ich suche.
Allerdings hakt es an zwei Stellen:
- Schreibzugriff abfangen
- Ich weiss nicht, wie ich den Pfad des zu ueberwachenden Verzeichnisses beeinflusse (vielleicht bin ich auch nur zu dumm [zum Lesen])



Vielleicht faellt euch ja dazu etwas ein
(Bitte!)
Ri

DeddyH 29. Sep 2011 10:35

AW: Windows (Explorer) - Schribzugriff blockieren
 
Wenn ich den Code korrekt überflogen habe, kannst Du das Monitoring nicht auf bestimmte Verzeichnisse beschränken, sondern nur darauf, ob nur lokale Laufwerke überwacht werden sollen oder auch Netzlaufwerke. Bei Änderungen wird Dir dann allerdings der/die Pfad(e) als Parameter übergeben. Aber IIRC war zumindest früher einmal bei den Delphi-Demos auch ein Monitoring-Projekt dabei, da müsste ich jetzt einmal nachsehen.

Union 29. Sep 2011 10:51

AW: Windows (Explorer) - Schribzugriff blockieren
 
Zitat:

Und ich habe probeweise mal Microsoft Windows Server 2008 inner VM installiert -
tippe ich allerdings >diskquota< oder >dirquota< in die Kommandozeile (EIngabeaufforderung) ein, wird dieser Befehl nicht gefunden ... Ich suche aber noch weiter (die Diskquota.exe kriegt man irgendwie nicht zu downloaden).
Hast Du im Server-Manager die Dateiserver-Rolle installiert?

CCRDude 29. Sep 2011 11:01

AW: Windows (Explorer) - Schribzugriff blockieren
 
Rein mit Shell-Methoden funktioniert FindFirstChangeNotification/ReadDirectoryChanges auch ordnerweise. Nur hat das genau wie die verlinkten Shell-Funktionen keine Blockiermöglichkeit und auch nichts mit den erwähnten Hooks zu tun.

trebor90 29. Sep 2011 14:56

AW: Windows (Explorer) - Schribzugriff blockieren
 
Also ich habe jetzt in Windows Server 2008 den File Resource Manager installiert, und nun geht es.
Habe allerdings keine Installationsdatei gefunden und ein paar Dateien aus dem Betriebssystemverzeichnis nach Windows 7 kopiert - aber keine Chance, ich kann >dirquota< nicht vernuenftig starten ...

@DeddyH:
Schau dir mal das Programm an, also fuehre es mal aus: Dort wird nur das Arbeitsverzeichnis ueberwacht, also das, in welchem die .exe gerade liegt.
Also muss ja irgendwo der Pfad eingetragen werden koennen.

Ich finde das mit den Hooks sehr kompliziert und auch bisher habe ich es noch nicht mir verstaendlich gut erklaert worden. Und ich wuesste auch nicht, welchen Hook-Typen ich waehlen muesste:
http://msdn.microsoft.com/en-us/libr...%29.aspx#types



???
Ri

wicht 29. Sep 2011 15:10

AW: Windows (Explorer) - Schribzugriff blockieren
 
Die Hooks in dem Link haben damit glaube ich wenig zu tun. Ich würde dafür die uallCollection empfehlen, und die Funktion, die du hooken musst, wäre dann vermutlich WriteFile() oder CreateFile(). Auf der Seite gibt es auch noch Beispiele, da solltest du mal rein schauen. Wie es mit der uallCollection dann aber auf 64 Bit aussieht weiß ich nicht...

trebor90 29. Sep 2011 16:09

AW: Windows (Explorer) - Schribzugriff blockieren
 
Ich bedanke mich - aber ich habe immer noch keine Ahnung, wie ich das nutzen bzw. das anstellen soll.
Ich finde das alles sehr verwirrend.

CCRDude 29. Sep 2011 16:15

AW: Windows (Explorer) - Schribzugriff blockieren
 
Was definitiv mit 64 bit funktioniert ist madCodeHook.

Und die Einarbeitungszeit von einer Woche war leider (für den leidtragenden) bzw. gottseidank (für alle, die sonst Opfer wären) durchaus vollkommen ernst gemeint, Betriebssystemaufrufe abfangen und Umlenken ist kein Ponyhof :)

trebor90 29. Sep 2011 16:22

AW: Windows (Explorer) - Schribzugriff blockieren
 
Kannst du denn etwas empfehlen, wo ich mich gut einarbeiten kann?
Ich kenne Google schon, aber ich find's echt kompliziert und wenn es etwas gut verstaendliches gibt ...

wicht 29. Sep 2011 18:11

AW: Windows (Explorer) - Schribzugriff blockieren
 
Du wirst schon etwas Zeit investieren müssen, komplett vorgekaut gibt es da für deinen Zweck vielleicht nichts. Eine Google-Suche nach "windows api hook tutorial" spuckt doch recht viel aus, im Zweifelsfall noch um das Stichwort "Delphi" erweitern.
Klar, du schriebst ja, dass du gegoogelt hast, aber es gehört bei dem Thema wohl dazu, sich ein paar Tage einzulesen und zu experimentieren. Hier eine Anleitung zu posten würde den Poster wohl auch einige (viele) Zeit kosten...

trebor90 30. Sep 2011 18:06

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Ich habe jetzt einfach mal ein Delphi Tutorial angeschaut und compiliert.
Herausgekommen ist eine Prgrammbibliothek (DLL).
Es handelt sich dabei um einen Tatstatur-Hook. Ich habe als Aktion ein >beep< eingetragen.

Und nun? Was mache ich denn nun mit dieser DLL? Wie nutze ich sie?
Wie kann ich damit auf Tastatureingaben reagieren??



--
Ri

Luckie 30. Sep 2011 19:17

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Zitat:

Zitat von trebor90 (Beitrag 1127801)
Ich habe jetzt einfach mal ein Delphi Tutorial angeschaut und compiliert.
[..]
Und nun? Was mache ich denn nun mit dieser DLL? Wie nutze ich sie?
Wie kann ich damit auf Tastatureingaben reagieren??

Das sollte eigentlich im Tutorial stehen.

trebor90 30. Sep 2011 19:37

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Achja, 'tschuldigung. Da war ich zu voreilig; steht auf der naechsten Seite.
Was ich aber wirklich nicht finde: Wenn die DLL eingebunden ist und ich somit Zugriff auf die Funktionen habe, wie nutze ich denn nun den Hook? Also, wie bringe ich das ganze dazu, zu reagieren? Selbsttaetig?



--
Ri

Hobby-Programmierer 30. Sep 2011 20:18

AW: Windows (Explorer) - Schreibzugriff blockieren
 
... du hast dich wohl etwas verrannt. Mit nem Sniffer kannst du vielleicht deine Freundin überwachen, das Dateihandling aber sicher nicht.
Vielleicht solltest du lieber diesen Ansatz verwenden ...

LG Mario

trebor90 30. Sep 2011 22:38

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Ich habe nur versucht, das ganze ueberhaupt zu verstehen. Hooks.
Ich bin total verwirrt. Der eine sagt mir, dass mir das wohl nicht helfen wird, du sagst mir, dass mir diese Art von Hooks nicht helfen wird. Aber Hooks sind doch Hooks. Muss doch immer das gleiche sein, nur eben, dass es verschiedene Typen fuer verschiedene Aufgaben gibt. Ich meine, Windows kann doch auch nur Zigriff auf Hooks anbieten. Hooks bleiben doch immer Hooks und das Prinzip das gleiche; oder etwa nicht???

Zumal auf der uallcollection nur downloadbare und dokumentierte Beispiele sind - aber keine Erklaerung. Ich kann mich nicht mal eben durch den Code lesen (wenn ich gar nicht kapiere, worum es geht). Und ich versuche es gerade mittels des "Sniffer"-Tutorials ...


:?::!::?:

...

CCRDude 30. Sep 2011 23:08

AW: Windows (Explorer) - Schreibzugriff blockieren
 
"Hooks" sind erstmal nur ein englischen Wort.

Das Hooking, das Du verwenden müsstet, wäre in etwa:

Du schaust, welche Betriebssystemaufrufe für das Schreiben in Dateien zuständig sind. Auch für das Kopieren etc. Also welche Funktionen aus den Windows-DLLs. Dann gehst Du hin, und biegst alle diese Betriebssystemaufrufe "um" - so, daß sie zuerst in eine von Dir geschriebene DLL zeigen, von wo Du dann entweder das Original aufrufst oder auch nicht (falls Quota erreicht).

Du musst also die Funktionalität einiger API-Aufrufe (der, die du hooken musst) sehr genau verstehen, dann verstehen, wie Windows-Programme Funktionen aus DLLs aufrufen, wie man sich dazwischen hängt, ... sowas vereinfachen zwar Hooking-Bibliotheken wie madCodeHook oder uallCollection - nur ist das trotzdem ein kritischster Eingriff ins System, das von jedem Bug lahmgelegt werden kann (stell Dir vor Windows kann aus einem dummen Fehler von Dir gar nichts mehr in Dateien schreiben).

himitsu 30. Sep 2011 23:15

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Zitat:

Zitat von trebor90 (Beitrag 1127841)
(wenn ich gar nicht kapiere, worum es geht)

Und dann willst du Systemfunktionen hooken umbiegen?

Wenn man nicht weiß was man macht, kann man schnell mal das ganze System lahmlegen und/oder Daten schrotten.

[edit]
wo kommt denn CCRDude plötzlich her :shock:

trebor90 6. Okt 2011 19:41

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Hallo, ich bin wieder da.

<FRUST>
Also, ich verzweifle hier langsam.
Ich finde kein Tutorial, was mir verstaendlich macht, wie ich Hooks benutze.
Kennt ihr jemanden, der mit (API-)Hooks umgehen kann und der mir das verstaendlich erklaert?
Oder ein Tutorial, welches das erledigt?
Ich habe studenlang gesucht und mit "windows api hook tutorial" erziele ich keine guten Ergebnisse.
Selbst mittels Anleitungen auf englisch und fuer andere Programmiersprachen komme ich nicht weiter.

Ich habe es bereits mehrmals mit Maus-Hooks versucht usw. ... Nicht mal das habe ich verstanden, und dann wurde mir gesagt, dass es eh nicht das Richtige waere - was mich aber wundert, denn Hook ist doch Hook (?), egal was ich abfange ...
Und diese ganzen tollen Collections (uallcollection etc. ...), damit weiss ich auch nichts anzufangen - deie installiere ich, und dann?

Ich brauche einfach jemanden oder etwas, der mir vernuenftig Hooks erklaert;
ich wuedre mich gern eine Woche lang einlesen, aber ich finde nichts, was ich verstehe.
Und das hat nichts mit mangeldem Willen oder Faulheit zu tun ...
</FRUST>



--
Richard

wicht 6. Okt 2011 20:26

AW: Windows (Explorer) - Schreibzugriff blockieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
So.. vielleicht ist das dumm von mir, aber mir reichts :-D
Wenn du mir jetzt sagst dass du nur 32-Bit unterstützen willst versuche ich dir dafür schnell was zusammen zu kloppen was auch halbwegs kommentiert ist. Einfach nur, um ein WriteFile() zu verhindern...

Edit: Ich konnte mich nicht zurückhalten, Anhang ist jetzt dabei, für Delphi 7 mit CreateFile() - leider schmiert es direkt ab, wenn man die Original-Funktion aufruft. Ein simples Result := ERROR_ACCESS_DENIED klappt. Wenn jetzt ein schöner Mensch kommt, der sich damit besser auskennt, kann er die Sache vielleicht zum laufen bringen. Ich habe auch mal was mit der uallCollection gebaut, was funktioniert hat, leider kein CreateFile() ... vielleicht kann da jemand weiter helfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.

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