2013-01-07 4 views
1

Je veux bloquer l'utilisateur pour sauvegarder des fichiers sur des disques optiques, donc je dois déterminer si un lecteur de CDROM est inscriptible.Comment déterminer par programme si un lecteur est un DVD-RW/CD-RW sous Windows?

Comment faire sous Windows?

+1

Vous pouvez le faire en utilisant GetRecorderDriveLetter http://stackoverflow.com/questions/5825944/how-do-i-call-icdburngetrecorderdriveletter-in-vs2008-c-solving-xp-cd-wr –

Répondre

1

Vous pouvez utiliser la méthode utilisée par l'application d'enregistrement de CD/DVD open source InfraRecorder (git repo).

InfraRecorder utilise la bibliothèque ckmmc pour obtenir la liste des périphériques compatibles utilisant la classe ckmmc::DeviceManager (elle prend en charge plusieurs périphériques, bien sûr).

D'abord, il analyse tous les périphériques à l'aide de ckmmc DeviceManager::scan(), puis vérifie si le périphérique est un enregistreur utilisant la méthode MmcDevice::recorder().

Vous penserez qu'il doit y avoir un moyen plus facile de le faire en utilisant quelque chose comme GetDriveType() ou DeviceIoControl(), mais malheureusement, ce n'est pas si simple.

ckmmc prend en charge deux méthodes d'accès aux périphériques différentes: ASPI (interface de programmation SCSI avancée) et SPTI (interface SCSI Pass-Through). Pour obtenir les propriétés du lecteur, il envoie des commandes SCSI à l'appareil, puis seulement il peut analyser la page du mode SCSI et indiquer les modes d'enregistrement (CD-R, CD-RW, DVD-R, DVD + R, etc ...) supports (le cas échéant).

+0

DeviceIoControl() peut être utilisé pour envoyer des commandes ASPI/SPTI directement, et il n'est pas trop difficile à faire sans ckmmc. Je l'ai déjà fait pour localiser les lecteurs DVD spécifiques et les disques insérés. –

+0

Je suppose que si on est vraiment enclin, il devrait être possible d'extraire juste ce bit de ckmmc et l'avoir comme fonction séparée – mvp

+0

Je n'avais jamais entendu parler de ckmmc avant de voir cette discussion, sinon je l'aurais utilisé à l'époque:) –

3

L'indice d'entraînement (0 = A, 1 = B, etc.) pour le graveur de CD Windows peut être trouvé dans le registre à HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ gravure de CD \ DriveIndex.

+0

Que faire s'il y a deux graveurs de CD? – SLaks

+1

Windows lui-même ne prend pas en charge plus d'un graveur. Des outils tiers pourraient cependant être utiles. Si vous souhaitez également bloquer ces éléments, vous devrez utiliser quelque chose de plus bas niveau pour interroger le type de lecteur. –

+0

Note: Utiliser l'interface ICDBurn comme suggéré par @Vahid Farahmand est probablement préférable à la lecture du registre. –

Questions connexes