OVH Cloud OVH Cloud

Identification mémoires de masse

9 réponses
Avatar
Pierre Maurette
Bonjour,

Je reprends un vieux projet d'avant XP qui semble avoir bien supporté
le passage à ce dernier OS.
J'utilise C++ Builder, exactement Turbo C++ Explorer, de Borland.
Basiquement, j'enregistre le contenu de toutes sortes de volumes
entiers, ou lors d'arborescences sous un répertoire.
J'utilise, en plus de DeviceIoControl() pour éjecter/charger les
lecteurs de CD/DVD locaux, GetLogicalDriveStrings(), puis
GetDriveType() et GetVolumeInformation() pour identifier. C'est un peu
le bordel, mais ça marche à peu près. Il me manque quelques
renseignements, le plus gênant étant à propos des lecteurs réseau, pas
possible de même différencier un répertoire partagé et un lecteur de
CD/DVD. C'est assez logique, mais embêtant.
Qu'existe-t-il en API sous Windows pour ce genre de tâche ? En
bibliothèque gratuite ? En bibliothèque portable Windows/Linux ?

Merci d'avance pour toute suggestion.

--
Pierre Maurette

9 réponses

Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:
Bonjour,

Je reprends un vieux projet d'avant XP qui semble avoir bien supporté
le passage à ce dernier OS.
J'utilise C++ Builder, exactement Turbo C++ Explorer, de Borland.
Basiquement, j'enregistre le contenu de toutes sortes de volumes
entiers, ou lors d'arborescences sous un répertoire.
J'utilise, en plus de DeviceIoControl() pour éjecter/charger les
lecteurs de CD/DVD locaux, GetLogicalDriveStrings(), puis
GetDriveType() et GetVolumeInformation() pour identifier. C'est un peu
le bordel, mais ça marche à peu près. Il me manque quelques
renseignements, le plus gênant étant à propos des lecteurs réseau, pas
possible de même différencier un répertoire partagé et un lecteur de
CD/DVD. C'est assez logique, mais embêtant.
Qu'existe-t-il en API sous Windows pour ce genre de tâche ? En
bibliothèque gratuite ? En bibliothèque portable Windows/Linux ?



normallement la fonction GetDriveType devrait permettre de différencier un
disque réseau (DRIVE_REMOTE) d'un autre dique local.

VB
Avatar
Pierre Maurette
Vincent Burel, le 29/11/2006 a écrit :
[...]
normallement la fonction GetDriveType devrait permettre de différencier un
disque réseau (DRIVE_REMOTE) d'un autre dique local.



Oui, justement. Quand c'est DRIVE_REMOTE, je ne peux plus différencier
DRIVE_CDROM, DRIVE_FIXED, DRIVE_REMOVABLE, etc.

En fait, ce qui est intéressant dans mon cas, ce serait de différencier
un support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte
mémoire, d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO,
etc. Les premiers vont éventuellement devoir être archivés, les seconds
sont à priori des archives.

Peut-être en cherchant vers DirectX ?

--
Pierre Maurette
Avatar
Vincent Burel
"Pierre Maurette" wrote in message
news:
Vincent Burel, le 29/11/2006 a écrit :
[...]
> normallement la fonction GetDriveType devrait permettre de différencier


un
> disque réseau (DRIVE_REMOTE) d'un autre dique local.

Oui, justement. Quand c'est DRIVE_REMOTE, je ne peux plus différencier
DRIVE_CDROM, DRIVE_FIXED, DRIVE_REMOVABLE, etc.

En fait, ce qui est intéressant dans mon cas, ce serait de différencier
un support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte
mémoire, d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO,
etc. Les premiers vont éventuellement devoir être archivés, les seconds
sont à priori des archives.



