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);
}
> 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 coup s. > Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteu r se > bloque (pendant une cinquantaine de seconde ensuite il refait un tour p uis > 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...
Ca fait un moment que j'essaie de répondre mais manifestement le serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça marche !
Maintenant je désirerais faire la manip en sens inverse : données -> CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD semble se graver a une vitesse correcte (1-2X) mais une fois terminé, dans le poste de travail il est toujours indiqué CD vierge !
Comment faire ?
Merci ;)
On 12 déc, 21:02, "jean" <j...@makoun.com> wrote:
"Yoshito" <yoshit...@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 coup s.
> Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteu r se
> bloque (pendant une cinquantaine de seconde ensuite il refait un tour p uis
> 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...
Ca fait un moment que j'essaie de répondre mais manifestement le
serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça
marche !
Maintenant je désirerais faire la manip en sens inverse : données ->
CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD
semble se graver a une vitesse correcte (1-2X) mais une fois terminé,
dans le poste de travail il est toujours indiqué CD vierge !
> 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 coup s. > Pendant les 85 premiers tours aucuns problèmes mais ensuite le lecteu r se > bloque (pendant une cinquantaine de seconde ensuite il refait un tour p uis > 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...
Ca fait un moment que j'essaie de répondre mais manifestement le serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça marche !
Maintenant je désirerais faire la manip en sens inverse : données -> CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD semble se graver a une vitesse correcte (1-2X) mais une fois terminé, dans le poste de travail il est toujours indiqué CD vierge !
Comment faire ?
Merci ;)
Vincent Burel
Pour graver un CD, je pense qu'il faut obligatoirement passer par une librairie spécialisé. par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
VB
wrote in message news: On 12 déc, 21:02, "jean" wrote:
"Yoshito" wrote in message
news:ghpbfj$8eg$
> 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...
Ca fait un moment que j'essaie de répondre mais manifestement le serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça marche !
Maintenant je désirerais faire la manip en sens inverse : données -> CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD semble se graver a une vitesse correcte (1-2X) mais une fois terminé, dans le poste de travail il est toujours indiqué CD vierge !
Comment faire ?
Pour graver un CD, je pense qu'il faut obligatoirement passer par une
librairie spécialisé.
par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
VB
<toutledos@gmail.com> wrote in message
news:42dc963f-5f67-4472-8dc4-dd81c9d86958@g1g2000pra.googlegroups.com...
On 12 déc, 21:02, "jean" <j...@makoun.com> wrote:
"Yoshito" <yoshit...@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...
Ca fait un moment que j'essaie de répondre mais manifestement le
serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça
marche !
Maintenant je désirerais faire la manip en sens inverse : données ->
CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD
semble se graver a une vitesse correcte (1-2X) mais une fois terminé,
dans le poste de travail il est toujours indiqué CD vierge !
Pour graver un CD, je pense qu'il faut obligatoirement passer par une librairie spécialisé. par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
VB
wrote in message news: On 12 déc, 21:02, "jean" wrote:
"Yoshito" wrote in message
news:ghpbfj$8eg$
> 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...
Ca fait un moment que j'essaie de répondre mais manifestement le serveur de news a eu un probleme.
Bref, effectivement le CD était endommagé, car avec d'autres CD, ça marche !
Maintenant je désirerais faire la manip en sens inverse : données -> CD tout en réécrivant secteur par secteur.
J'ai essayé un writefile sur un CD vierge et manifestement le CD semble se graver a une vitesse correcte (1-2X) mais une fois terminé, dans le poste de travail il est toujours indiqué CD vierge !
Comment faire ?
Christian ASTOR
Vincent Burel wrote:
Pour graver un CD, je pense qu'il faut obligatoirement passer par une librairie spécialisé. par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
Oui, avec IDiscMaster::RecordDisc() (ou par SCSI, mais très complexe...)
Un vieil example IMAPI de MS, par fichiers (non-testé) =>
IEnumDiscRecorders *pedr; HRESULT hr = pdm->EnumDiscRecorders(&pedr); if (SUCCEEDED(hr)) { wprintf(L"Finding available drive.n");
ULONG celt; IDiscRecorder *pdr; // pick the first supported drive to write to. hr = pedr->Next(1, &pdr, &celt); if (S_OK == hr) { wprintf(L"Setting active disc recorder.n");
int __cdecl wmain(int argc, WCHAR *argv[]) { if (argc != 2) { wprintf(L"IMAPI demonUsage: %s <directory to burn>nExample: "%sc:files"n", argv[0], argv[0]); } else { if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) { DoBurn(argv[1]);
//================================================================== //detect if the burn operation worked: WIN32_FIND_DATA data; HRESULT hr; HANDLE hFind = FindFirstFile((LPCTSTR)"e:CDBurn.exe", &data); if (hFind == INVALID_HANDLE_VALUE) { printf("RecordDisc did not return error but no files were burned"); hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); //<====it alwayscomeshere } else { FindClose(hFind); hr = S_OK; } //================================================================== CoUninitialize(); } } return 0;
Vincent Burel wrote:
Pour graver un CD, je pense qu'il faut obligatoirement passer par une
librairie spécialisé.
par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
Oui, avec IDiscMaster::RecordDisc()
(ou par SCSI, mais très complexe...)
Un vieil example IMAPI de MS, par fichiers (non-testé) =>
IEnumDiscRecorders *pedr;
HRESULT hr = pdm->EnumDiscRecorders(&pedr);
if (SUCCEEDED(hr))
{
wprintf(L"Finding available drive.n");
ULONG celt;
IDiscRecorder *pdr;
// pick the first supported drive to write to.
hr = pedr->Next(1, &pdr, &celt);
if (S_OK == hr)
{
wprintf(L"Setting active disc recorder.n");
Pour graver un CD, je pense qu'il faut obligatoirement passer par une librairie spécialisé. par exemple avec la CDMAPI (c'est du COM, IID_IDiscMaster).
Oui, avec IDiscMaster::RecordDisc() (ou par SCSI, mais très complexe...)
Un vieil example IMAPI de MS, par fichiers (non-testé) =>
IEnumDiscRecorders *pedr; HRESULT hr = pdm->EnumDiscRecorders(&pedr); if (SUCCEEDED(hr)) { wprintf(L"Finding available drive.n");
ULONG celt; IDiscRecorder *pdr; // pick the first supported drive to write to. hr = pedr->Next(1, &pdr, &celt); if (S_OK == hr) { wprintf(L"Setting active disc recorder.n");
int __cdecl wmain(int argc, WCHAR *argv[]) { if (argc != 2) { wprintf(L"IMAPI demonUsage: %s <directory to burn>nExample: "%sc:files"n", argv[0], argv[0]); } else { if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) { DoBurn(argv[1]);
//================================================================== //detect if the burn operation worked: WIN32_FIND_DATA data; HRESULT hr; HANDLE hFind = FindFirstFile((LPCTSTR)"e:CDBurn.exe", &data); if (hFind == INVALID_HANDLE_VALUE) { printf("RecordDisc did not return error but no files were burned"); hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); //<====it alwayscomeshere } else { FindClose(hFind); hr = S_OK; } //================================================================== CoUninitialize(); } } return 0;
toutledos
Merci.
Pour en revenir à les lectures des secteurs, je viens de trouver un article sur le net, et le code que j'utilise extrait bien des secteurs de 2048 octets.
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord une correction d'erreurs ainsi que quelques autres opérations. Je désirerais avoir EXACTEMENT (donc au bit près) les même données que le CD malgré les erreurs présentes.
D'après la MSDN j'utilise le mode cooked dans mon code et pour faire ce que je voudrais faire il faudrait que j'utilise le mode Raw. Quelqu'un peut confirmer ou m'expliquer ?
merci
Merci.
Pour en revenir à les lectures des secteurs, je viens de trouver un
article sur le net, et le code que j'utilise extrait bien des secteurs
de 2048 octets.
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord
une correction d'erreurs ainsi que quelques autres opérations.
Je désirerais avoir EXACTEMENT (donc au bit près) les même données que
le CD malgré les erreurs présentes.
D'après la MSDN j'utilise le mode cooked dans mon code et pour faire
ce que je voudrais faire il faudrait que j'utilise le mode Raw.
Quelqu'un peut confirmer ou m'expliquer ?
Pour en revenir à les lectures des secteurs, je viens de trouver un article sur le net, et le code que j'utilise extrait bien des secteurs de 2048 octets.
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord une correction d'erreurs ainsi que quelques autres opérations. Je désirerais avoir EXACTEMENT (donc au bit près) les même données que le CD malgré les erreurs présentes.
D'après la MSDN j'utilise le mode cooked dans mon code et pour faire ce que je voudrais faire il faudrait que j'utilise le mode Raw. Quelqu'un peut confirmer ou m'expliquer ?
merci
Michael
wrote in message news:
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord une correction d'erreurs ainsi que quelques autres opérations. Je désirerais avoir EXACTEMENT (donc au bit près) les même données que le CD malgré les erreurs présentes.
Ca doit bien être les octets originaux. Il te suffit de comparer avec un Editeur de Secteur/Disque, tu dois obtenir la même chose.
<toutledos@gmail.com> wrote in message
news:a167817a-b7a9-439b-9fcb-83950fa21767@i20g2000prf.googlegroups.com...
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord
une correction d'erreurs ainsi que quelques autres opérations.
Je désirerais avoir EXACTEMENT (donc au bit près) les même données que
le CD malgré les erreurs présentes.
Ca doit bien être les octets originaux.
Il te suffit de comparer avec un Editeur de Secteur/Disque, tu dois obtenir
la même chose.
Or ce ne sont pas les octets originaux, il semble qu'il y ait d'abord une correction d'erreurs ainsi que quelques autres opérations. Je désirerais avoir EXACTEMENT (donc au bit près) les même données que le CD malgré les erreurs présentes.
Ca doit bien être les octets originaux. Il te suffit de comparer avec un Editeur de Secteur/Disque, tu dois obtenir la même chose.
toutledos
C'est bon, j'ai trouvé la technique pour lire les 2352 octets par blocs.
Sinon pour l'exemple avec IMAPI j'ai un problème, pour avoir la fonction qui copie secteur/secteur c'est dans l'IMAPI v2, or ici c'est la v1.
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas trouvé comment faire. Je pense que c'est cette ligne : CoCreateInstance(CLSID_MSDiscMasterObj, NULL, CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm); qu'il faut changer. Comment faire ?
C'est bon, j'ai trouvé la technique pour lire les 2352 octets par
blocs.
Sinon pour l'exemple avec IMAPI j'ai un problème, pour avoir la
fonction qui copie secteur/secteur c'est dans l'IMAPI v2, or ici c'est
la v1.
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas
trouvé comment faire.
Je pense que c'est cette ligne :
CoCreateInstance(CLSID_MSDiscMasterObj, NULL,
CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm);
qu'il faut changer. Comment faire ?
C'est bon, j'ai trouvé la technique pour lire les 2352 octets par blocs.
Sinon pour l'exemple avec IMAPI j'ai un problème, pour avoir la fonction qui copie secteur/secteur c'est dans l'IMAPI v2, or ici c'est la v1.
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas trouvé comment faire. Je pense que c'est cette ligne : CoCreateInstance(CLSID_MSDiscMasterObj, NULL, CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm); qu'il faut changer. Comment faire ?
Michael
wrote in message news:
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas trouvé comment faire. Je pense que c'est cette ligne : CoCreateInstance(CLSID_MSDiscMasterObj, NULL, CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm); qu'il faut changer. Comment faire ?
Tu choisis juste l'interface que tu veux utiliser. genre IDiscMaster2 et les bons uuid pour le CoCreateInstance, comme écrit dans la doc Msdn.
<toutledos@gmail.com> wrote in message
news:a0270f38-1558-45ee-8e07-96dd3d650ecf@y1g2000pra.googlegroups.com...
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas
trouvé comment faire.
Je pense que c'est cette ligne :
CoCreateInstance(CLSID_MSDiscMasterObj, NULL,
CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm);
qu'il faut changer. Comment faire ?
Tu choisis juste l'interface que tu veux utiliser.
genre IDiscMaster2 et les bons uuid pour le CoCreateInstance, comme écrit
dans la doc Msdn.
Il faudrait donc initialiser la v2 plutot que la v1 or je n'ai pas trouvé comment faire. Je pense que c'est cette ligne : CoCreateInstance(CLSID_MSDiscMasterObj, NULL, CLSCTX_ALL,IID_IDiscMaster, (void**)&pdm); qu'il faut changer. Comment faire ?
Tu choisis juste l'interface que tu veux utiliser. genre IDiscMaster2 et les bons uuid pour le CoCreateInstance, comme écrit dans la doc Msdn.
Pourtant j'ai gardé les mêmes headers que dans l'exemple !
Ben justement, il faut changer si c'est IMAPI 2
#include <imapi2.h>
toutledos
On 28 déc, 20:32, Christian ASTOR wrote:
wrote: > C'est bien ce que j'ai fait :
> IWriteEngine2 *pdm; > Pourtant j'ai gardé les mêmes headers que dans l'exemple !
Ben justement, il faut changer si c'est IMAPI 2
#include <imapi2.h>
D'accord c'est fait, j'avance à petit pas.
J'ai encore un problème : je ne trouve pas la fonction qui permet de selectionner le lecteur que l'on veut, j'ai trouvé par contre celle qui permet de les énumérer. Comment faire ?
On 28 déc, 20:32, Christian ASTOR <casto...@club-internet.fr> wrote:
toutle...@gmail.com wrote:
> C'est bien ce que j'ai fait :
> IWriteEngine2 *pdm;
> Pourtant j'ai gardé les mêmes headers que dans l'exemple !
Ben justement, il faut changer si c'est IMAPI 2
#include <imapi2.h>
D'accord c'est fait, j'avance à petit pas.
J'ai encore un problème : je ne trouve pas la fonction qui permet de
selectionner le lecteur que l'on veut, j'ai trouvé par contre celle
qui permet de les énumérer.
Comment faire ?
> IWriteEngine2 *pdm; > Pourtant j'ai gardé les mêmes headers que dans l'exemple !
Ben justement, il faut changer si c'est IMAPI 2
#include <imapi2.h>
D'accord c'est fait, j'avance à petit pas.
J'ai encore un problème : je ne trouve pas la fonction qui permet de selectionner le lecteur que l'on veut, j'ai trouvé par contre celle qui permet de les énumérer. Comment faire ?