Bei der Durchsicht der Projekte habe ich im Projekt Freeburner/Burnlibrary eine Konstante dtMT_DOOROPEN = $71 bzw MT_DOOROPEN = $71; gefunden. Dazu habe ich bisher nur herausgefunden, dass es sich um ATAPI-Konstante handeln müsste.
Als Lösungsansätze kämen meiner Ansicht in Frage:
IODeviceControl
================
Verschiedene IOCTLs geben einen IO_Status_Block zurück. Desweiteren wird der Status stets als Ergebnis der Funktion DeviveIOControl zurückgegeben. Hier werden die Werte STATUS_SUCCESS (0 - Der Vorgang wurde erfolgreich beendet), STATUS_NO_MEDIA_IN_DEVICE und STATUS_DEVICE_NOT_READY (21 - Das Gerät ist nicht bereit) benötigt. Dafür bietet sich zum Beispiel IOCTL_CDROM_CHECK_VERIFY an.
Für die Funktion sind lediglich Leserechte notwendig, sodass sie auch bei eingeschränkten Usern funktionieren sollte.
Allerdings hat diese Funktion nicht den gewünschten Erfolg gebracht.
Mechanismus
===========
In der TIsoLib bin ich auf eine Funktion gestossen, welche den Status des Mechanismus eines Changers abfragt. Der MechanismStatus beinhaltet den MechanismStatusHeader mit dem Wert MechanismState_DoorOpen_CurrentSlot, welcher den Status der Schublade angibt.
Da die Funktion IOCTL_SCSI_PASS_THROUGH_DIRECT Schreibrechte (Burn Rights) benötigt, funktioniert es standardmäßig nur bei Administratoren. Eingeschränkten bzw Hauptbenutzern müssen die entsprechenden Rechte erteilt werden.
WMI
===
Bei Changern gibt es
Zitat:
WMI_CHANGER_PROBLEM_DEVICE_ERROR
- ChangerPerformDiagnostics
- CHANGER_DEVICE_PROBLEM_TYPE
- DeviceProblemDoorOpen = Indicates the changer's door is open.
Damit kann ich allerdings im Moment wenig anfangen.
Die Sourcen anbei. Kompiliert mit Turbo Delphi
Win32 Explorer unter Win2000.