Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

eject cd avec DeviceIoControl

6 réponses
Avatar
DarK
Bonjour =E0 tous,

Je m'int=E9resse 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 =E0 locker le volume
(avec le flag FSCTL_LOCK_VOLUME) et =E0 dismount le volume (avec le flag
FSCTL_DISMOUNT_VOLUME) mais je ne comprends pas tr=E8s bien.

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

Merci

6 réponses

Avatar
Bertrand
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).....
Avatar
DarK
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 ?
Avatar
Eric
"DarK" wrote in message
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
Avatar
DarK
On 3 jan, 15:40, "Eric" wrote:
"DarK" wrote in message

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 ?
Avatar
Eric
"DarK" wrote in message
news:
On 3 jan, 15:40, "Eric" wrote:
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)
Avatar
DarK
Impeccable, merci pour toutes ces informations :)