OVH Cloud OVH Cloud

Acces disquette bas niveau

5 réponses
Avatar
Mickael Pointier
Salut.

J'ai un vieux programme DOS qui fait des opérations bas niveau sur des
disquettes (formatage, lecture/écriture de secteurs) en passant par
l'interruption 13h, ce programme ne marche pas sous Windows 2000, donc
j'aimerai le réécrire en Win32 natif.

En faisant le tour dans la MSDN j'ai vu des solutions qui redirigent les
appels vers une DLL 16bit faisant des appels DPMI... yuck :(

Déja je n'ai pas la moindre idée de comment je peux faire pour compiler
une DLL 16 bits... mais bon bref ceci mis à part ca me semble pour le
moins dégueulasse comme méthode.

Donc y'a t'il une façon propre de faire en sorte de pouvoir accéder au
lecteur de disquette sans faire ce genre de truc ?

En l'occurence moi j'ai besoin de formater une disquette 3" ou 5.25" en
42 pistes de 16 secteurs de 256 octets.

Si quelqu'un à une idée...

Merci d'avance.

Mike


--
http://www.defence-force.org

5 réponses

Avatar
Vincent Burel
"Mickael Pointier" wrote in message
news:bo8bsd$glo$
Salut.

J'ai un vieux programme DOS qui fait des opérations bas niveau sur des
disquettes (formatage, lecture/écriture de secteurs) en passant par
l'interruption 13h, ce programme ne marche pas sous Windows 2000, donc
j'aimerai le réécrire en Win32 natif.

En faisant le tour dans la MSDN j'ai vu des solutions qui redirigent les
appels vers une DLL 16bit faisant des appels DPMI... yuck :(

Déja je n'ai pas la moindre idée de comment je peux faire pour compiler
une DLL 16 bits... mais bon bref ceci mis à part ca me semble pour le
moins dégueulasse comme méthode.

Donc y'a t'il une façon propre de faire en sorte de pouvoir accéder au
lecteur de disquette sans faire ce genre de truc ?

En l'occurence moi j'ai besoin de formater une disquette 3" ou 5.25" en
42 pistes de 16 secteurs de 256 octets.

Si quelqu'un à une idée...



oui, une idée :
DeviceIoControl

VB
Avatar
Mickael Pointier
>> Salut.

J'ai un vieux programme DOS qui fait des opérations bas niveau sur
des disquettes (formatage, lecture/écriture de secteurs) en passant
par l'interruption 13h, ce programme ne marche pas sous Windows
2000, donc j'aimerai le réécrire en Win32 natif.

En faisant le tour dans la MSDN j'ai vu des solutions qui redirigent
les appels vers une DLL 16bit faisant des appels DPMI... yuck :(

Déja je n'ai pas la moindre idée de comment je peux faire pour
compiler une DLL 16 bits... mais bon bref ceci mis à part ca me
semble pour le moins dégueulasse comme méthode.

Donc y'a t'il une façon propre de faire en sorte de pouvoir accéder
au lecteur de disquette sans faire ce genre de truc ?

En l'occurence moi j'ai besoin de formater une disquette 3" ou 5.25"
en 42 pistes de 16 secteurs de 256 octets.

Si quelqu'un à une idée...



oui, une idée :
DeviceIoControl



Okay, donc en utilisant le paramètre IOCTL_DISK_GET_DRIVE_GEOMETRY je
récupère le format de la disquette, et avec IOCTL_DISK_FORMAT_TRACKS, je
formate la disquette.

Problème est que si je regarde l'énumération MEDIA_TYPE, les seules
tailles disponibles sont 128, 512 et 1024 bytes/secteur, il n'y a pas
256.

Ensuite pour écrire, a part "IOCTL_DISK_CREATE_DISK" j'ai rien vu qui
permette d'écrire piste par piste.

Arg, pas simple à utiliser tout ca, faut en mettre des tartines de
paramètres.

Mike
Avatar
Vincent Burel
"Mickael Pointier" wrote in message
news:bo8ibv$hqb$
>> Salut.
>>
>> J'ai un vieux programme DOS qui fait des opérations bas niveau sur
>> des disquettes (formatage, lecture/écriture de secteurs) en passant
>> par l'interruption 13h, ce programme ne marche pas sous Windows
>> 2000, donc j'aimerai le réécrire en Win32 natif.
>>
>> En faisant le tour dans la MSDN j'ai vu des solutions qui redirigent
>> les appels vers une DLL 16bit faisant des appels DPMI... yuck :(
>>
>> Déja je n'ai pas la moindre idée de comment je peux faire pour
>> compiler une DLL 16 bits... mais bon bref ceci mis à part ca me
>> semble pour le moins dégueulasse comme méthode.
>>
>> Donc y'a t'il une façon propre de faire en sorte de pouvoir accéder
>> au lecteur de disquette sans faire ce genre de truc ?
>>
>> En l'occurence moi j'ai besoin de formater une disquette 3" ou 5.25"
>> en 42 pistes de 16 secteurs de 256 octets.
>>
>> Si quelqu'un à une idée...
>
> oui, une idée :
> DeviceIoControl

Okay, donc en utilisant le paramètre IOCTL_DISK_GET_DRIVE_GEOMETRY je
récupère le format de la disquette, et avec IOCTL_DISK_FORMAT_TRACKS, je
formate la disquette.

Problème est que si je regarde l'énumération MEDIA_TYPE, les seules
tailles disponibles sont 128, 512 et 1024 bytes/secteur, il n'y a pas
256.

Ensuite pour écrire, a part "IOCTL_DISK_CREATE_DISK" j'ai rien vu qui
permette d'écrire piste par piste.

Arg, pas simple à utiliser tout ca, faut en mettre des tartines de
paramètres.



ben y'a IOCTL_DISK_FORMAT_TRACKS pour formater une piste.

VB
Avatar
Mickael Pointier
>> [...]
récupère le format de la disquette, et avec
IOCTL_DISK_FORMAT_TRACKS, je formate la disquette.
[...]



ben y'a IOCTL_DISK_FORMAT_TRACKS pour formater une piste.



Oui oui, c'est bien ce que j'avais écrit :)
Ou bien tu voulais dire autre chose ?

Mike
Avatar
Vincent Burel
"Mickael Pointier" wrote in message
news:boacch$p2n$
>> [...]
>> récupère le format de la disquette, et avec
>> IOCTL_DISK_FORMAT_TRACKS, je formate la disquette.
>> [...]
>
> ben y'a IOCTL_DISK_FORMAT_TRACKS pour formater une piste.

Oui oui, c'est bien ce que j'avais écrit :)
Ou bien tu voulais dire autre chose ?



ha non, je n'ai pas du tout imprimé :-)
Sorry
VB