Mais GetVolumeInformation devrait dire si le volume spécifié est
READ_ONLY...
Sinon sur un disque distant, je ne vois pas d'autre moyen que de creer un
fichier vide pour s'assurer qu'il s'agit d'un média writable ou non (mais ca
marchera pas pour les CDRW c'est vrai).

Peut-être en cherchant vers DirectX ?



ha bon ? je ne sais pas.

VB
Avatar
Pierre Maurette
Vincent Burel, le 29/11/2006 a écrit :
[...]
Mais GetVolumeInformation devrait dire si le volume spécifié est
READ_ONLY...



Un CDR et un CDRW par exemple sont tous deux READ_ONLY dans
lpFileSystemFlags de GetVolumeInformation().

--
Pierre Maurette
Avatar
Christian ASTOR
Pierre Maurette wrote:

En fait, ce qui est intéressant dans mon cas, ce serait de différencier
un support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte
mémoire, d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO, etc.
Les premiers vont éventuellement devoir être archivés, les seconds sont
à priori des archives.



On obtient à peu près tout avec IOCTL_CDROM_GET_CONFIGURATION
(+ IOCTL_CDROM_DISK_TYPE, IOCTL_CDROM_READ_TOC...)
(également IDiscRecorder::QueryMediaType())
Avatar
Pierre Maurette
Christian ASTOR, le 29/11/2006 a écrit :
Pierre Maurette wrote:

En fait, ce qui est intéressant dans mon cas, ce serait de différencier un
support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte mémoire,
d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO, etc. Les
premiers vont éventuellement devoir être archivés, les seconds sont à
priori des archives.



On obtient à peu près tout avec IOCTL_CDROM_GET_CONFIGURATION
(+ IOCTL_CDROM_DISK_TYPE, IOCTL_CDROM_READ_TOC...)
(également IDiscRecorder::QueryMediaType())



Merci. Je vais coller tout ça dans Google et/ou MSDN. A mon avis, il y
a un peu de boulot ;-)

--
Pierre Maurette
Avatar
Vincent Burel
"Christian ASTOR" wrote in message
news:456dc987$0$21143$
Pierre Maurette wrote:

> En fait, ce qui est intéressant dans mon cas, ce serait de différencier
> un support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte
> mémoire, d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO, etc.
> Les premiers vont éventuellement devoir être archivés, les seconds sont
> à priori des archives.

On obtient à peu près tout avec IOCTL_CDROM_GET_CONFIGURATION
(+ IOCTL_CDROM_DISK_TYPE, IOCTL_CDROM_READ_TOC...)
(également IDiscRecorder::QueryMediaType())



et ca marcher aussi avec des disques réseaux ? le IDiscRecorder ca
m'étonnerait
Avatar
Arnaud Debaene
"Pierre Maurette" a écrit dans le message de
news:
Vincent Burel, le 29/11/2006 a écrit :
[...]
normallement la fonction GetDriveType devrait permettre de différencier
un
disque réseau (DRIVE_REMOTE) d'un autre dique local.



Oui, justement. Quand c'est DRIVE_REMOTE, je ne peux plus différencier
DRIVE_CDROM, DRIVE_FIXED, DRIVE_REMOVABLE, etc.

En fait, ce qui est intéressant dans mon cas, ce serait de différencier un
support effaçable de type disque dur, CDRW, DVDRW, clé USB, carte mémoire,
d'un support définitif comme CD, CDR, DVD, DVDR, CD-AUDIO, etc. Les
premiers vont éventuellement devoir être archivés, les seconds sont à
priori des archives.




Tu peux très bien avoir un disque dur (effacable) partagé en lecure seule
uniquement....

Je ne pense pas qu'il ya ait de solution à ton problème : Un disque réseau
abstrait justement le type de support physique. N'oublie pas qu'un lectuer
réseau, ca peut aussi être un support spécialisé sur un cluster SNA, partagé
par Samba, ou bien un disque virtuel DFS (lui-même composé de plusieurs
disques réseaux disparates aggrégés dans une arborescence logique unique)

Peut-être en cherchant vers DirectX ?



Uhhh???? DirectX, c'est une API pour écrire des jeux (principalement un
accès optimisé à la carte graphique). Je ne vois pas trop le rapport....

Arnaud
MVP - VC
Avatar
Pierre Maurette
Arnaud Debaene, le 01/12/2006 a écrit :
[...]
Tu peux très bien avoir un disque dur (effacable) partagé en lecure seule
uniquement....



C'est bien vrai. De toutes façons, vu ce que je fais quand je connecte
un lecteur réseau, et sans fouiller plus, j'intuitais que ce serait
difficile.

Je ne pense pas qu'il ya ait de solution à ton problème : Un disque réseau
abstrait justement le type de support physique. N'oublie pas qu'un lectuer
réseau, ca peut aussi être un support spécialisé sur un cluster SNA, partagé
par Samba, ou bien un disque virtuel DFS (lui-même composé de plusieurs
disques réseaux disparates aggrégés dans une arborescence logique unique)



Il faut que j'affine l'analyse ergonomique de ce que je veux faire par
rapport au réseau. Ce n'est pas fondamental pour l'instant.

Uhhh???? DirectX, c'est une API pour écrire des jeux (principalement un accès
optimisé à la carte graphique). Je ne vois pas trop le rapport....



Quand je cherchais dans Google le moyen d'éjecter/charger un CD,
j'étais peut-être tombé sur une fonction de DirectX, qui s'occupe il me
semble de "multimedia". Mais j'avais utilisé DeviceIoControl().

--
Pierre Maurette