AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dateihandles auf einem bestimmten Laufwerk beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Dateihandles auf einem bestimmten Laufwerk beenden

Ein Thema von Kasoft · begonnen am 11. Jan 2005 · letzter Beitrag vom 12. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Kasoft

Registriert seit: 5. Mai 2004
Ort: Filderstadt
111 Beiträge
 
Delphi 7 Professional
 
#1

Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 13:25
Hallo,

Ich habe folgendes Problem:
Steck ich ein USB-Speicher ein wird es als Laufwerk erkannt. Auf dem stick ist nun eine Datei
die ich öffne (Kann Textdatei oder sonstiges sein.) Wenn ich nun mein USB-Stick über Hardware entfernen entfernen möchte funktioniert das nicht da ja ein Handle geöffnet ist. Nun wäre das in diesem Fall kein Problem einfach die Datei zu schließen und das zu wiederholen. Problematisch wirds erst dann wenn ein externes Programm ein Handle geöffnet hat und und dann abstürzt. Das Handle wird nicht freigelassen. Somit kann ich mein USB-Stick nicht über Hardware entfernen ansteuern. Gibt es in so einem Fall eine Möglichkeit zu sagen.
Kill alle Handles auf das Laufwerk u:

MfG
Kasoft
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 14:47
Ähem ... nimm mal statt Handle einen Pointer, nur so zur Veranschaulichung.

So. Dein Programm hat also einen Puffer von, sagen wir mal 64kB und dann kommt ein Programm (eine DLL) von mir und gibt den Speicher auf den dein Pointer zeigt frei. Danach hat dein Programm viel Spaß damit auf den ungültigen (weil freigegebenen) Speicher zuzugreifen. Im übertragenen Sinne willst du genau das mit dem externen Programm bei dir machen, nur daß es keine Pointer sondern eben Handles als Referenzen auf Objekte sind.

Du siehst also, daß dies ziemlich unsinnig ist - insbesondere daher, weil keine Seite auf ein Ungültigwerden der Handles vorbereitet ist, wie dies zB bei Netzlaufwerken der Fall wäre. Da hilft nur USB-Stick rausziehen - ein abruptes Schließen aller Handles in fremden Programmen würde nichts anderes bewirken und ebenfalls (potentiell) zu Datenverlust führen.
  Mit Zitat antworten Zitat
Kasoft

Registriert seit: 5. Mai 2004
Ort: Filderstadt
111 Beiträge
 
Delphi 7 Professional
 
#3

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 16:20
Das ein Datenverlust entstehen kann ist mir klar. Das würde ich in kauf nehmen (sogar müssen).
Für die Anwendung wäre es sogar von großer Bedeutung das genau das passiert.

Ich gehe mal von einer anderen Seite die Sache an:

Ein Programm soll verbieten das USB-Sticks angeschlossen werden. Alle anderen USB-Geräte (wie Maus, Tastatur Drucker) sollen trotzdem weiter funktioren. Bis zu diesem Punkt ist das kein Problem. USB-Speicher werden innerhalb weniger ms nachdem er initialisiert ist wieder sauber entfernt. Auch Festplatten werden korrekt innerhalb ein paar ms entfernt. Jetzt gibt es aber diese MultiCardReader mit dem man z.B. 4 verschiedene Laufwerke bekommt indem man sie einstöpselt. 4 Laufwerke brauchen auch einiges an Zeit in der sie gemountet werden. Diese Zeit beträgt ca 5 Sekunden. In diesen 5 Sekunden werden die einzelnen Laufwerke hintereinander gemountet. Sprich nach der 1. Sekunde ist Laufwerk 1 da nach der 2. Laufwerk 2 usw.
Jetzt ist es mir nicht möglich dieses mounten vorher abzubrechen sondern muss warten bis alle sauber gemountet sind um dann sofort wieder auszuwerfen. In dieser Zeit kann der Benutzer aber auf die schon gemounteten Laufwerke zugreifen. Und genau das darf nicht geschehen. Wenn in dieser Zeit es der Benutzer schafft eine einfache Textdatei zu öffnen bekomme ich keine Priorität um die Laufwerke abzumelden sondern muss warten bis die Textdatei beendet wird.
Hier will ich jetzt eingreifen. Dafür gibts verschiedene Möglichkeiten wie zum Beispiel das gemountete Laufwerk sofort nach dem Mounten zu sperren und dann wenn alles fertig ist wieder auszuwerfen. Hieran bin ich gescheitert weil ich von Windows keine Rückmeldung bekomme welche Laufwerke wohin gemapped sind. Daher habe ich es eigentlich als einfacher erachtet alle Handles auf das Laufwerk zu "killen" (wie kann man das anders nennen...)
Datenverlust darf sein.
Dieses Problem gab es mal bei scandisk (oder checkdisk??). Der hat dann einfach alle Handles abgeschossen die Zugriff auf das zu prüfende Laufwerk hatten. Wenn ich die Quelle wiederfinde werde ich sie mal posten.

