AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wechseldatenträger auswerfen

Ein Thema von patti · begonnen am 20. Mai 2009 · letzter Beitrag vom 29. Nov 2010
Antwort Antwort
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#1

Wechseldatenträger auswerfen

  Alt 20. Mai 2009, 14:14
Hallo,

stehe vor einem kleinen Problem und hoffe, dass ihr mir helfen könnt.
Und zwar geht es darum, einen Wechseldatenträger (hauptsächlich USB-Sticks) aus meinem eigenen Programm heraus sicher zu entfernen (also zunächst abzumelden, wie über das Tray-Icon "Hardware sicher entfernen"). Hab natürlich schon gesucht (in der DP und über Google) und mir auch schon was zusammengebastelt, was ansatzweise schon ganz gut funktioniert. Ich arbeite hierbei mit der Methode DeviceIoControl. Meine Vorgenhensweise ist dabei folgendermaßen:
  • Volume-Handle holen:

    Delphi-Quellcode:
    AccessFlags := GENERIC_READ or GENERIC_WRITE;
    //
    VolumeName := Format('\\.\%s:', [ADrive]);
    //
    Result := CreateFile(PChar(VolumeName), AccessFlags, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  • Wenn Volume-Handle gültig ist (und DriveType DRIVE_REMOVABLE):
    --> Volume sperren (DeviceIoControl mit zweitem Parameter FSCTL_LOCK_VOLUME)
  • --> Volume dismounten (DeviceIoControl mit zweitem Parameter FSCTL_DISMOUNT_VOLUME)
  • --> PreventMediaRemoval auf false setzen (DeviceIoControl mit zweitem Parameter IOCTL_STORAGE_MEDIA_REMOVAL)
  • --> Volume auswerfen (DeviceIoControl mit zweitem Parameter IOCTL_STORAGE_EJECT_MEDIA)
  • --> Volume-Handle mit CloseHandle-Funktion "schließen"

Teste ich meinen Quellcode mit einem USB-Stick, so scheint das ganze schon zu funktionieren. Die LED blinkt zunächst und geht dann irgendwann aus, wie es auch beim Standard-Abmelden mit dem Tray-Icon der Fall ist. Allerdings wird das Gerät anscheinend nicht vollständig abgemeldet. Das Laufwerk-Icon bleibt im Explorer erhalten und auch das Tray-Icon zum Abmelden verschwindet nicht. Ein Zugriff auf den Datenträger ist allerdings nicht mehr möglich (Nachricht "Bitte Datenträger in Laufwerk einlegen" oder ähnlich). Wenn ich über den Geräte-Manager von Windows nach geänderter Hardware suchen lassen, bleibt das Problem weiterhin bestehen. Muss ich Windows noch irgendetwas mitteilen oder habe ich in meinem Code einfach nur etwas vergessen?

Hoffe, ich hab mich verständlich ausgedrückt und mein Problem ist lösbar
Danke schonmal

Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wechseldatenträger auswerfen

  Alt 21. Mai 2009, 12:42
Ist zwar noch nicht ganz 24 Stunden seit meinem ersten Post her, aber ich hoffe, das wird mir verziehen
Noch eine Anmerkung: wenn ich DeviceIoControl mit dem Parameter IOCTL_STORAGE_EJECT_MEDIA aufrufe, um das Medium auszuwerfen, liefert mir die Funktion als result "true", scheint also tatsächlich erfolgreich zu sein. Es geht nur darum, Windows noch mitzuteilen, dass das Gerät vollkommen abgemeldet wurde und nicht mehr als angestecktes Gerät erkannt werden soll. Muss ich mit Datenverlust auf meinem Stick rechnen, wenn ich ihn nach der (erfolgreichen) Ausführung meines Quelltextes einfach abziehe? (Denke eigentlich nicht, weil das Gerät ja "geunmountet" wurde und auch ausgeworfen ["eject"] wurde).
Kennt vielleicht noch jemand eine andere Möglichkeit (allerdings ohne Fremdkomponenten, ...), einen USB-Stick aus meinem Delphi-Programm heraus sicher zu entfernen?

Patti
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
rakekniven

Registriert seit: 4. Apr 2008
Ort: Franken
82 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Wechseldatenträger auswerfen

  Alt 29. Nov 2010, 15:22
Hi,

hast Du hierfür inzwischen eine Lösung gefunden?

Gruß
Frag google
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:45 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