Fonction pour dvd ou cd

Fonction pour dvd ou cd - API Win32 - Programmation

Marsh Posté le 30-11-2008 à 19:28:47    

Salut
 
Est-ce que vous connaitriez une fonction de la WinAPI pour lire précisemment l'octet d'un DVD ou d'un CD ?
Si ça n'existe pas, connaissez vous une bibli qui pourrait faire ce que je veux ?
 
mercii !

Reply

Marsh Posté le 30-11-2008 à 19:28:47   

Reply

Marsh Posté le 01-12-2008 à 09:55:30    

Les fonctions C standard de lecture des fichiers (fopen, fgetc, fread, fclose) fonctionnent à la fois pour les disques durs, et pour les périphériques qui y sont assimilées tels que les DVD, les CD, les clés USB.

Reply

Marsh Posté le 01-12-2008 à 21:20:54    

C'est à dire que je pourrais lire un endroit précis du DVD ?
 
Je ne cherche pas à lire un endroit précis d'un fichier qui se trouver sur un DVD/CD mais bien un emplacement spécifique du DVD/CD en indiquant son adresse par exemple.
Un peu comme si je donnais l'adresse d'une donnée en RAM et que je puisse récupérer la valeur de cette donnée mais avec un DVD/CD.

Reply

Marsh Posté le 02-12-2008 à 17:33:02    

essaie avec ce code source  :
 
http://www.stud.uni-hannover.de/~k [...] .0-src.zip
 
 
en utilisant la fonction CreateFile non pas sur un fichier, mais sur un périphérique (dans l'exemple "\\\\.\\PhysicalDeviceX" ), tu peux accéder aux données RAW de ton périphérique. Par contre, ce n'est pas PhysicalDevice pour les lecteurs CD/DVD.

Reply

Marsh Posté le 06-12-2008 à 18:21:07    

Voici mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <winioctl.h>
  5. #define CD "\\\\.\\e:"
  6. int main()
  7. {
  8.     HANDLE cdrom;
  9.     LPVOID *t;
  10.     BOOL resultat;
  11.     DWORD truc, truc2 = 0;
  12.     DISK_GEOMETRY buff;
  13.     unsigned char i;
  14.     char buffer[256];
  15.     printf("%p",buffer);
  16.     cdrom = CreateFile(CD, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
  17.     if(cdrom == INVALID_HANDLE_VALUE) // cannot open the drive
  18.     {
  19.         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);
  20.         return (FALSE);
  21.     }
  22.     resultat = DeviceIoControl(cdrom, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &buff, sizeof(buff), &truc, NULL);
  23.     if(resultat)
  24.     {
  25.         printf("%s :\n", CD);
  26.         printf("- Cylindres = %ld\n", buff.Cylinders);
  27.         printf("- Pistes/Cylindres = %ld\n", (ULONG) buff.TracksPerCylinder);
  28.         printf("- Secteurs/Pistes = %ld\n", (ULONG) buff.SectorsPerTrack);
  29.         printf("- Octets/Secteurs = %ld\n", (ULONG) buff.BytesPerSector);
  30.         printf("\n" );
  31.     }
  32.     else
  33.     {
  34.         printf("%ld",GetLastError());
  35.         MessageBox(NULL, "La géométrie du disque (têtes, cylindres, etc..) est impossible à obtenir.", "Erreur de lecture", MB_ICONEXCLAMATION);
  36.         return (FALSE);
  37.     }
  38.     resultat = ReadFile(cdrom, &buffer, 253, &truc2, NULL);
  39.     if(resultat)
  40.     {
  41.         printf("%ld bytes lus", truc2);
  42.     }
  43.     else
  44.     {
  45.         printf("Erreur %ld", GetLastError());
  46.     }
  47.     CloseHandle(cdrom);
  48.     return 0;
  49. }


 
Lorsque j'arrive a ReadFile j'ai une erreur obtenue par getlasterror (erreur 87 : paramètre incorrect)
 
Que faire ???

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed