Bonjour à tous !
J'ai un petit souci en voulant utiliser la fonction DeviceIOControl pour lire les premiers secteurs d'un cd-rom : après des semaines de recherches sur le net (la MSDN est très peu fournie pour ce cas précis), d'expérimentations et de prise de tête, je n'arrive toujours pas à le faire ...
Voici le code :
J'ai testé toutes les combinaisons possibles :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 char Fn[8] = { '\\', '\\', '.', '\\', 'E', ':', '\0' }; HANDLE hCD; DWORD Dummy; RAW_READ_INFO ReadInfo; unsigned char pBuf[2352] = ""; DWORD dwError=0; DWORD dwBytesRet = 0; hCD = CreateFile( Fn, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if ( !DeviceIoControl( hCD, IOCTL_STORAGE_CHECK_VERIFY, NULL, 0, NULL, 0, &Dummy, NULL) ) { MessageBox(NULL,"Drive E:\\ isn't accessible",NULL,MB_OK); }else{ ReadInfo.TrackMode = XAForm2; ReadInfo.SectorCount = 1; ReadInfo.DiskOffset.QuadPart = 0*2048; // 2048 est obligatoire quelquesoit le format, lecture du tout premier secteur if ( !DeviceIoControl( hCD, IOCTL_CDROM_RAW_READ, &ReadInfo, sizeof(ReadInfo), &pBuf, 2352, // OutputBufferLength : 2352 donne erreur 1 (incorrect function), 2048 donne erreur 87 (invalid parameter) &Dummy, NULL ) ) { dwError = GetLastError(); } }
- YellowMode2 ou XAForm2 pour le TrackMode
- 2048 ou 2352 pour la taille du secteur à récupérer (et du buffer).
Mais la fonction ne s'exécute jamais et renvoie toujours une erreur. Dans le cas de l'exemple posté au dessus (OutputBufferLength = 2352), il y a bien un accès au lecteur, mais l'erreur 1 (incorrect function) est retournée.
Dans le cas où OutputBufferLength = 2048, il n'y a pas d'accès au lecteur, et l'erreur 87 (invalid parameter) est retournée.
Là où je ne comprends pas vraiment, c'est que si je cherche à lire des données audio (TrackMode = CDDA), ça fonctionne ...
Si une âme charitable pouvait m'éclairer sur le non fonctionnement de ce code, et m'aider à le faire marcher, je lui en serais très reconnaissant
Je n'ai jamais eu de problème avec l'ASPI, mais là ça commence à m'ennuyer sérieusement, je n'aime pas qu'on me résiste
Merci de m'avoir lu !
Partager