MfG
Kasoft
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 16:29
Aha ... jetzt kommen wir ja auch zu Potte. Schonmal dran gedacht, die ACLs auf dem Gerät zu setzen? Ich meine bei einer Tastatur oder Maus werden sicher nicht so viele Berechtigungen notwendig sein wie bei einem USB-Massenspeicher.

Noch eine Frage. Es klingt ganz nach Admin-Aufgaben. Die Mäuse sind bereits vorher eingestöpselt? Dann kannst du nämlich eventuell auch die entsprechenden Registrykeys schützen, wo die Daten zu den neuen Geräten abgelegt werden. Ist eben immer die Frage, was gemacht werden soll.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 16:45
Start => Einstellungen => Systemsteuerung => Verwaltung => Lokale Sicherheitsrichtlinien => Lokale Richtlinien => Zuweisen von Benutzerrechten => Laden und Entfernen von Gerätetreibern.

Wenn du die Rechte rausnimmst, dürften auch keine USB Wechselfestplattentreiber mehr geladen werden
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#6

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 16:48
Zitat von SubData:
Start => Einstellungen => Systemsteuerung => Verwaltung => Lokale Sicherheitsrichtlinien => Lokale Richtlinien => Zuweisen von Benutzerrechten => Laden und Entfernen von Gerätetreibern.

Wenn du die Rechte rausnimmst, dürften auch keine USB Wechselfestplattentreiber mehr geladen werden
Gilt das dann nicht aber auch für Mäuse und Tastaturen, die er ja erlauben wollte?

@Kasoft:
Ich vermute mal, du läßt dich per Window-Message über neue Geräte informieren?
Also mit RegisterDeviceNotification() registrieren und dann als Fenster oder Service reagieren (zB auf DBT_DEVICEARRIVAL)?

Wenn es ein Service ist, könnte u.U. ein FSCTL_DISMOUNT_VOLUME reichen. Getestet habe ich es aber nicht - keine Zeit für sowas aktuell.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 16:50
Sind Maus und Tastaturtreiber nicht sowieso geladen?
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 17:02
Moin Kasoft,

Du müsstest nur die Rechte auf %SYSTEMROOT%\INF\USBSTOR.INF und USBSTOR.PNF für den normalen Benutzer entfernen, dann sollte man keinen Massenspeicher mehr mounten können, andere USB-Geräte funktionieren hingegen noch problemlos, da diese die USBSTOR.* nicht benötigen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#9

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 17:25
Zitat von Christian Seehase:
Du müsstest nur die Rechte auf %SYSTEMROOT%\INF\USBSTOR.INF und USBSTOR.PNF für den normalen Benutzer entfernen, dann sollte man keinen Massenspeicher mehr mounten können, andere USB-Geräte funktionieren hingegen noch problemlos, da diese die USBSTOR.* nicht benötigen.
Cooler Tip! Funkt das nur für "noch nicht erkannte" USB-Sticks oder immer?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Dateihandles auf einem bestimmten Laufwerk beenden

  Alt 11. Jan 2005, 18:09
Moin Assarbad,

gute Frage

Schau doch mal nach, ob Du im Gerätemanager das (entfernte) Gerät noch finden kannst (ausgeblendete einblenden nicht vergessen ).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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