eject cd avec DeviceIoControl

Le
DarK
Bonjour à tous,

Je m'intéresse au code fournit par msdn qui permet d'ouvrir un lecteur
cd rom avec la fonction DeviceIoControl.
http://support.microsoft.com/kb/165721

Les 2 premiers appels de cette fonction servent à locker le volume
(avec le flag FSCTL_LOCK_VOLUME) et à dismount le volume (avec le flag
FSCTL_DISMOUNT_VOLUME) mais je ne comprends pas très bien.

Quelqu'un pourrait il m'expliquer le sens de ces deux paramètres,
qu'est ce que veut dire "lock the volume" et "dismount the volume"..

Merci
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bertrand
Le #18285311
DarK wrote:
Bonjour à tous,

Je m'intéresse au code fournit par msdn qui permet d'ouvrir un lecteur
cd rom avec la fonction DeviceIoControl.
http://support.microsoft.com/kb/165721

Les 2 premiers appels de cette fonction servent à locker le volume
(avec le flag FSCTL_LOCK_VOLUME) et à dismount le volume (avec le flag
FSCTL_DISMOUNT_VOLUME) mais je ne comprends pas très bien.

Quelqu'un pourrait il m'expliquer le sens de ces deux paramètres,
qu'est ce que veut dire "lock the volume" et "dismount the volume"..



C'est expliqué sur la page :

# Lock the volume by issuing the FSCTL_LOCK_VOLUME IOCTL via
DeviceIoControl.
If any other application or the system is using the volume, this IOCTL
fails.
Once this function returns successfully, the application is guaranteed
that the volume is not used by anything else in the system.

C'et donc pour éviter qu'une appli fasse un autre DeviceIoControl()
simultané


# Dismount the volume by issuing the FSCTL_DISMOUNT_VOLUME IOCTL.
This causes the file system to remove all knowledge of the volume and to
discard any internal information
that it keeps regarding the volume.
et
http://msdn.microsoft.com/en-us/library/aa364562(VS.85).aspx

Ca ré-initialise les variables internes au niveau du driver comme les
compteurs de handles utilisés et cache le volume au niveau de l'OS,
notamment au niveau logique (lettre).....
DarK
Le #18285551
Merci pour ces infos,

Si je peux avoir une dernière précision ca serait sympa.

J'ai du mal à saisir la fonction LockVolume, en faite, si j'ai bien
compris, elle demande au système avec la fonction DeviceIoControl si
aucun autre programme n'utilise le lecteur.
Si c'est le cas la fonction DeviceIoControl renvoi 1 et la fonction
LockVolume renvoi TRUE et le programme continu.

Mais ce que j'ai du mal a comprendre c'est la boucle for, elle
servirait a appeler une deuxième fois la fonction DeviceIoControl au
cas ou elle aurait renvoyé 0 la première fois..? Alors dans ce cas la
fonction LockVolume patiente 5 secondes et recommence sa demande au
system..?
Donc vu que dans cette boucle on limite le nombre de répétition à 2,
si la fonction DeviceIoControl renvoi 0 aux 2 appels alors la fonction
LockVolume renvoi FALSE..?

Est ce que ce que je viens de dire est correct ?
Eric
Le #18285691
"DarK" news:

Mais ce que j'ai du mal a comprendre c'est la boucle for, elle
servirait a appeler une deuxième fois la fonction DeviceIoControl au
cas ou elle aurait renvoyé 0 la première fois..? Alors dans ce cas la
fonction LockVolume patiente 5 secondes et recommence sa demande au
system..?
Donc vu que dans cette boucle on limite le nombre de répétition à 2,
si la fonction DeviceIoControl renvoi 0 aux 2 appels alors la fonction
LockVolume renvoi FALSE..?
Est ce que ce que je viens de dire est correct ?



Non, tu t'es trompé : c'est 20 fois, pas 2.
ça essaie 2 fois par seconde, pour attendre un peu au cas où un autre
programme ferait des opérations disque et aurait locké le lecteur pendant 10
secondes
DarK
Le #18285831
On 3 jan, 15:40, "Eric"
"DarK"
news:

>Mais ce que j'ai du mal a comprendre c'est la boucle for, elle
>servirait a appeler une deuxième fois la fonction DeviceIoControl au
>cas ou elle aurait renvoyé 0 la première fois..? Alors dans ce cas l a
>fonction LockVolume patiente 5 secondes et recommence sa demande au
>system..?
>Donc vu que dans cette boucle on limite le nombre de répétition à 2,
>si la fonction DeviceIoControl renvoi 0 aux 2 appels alors la fonction
>LockVolume renvoi FALSE..?
>Est ce que ce que je viens de dire est correct ?

Non, tu t'es trompé : c'est 20 fois, pas 2.
ça essaie 2 fois par seconde, pour attendre un peu au cas où un autre
programme ferait des opérations disque et aurait locké le lecteur pen dant 10
secondes



LOCK_RETRIES = 20 exact, mais comment sais tu que ça essaie 2 fois par
seconde ?
Eric
Le #18285931
"DarK" news:
On 3 jan, 15:40, "Eric"
Non, tu t'es trompé : c'est 20 fois, pas 2.
ça essaie 2 fois par seconde, pour attendre un peu au cas où un autre
programme ferait des opérations disque et aurait locké le lecteur pendant
10
secondes





LOCK_RETRIES = 20 exact, mais comment sais tu que ça essaie 2 fois par
seconde ?



à cause du Sleep(dwSleepAmount);
(500 ms)
DarK
Le #18285921
Impeccable, merci pour toutes ces informations :)
Publicité
Poster une réponse
Anonyme