Je cherche à lire les secteurs d'un CD : on m'a dit de venir ici car
apparement vous êtes les meilleurs.
J'ai utilisé la fonction createfile puis deviceiocontrol, jusqu'ici aucuns
problèmes, j'ai pu récupérer la géométrie du CD.
C'est après que ça se corse, j'utilise ReadFile, ça ne marche pas, et
j'obtiens en permanence l'erreur 87 avec getlasterror, erreur qui dit qu'un
des paramètres est incorrect.
if(cdrom == INVALID_HANDLE_VALUE) // cannot open the drive
{
MessageBox(NULL, "Le lecteur que vous avez indiqué est impossible à
ouvrir pour une raison absolument inconnue :p\nVous avez sans doute mal tapé
la lettre du lecteur.", "Erreur d'ouverture", MB_ICONEXCLAMATION);
return (FALSE);
}
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
"Christian ASTOR" a écrit dans le message de news:493ab7e6$1$28677$
Yoshito wrote:
Je cherche à lire les secteurs d'un CD
La KB138434 marche très bien chez moi (XP SP2)...
Ah effectivement, j'essaie merci.
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas
ce que c'est, je suis allé voir sur wikipédia
(http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend
mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce
que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur
exacte imprimée sur le cd sur chaque secteur ?
"Christian ASTOR" <castorix@club-internet.fr> a écrit dans le message de
news:493ab7e6$1$28677$7a628cd7@news.club-internet.fr...
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
"Christian ASTOR" a écrit dans le message de news:493ab7e6$1$28677$
Yoshito wrote:
Je cherche à lire les secteurs d'un CD
La KB138434 marche très bien chez moi (XP SP2)...
Christian ASTOR
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant
pas ce que c'est, je suis allé voir sur wikipédia
(http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je
comprend mal ce mode mais surtout je vois que le mode alternatif est le
mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur
exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le
secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Yoshito
Merci, cela marche.
J'ai par contre un autre problème dont je ne comprend pas l'origine, j'ai fait une boucle avec la fonction ReadFile dedans, au premier de boucle, aucun problèmes (on entend bien le CD tourner et remplir le buffer) et dès le 2eme tour, on sent le CD qui ne veut plus tourner et ça fini par une erreur O/I du périph.
A quoi celà est-il due ? Faut-il laisser un temps d'arrêts entre la lecture de 2 blocs ?
"Christian ASTOR" a écrit dans le message de news:493bae93$0$28676$
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Merci, cela marche.
J'ai par contre un autre problème dont je ne comprend pas l'origine, j'ai
fait une boucle avec la fonction ReadFile dedans, au premier de boucle,
aucun problèmes (on entend bien le CD tourner et remplir le buffer) et dès
le 2eme tour, on sent le CD qui ne veut plus tourner et ça fini par une
erreur O/I du périph.
A quoi celà est-il due ? Faut-il laisser un temps d'arrêts entre la lecture
de 2 blocs ?
"Christian ASTOR" <castorix@club-internet.fr> a écrit dans le message de
news:493bae93$0$28676$7a628cd7@news.club-internet.fr...
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant
pas ce que c'est, je suis allé voir sur wikipédia
(http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je
comprend mal ce mode mais surtout je vois que le mode alternatif est le
mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur
exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le
secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
J'ai par contre un autre problème dont je ne comprend pas l'origine, j'ai fait une boucle avec la fonction ReadFile dedans, au premier de boucle, aucun problèmes (on entend bien le CD tourner et remplir le buffer) et dès le 2eme tour, on sent le CD qui ne veut plus tourner et ça fini par une erreur O/I du périph.
A quoi celà est-il due ? Faut-il laisser un temps d'arrêts entre la lecture de 2 blocs ?
"Christian ASTOR" a écrit dans le message de news:493bae93$0$28676$
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Yoshito
Je viens de faire la technique. Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès le deuxième le lecteur semble ne plus vouloir tourner, la diode d'occupation reste longtemps allumée sans que le cd tourne puis ca finit par une erreur I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
"Christian ASTOR" a écrit dans le message de news:493bae93$0$28676$
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Je viens de faire la technique.
Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès le
deuxième le lecteur semble ne plus vouloir tourner, la diode d'occupation
reste longtemps allumée sans que le cd tourne puis ca finit par une erreur
I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
"Christian ASTOR" <castorix@club-internet.fr> a écrit dans le message de
news:493bae93$0$28676$7a628cd7@news.club-internet.fr...
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant
pas ce que c'est, je suis allé voir sur wikipédia
(http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je
comprend mal ce mode mais surtout je vois que le mode alternatif est le
mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur
exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le
secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Je viens de faire la technique. Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès le deuxième le lecteur semble ne plus vouloir tourner, la diode d'occupation reste longtemps allumée sans que le cd tourne puis ca finit par une erreur I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
"Christian ASTOR" a écrit dans le message de news:493bae93$0$28676$
Yoshito wrote:
Par contre apparement, la manoeuvre se fait en mode cooked. Ne sachant pas ce que c'est, je suis allé voir sur wikipédia (http://en.wikipedia.org/wiki/Cooked_mode) et je dois avouer que je comprend mal ce mode mais surtout je vois que le mode alternatif est le mode raw (ce que je voulais faire à la base).
Est-ce que le mode cooked me permettra quand meme de récupérer la valeur exacte imprimée sur le cd sur chaque secteur ?
Oui, si on lance l'exemple, on obtient bien la signature CD001 sur le secteur 16 et les mêmes données qu'avec un éditeur Hexa comme Hex Workshop
Fred
Yoshito wrote:
Je viens de faire la technique. Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès le deuxième le lecteur semble ne plus vouloir tourner, la diode d'occupation reste longtemps allumée sans que le cd tourne puis ca finit par une erreur I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
tu as dû te planter dans ton code. j'ai modifié l'exemple pour lire des centaines de secteurs et ça marche sans problème.
Yoshito wrote:
Je viens de faire la technique.
Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès
le deuxième le lecteur semble ne plus vouloir tourner, la diode
d'occupation reste longtemps allumée sans que le cd tourne puis ca finit
par une erreur I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
tu as dû te planter dans ton code.
j'ai modifié l'exemple pour lire des centaines de secteurs et ça marche
sans problème.
Je viens de faire la technique. Je recupère les infos par paquets de 1mo, au premier méga ça va mais dès le deuxième le lecteur semble ne plus vouloir tourner, la diode d'occupation reste longtemps allumée sans que le cd tourne puis ca finit par une erreur I/O de périph :(
Pourquoi ? J'utilise mal la fonction ??
tu as dû te planter dans ton code. j'ai modifié l'exemple pour lire des centaines de secteurs et ça marche sans problème.
Yoshito
Ah bon ?
Voici le code pourtant qui est presque comme l'exemple :
if(cdrom == INVALID_HANDLE_VALUE) // cannot open the drive { printf("Le lecteur que vous avez indiqué est impossible à ouvrir pour une raison absolument inconnue :pnVous avez sans doute mal tapé la lettre du lecteur."); GoOut(0); }
if(fichierCDC == INVALID_HANDLE_VALUE) { printf("Impossible de créer le fichier.n"); GoOut(1); }
if(cdrom == INVALID_HANDLE_VALUE) // cannot open the drive
{
printf("Le lecteur que vous avez indiqué est impossible à ouvrir
pour une raison absolument inconnue :pnVous avez sans doute mal tapé la
lettre du lecteur.");
GoOut(0);
}
if(fichierCDC == INVALID_HANDLE_VALUE)
{
printf("Impossible de créer le fichier.n");
GoOut(1);
}
if(cdrom == INVALID_HANDLE_VALUE) // cannot open the drive { printf("Le lecteur que vous avez indiqué est impossible à ouvrir pour une raison absolument inconnue :pnVous avez sans doute mal tapé la lettre du lecteur."); GoOut(0); }
if(fichierCDC == INVALID_HANDLE_VALUE) { printf("Impossible de créer le fichier.n"); GoOut(1); }
Voici le code pourtant qui est presque comme l'exemple :
euh, presque ? ce n'est pas vraiment le même code BytesPerSector n'est pas pris en compte par exemple il faut toujours repartir des exemples de Microsoft et les modifier
Yoshito wrote:
Ah bon ?
Voici le code pourtant qui est presque comme l'exemple :
euh, presque ? ce n'est pas vraiment le même code
BytesPerSector n'est pas pris en compte par exemple
il faut toujours repartir des exemples de Microsoft et les modifier
Voici le code pourtant qui est presque comme l'exemple :
euh, presque ? ce n'est pas vraiment le même code BytesPerSector n'est pas pris en compte par exemple il faut toujours repartir des exemples de Microsoft et les modifier
Yoshito
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups. Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis se rebloque, etc...) et quand je change la taille du buffer, exactement pareil. Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Voici le code, dites moi avis d'experts :
#include <windows.h> #include <winioctl.h> // From the Win32 SDK MstoolsInclude #include "ntddcdrm.h" // From the Windows NT DDK DdkSrcStorageInc
int main() { HANDLE cdrom, fichierCDC; DWORD dwNotUsed; BOOL resultat; DISK_GEOMETRY dgCDROM; PREVENT_MEDIA_REMOVAL pmrLockCDROM; LPBYTE lpSector; DWORD dwSize; int i=0;
// Disk file that will hold the CD-ROM sector data. fichierCDC = CreateFile (EMPLACEMENT_FICHIER_CDC,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
// For the purposes of this sample, drive F: is the CD-ROM // drive. cdrom = CreateFile (EMPLACEMENT_CDROM, GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(cdrom == INVALID_HANDLE_VALUE) { goOut(2, "Impossible de charger le CD."); }
// Lock the compact disc in the CD-ROM drive to prevent accidental // removal while reading from it. pmrLockCDROM.PreventMediaRemoval = FALSE; resultat = DeviceIoControl (cdrom, IOCTL_CDROM_MEDIA_REMOVAL, &pmrLockCDROM, sizeof(pmrLockCDROM), NULL,0, &dwNotUsed, NULL);
if(!resultat) { goOut(3, "Impossible de protéger le CD."); }
// Get sector size of compact disc resultat = DeviceIoControl(cdrom, IOCTL_CDROM_GET_DRIVE_GEOMETRY, NULL, 0, &dgCDROM, sizeof(dgCDROM),&dwNotUsed, NULL);
if(!resultat) { goOut(4, "Impossible d'obtenir la géométrie du disque."); }
// Allocate buffer to hold sectors from compact disc. Note that // the buffer will be allocated on a sector boundary because the // allocation granularity is larger than the size of a sector on a // compact disk.
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups.
Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se
bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis
se rebloque, etc...) et quand je change la taille du buffer, exactement
pareil.
Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Voici le code, dites moi avis d'experts :
#include <windows.h>
#include <winioctl.h> // From the Win32 SDK MstoolsInclude
#include "ntddcdrm.h" // From the Windows NT DDK DdkSrcStorageInc
int main()
{
HANDLE cdrom, fichierCDC;
DWORD dwNotUsed;
BOOL resultat;
DISK_GEOMETRY dgCDROM;
PREVENT_MEDIA_REMOVAL pmrLockCDROM;
LPBYTE lpSector;
DWORD dwSize;
int i=0;
// Disk file that will hold the CD-ROM sector data.
fichierCDC = CreateFile (EMPLACEMENT_FICHIER_CDC,GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
// For the purposes of this sample, drive F: is the CD-ROM
// drive.
cdrom = CreateFile (EMPLACEMENT_CDROM,
GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if(cdrom == INVALID_HANDLE_VALUE)
{
goOut(2, "Impossible de charger le CD.");
}
// Lock the compact disc in the CD-ROM drive to prevent accidental
// removal while reading from it.
pmrLockCDROM.PreventMediaRemoval = FALSE;
resultat = DeviceIoControl (cdrom, IOCTL_CDROM_MEDIA_REMOVAL,
&pmrLockCDROM, sizeof(pmrLockCDROM), NULL,0, &dwNotUsed, NULL);
if(!resultat)
{
goOut(3, "Impossible de protéger le CD.");
}
// Get sector size of compact disc
resultat = DeviceIoControl(cdrom, IOCTL_CDROM_GET_DRIVE_GEOMETRY, NULL,
0, &dgCDROM, sizeof(dgCDROM),&dwNotUsed, NULL);
if(!resultat)
{
goOut(4, "Impossible d'obtenir la géométrie du disque.");
}
// Allocate buffer to hold sectors from compact disc. Note that
// the buffer will be allocated on a sector boundary because the
// allocation granularity is larger than the size of a sector on a
// compact disk.
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups. Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis se rebloque, etc...) et quand je change la taille du buffer, exactement pareil. Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Voici le code, dites moi avis d'experts :
#include <windows.h> #include <winioctl.h> // From the Win32 SDK MstoolsInclude #include "ntddcdrm.h" // From the Windows NT DDK DdkSrcStorageInc
int main() { HANDLE cdrom, fichierCDC; DWORD dwNotUsed; BOOL resultat; DISK_GEOMETRY dgCDROM; PREVENT_MEDIA_REMOVAL pmrLockCDROM; LPBYTE lpSector; DWORD dwSize; int i=0;
// Disk file that will hold the CD-ROM sector data. fichierCDC = CreateFile (EMPLACEMENT_FICHIER_CDC,GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
// For the purposes of this sample, drive F: is the CD-ROM // drive. cdrom = CreateFile (EMPLACEMENT_CDROM, GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(cdrom == INVALID_HANDLE_VALUE) { goOut(2, "Impossible de charger le CD."); }
// Lock the compact disc in the CD-ROM drive to prevent accidental // removal while reading from it. pmrLockCDROM.PreventMediaRemoval = FALSE; resultat = DeviceIoControl (cdrom, IOCTL_CDROM_MEDIA_REMOVAL, &pmrLockCDROM, sizeof(pmrLockCDROM), NULL,0, &dwNotUsed, NULL);
if(!resultat) { goOut(3, "Impossible de protéger le CD."); }
// Get sector size of compact disc resultat = DeviceIoControl(cdrom, IOCTL_CDROM_GET_DRIVE_GEOMETRY, NULL, 0, &dgCDROM, sizeof(dgCDROM),&dwNotUsed, NULL);
if(!resultat) { goOut(4, "Impossible d'obtenir la géométrie du disque."); }
// Allocate buffer to hold sectors from compact disc. Note that // the buffer will be allocated on a sector boundary because the // allocation granularity is larger than the size of a sector on a // compact disk.
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups. Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis se rebloque, etc...) et quand je change la taille du buffer, exactement pareil. Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Ton CD doit avoir une particularité ou un problème. Je viens de tester avec plusieurs CD de données ou même des DVD, ça passe sans problème...
"Yoshito" <yoshitu56@yahoo.fr> wrote in message
news:ghpbfj$8eg$1@aioe.org...
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups.
Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se
bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis
se rebloque, etc...) et quand je change la taille du buffer, exactement
pareil.
Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Ton CD doit avoir une particularité ou un problème.
Je viens de tester avec plusieurs CD de données ou même des DVD, ça passe
sans problème...
Je suis donc repartit d'un exemple de microsoft pour le modifier.
Je fais une boucle qui récupère 1000 blocs de 10 secteurs d'un coups. Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteur se bloque (pendant une cinquantaine de seconde ensuite il refait un tour puis se rebloque, etc...) et quand je change la taille du buffer, exactement pareil. Comme si le lecteur empechait de récupérer + de quelques mégas d'un coup.
Ton CD doit avoir une particularité ou un problème. Je viens de tester avec plusieurs CD de données ou même des DVD, ça passe sans problème...