![]() |
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 ... |
AW: Windows (Explorer) - Schribzugriff blockieren
Kannst du nicht
![]() |
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 ... :-( -- |
AW: Windows (Explorer) - Schribzugriff blockieren
Du könntest notfalls einen Hook verwenden.
|
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??) ... |
AW: Windows (Explorer) - Schribzugriff blockieren
Oder ein Serverbetriebssystem (ab 2003 R2):
Code:
dirquota quota add /path:c:\klein /limit:100KB
|
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. |
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. |
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. |
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.
|
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!
|
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: ![]() 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 |
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.
|
AW: Windows (Explorer) - Schribzugriff blockieren
Zitat:
|
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.
|
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: ![]() ??? Ri |
AW: Windows (Explorer) - Schribzugriff blockieren
Die Hooks in dem Link haben damit glaube ich wenig zu tun. Ich würde dafür die
![]() |
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. |
AW: Windows (Explorer) - Schribzugriff blockieren
Was definitiv mit 64 bit funktioniert ist
![]() 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 :) |
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 ... |
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... |
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 |
AW: Windows (Explorer) - Schreibzugriff blockieren
Zitat:
|
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 |
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 ![]() LG Mario |
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 ![]() Zumal auf der ![]() :?::!::?: ... |
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). |
AW: Windows (Explorer) - Schreibzugriff blockieren
Zitat:
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: |
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 |
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