Windows CDROM Auswerfen

8

Kennt jemand eine Methode zum programmatischen Schließen des CD-Fachs unter Windows 2000 oder höher? Es ist ein CD-Fach vorhanden, aber ich kann es nicht besonders unter W2k schließen.

Ich suche insbesondere nach einer Methode, um dies aus einer Batch-Datei zu tun, wenn möglich, aber API-Aufrufe wären in Ordnung.

    
kenny 12.09.2008, 10:53
quelle

5 Antworten

5

Hier ist ein einfacher Weg die Win32 API zu benutzen:

%Vor%     
DaveK 12.09.2008, 11:28
quelle
11

Ich benutze gerne DeviceIOControl, da es mir die Möglichkeit gibt, beliebige Wechseldatenträger (wie USB- und Flash-Disks sowie CD-Trays) auszuwerfen. Da codez, um einen Datenträger ordnungsgemäß mit DeviceIOControl auszuwerfen, ist (fügen Sie einfach eine ordnungsgemäße Fehlerbehandlung hinzu):

%Vor%     
Andreas Magnusson 16.09.2008 21:24
quelle
3

Ich habe bemerkt, dass die Antwort von Andreas Magnusson nicht ganz so funktioniert wie die Eject-Taste des Explorers. Insbesondere wurde das Laufwerk im Explorer nicht mit dem Andreas-Code ausgegraut, sondern mit dem Befehl Eject. Also habe ich Nachforschungen angestellt.

Ich habe API Monitor ausgeführt, während ich den Eject-Befehl vom Explorer (Windows 7 SP1 64-Bit) ausgeführt habe. Ich fand auch einen guten MSKB-Artikel 165721 mit dem Titel Auswerfen von Wechselmedien in Windows NT / Windows 2000 / Windows XP . Der interessanteste Teil des MSKB Artikels ist unten zitiert:

  
  1. Rufen Sie CreateFile mit GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE und OPEN_EXISTING auf. Der Parameter LpFileName sollte \. \ X sein: (wobei X der tatsächliche Laufwerksbuchstabe ist). Alle anderen Parameter können Null sein.
  2.   
  3. Sperren Sie das Volume, indem Sie die FSCTL_LOCK_VOLUME-IOCTL über DeviceIoControl absetzen. Wenn eine andere Anwendung oder das System das Volume verwendet, schlägt diese IOCTL fehl. Sobald diese Funktion erfolgreich zurückgegeben wird, wird der Anwendung garantiert, dass das Volume von nichts anderem im System verwendet wird.
  4.   
  5. Heben Sie die Bereitstellung des Volumes auf, indem Sie die FSCTL_DISMOUNT_VOLUME-IOCTL absetzen. Dies führt dazu, dass das Dateisystem alle Kenntnisse des Datenträgers entfernt und alle internen Informationen, die es bezüglich des Datenträgers enthält, verwirft.
  6.   
  7. Stellen Sie sicher, dass das Medium entfernt werden kann, indem Sie IOCTL_STORAGE_MEDIA_REMOVAL IOCTL absetzen. Setzen Sie das Member PreventMediaRemoval der Struktur PREVENT_MEDIA_REMOVAL auf FALSE, bevor Sie dieses IOCTL aufrufen. Dies verhindert, dass das Gerät die Entfernung des Mediums verhindert.
  8.   
  9. Werfen Sie die Medien mit der IOCTL_STORAGE_EJECT_MEDIA IOCTL aus. Wenn das Gerät keinen automatischen Auswurf zulässt, kann IOCTL_STORAGE_EJECT_MEDIA übersprungen werden und der Benutzer kann angewiesen werden, das Medium zu entfernen.
  10.   
  11. Schließen Sie das Volume-Handle, das Sie im ersten Schritt erhalten haben, oder geben Sie die FSCTL_UNLOCK_VOLUME IOCTL aus. Dadurch kann das Laufwerk von anderen verwendet werden   Prozesse.
  12.   

Andreas 'Antwort, der MSKB-Artikel und mein API-Sniffing von Explorer können wie folgt zusammengefasst werden:

  1. CreateFile aufgerufen, um das Volume zu öffnen. (Alle Methoden).
  2. DeviceIoControl wird mit FSCTL_LOCK_VOLUME aufgerufen . (Alle Methoden).
  3. DeviceIoControl wird mit FSCTL_DISMOUNT_VOLUME aufgerufen . (Nur Andreas und MSKB Methoden. Explorer nennt das nicht aus irgendeinem Grund. Diese IOCTL scheint zu beeinflussen, ob das Laufwerk im Explorer ausgegraut ist oder nicht. Ich bin nicht sicher, warum Explorer dies nicht nennt).
  4. DeviceIoControl aufgerufen mit IOCTL_STORAGE_MEDIA_REMOVAL und PREVENT_MEDIA_REMOVAL member auf FALSE gesetzt (MSKB- und Explorer-Methoden. Dieser Schritt fehlt in Andreas 'Antwort).
  5. DeviceIoControl aufgerufen mit IOCTL_STORAGE_EJECT_MEDIA ( Andreas und MSKB Artikel) oder IOCTL_DISK_EJECT_MEDIA (Explorer; beachten Sie, dass IOCTL veraltet ist und durch das STORAGE IOCTL ersetzt wurde. Nicht sicher, warum Explorer immer noch den alten verwendet).

Zum Schluss habe ich beschlossen, das im MSKB-Artikel beschriebene Verfahren zu befolgen, da es das gründlichste und vollständigste Verfahren zu sein schien, unterstützt durch einen MSKB-Artikel.

    
James Johnston 28.05.2015 17:11
quelle
1

Nircmd ist ein sehr nützliches Freeware-Kommandozeilenprogramm mit verschiedenen Optionen, einschließlich Öffnen und Schließen des CD-Trays.

    
Dave Webb 12.09.2008 10:58
quelle
0

Schließen Sie das Laufwerk wie unter hier beschrieben, aber anstatt DeviceIoControl mit IOCTL_STORAGE_EJECT_MEDIA zu verwenden, müssen Sie DeviceIoControl mit IOCTL_STORAGE_LOAD_MEDIA aufrufen .

    
Slion 03.09.2015 09:14
quelle

Tags und Links