Lecture secteur CDROM en mode RAW [Résolu]

Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
- - Dernière réponse : cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
- 1 juil. 2008 à 06:56
Salut à tous
Je cherche à lire un secteur sur un CDROM en mode RAW ( les 2352 octets)
J'ai le code suivant mais Deviceiocontrol me renvoie une erreur
Je précise que hDevice est bien initialisé ( pas de INVALID_HANDLE_VALUE) ainsi que le tableau de bytes Buffer de réception des octets du secteur
Où est le problème ?

    Public Enum TRACK_MODE_TYPE
        YellowMode2
        XAForm2
        CDDA
    End Enum

    Private Structure RAW_READ_INFO
        Dim diskoffset As Int64
        Dim sectorcount As Int32
        Dim trackmode As Byte
    End Structure

Public Sub CdromReadRaw(ByVal sector As Int32, ByVal nbsector As Int32)

        Dim readinfo As RAW_READ_INFO
        Dim pointerbufferdata As IntPtr, pointerinfo As IntPtr
        Dim ret As Int32, retbytes As Int32, leninfo As Int32

        dskerr = False
        leninfo = Marshal.SizeOf(readinfo)
        With readinfo
            .diskoffset = sector * RAW_SECTOR_SIZE
            .sectorcount = nbsector
            .trackmode = datamode
        End With
        pointerinfo = Marshal.AllocHGlobal(leninfo)
        pointerbufferdata = Marshal.AllocHGlobal(buffer.Length)
        Marshal.StructureToPtr(readinfo, pointerinfo, False)

        ' lecture du secteur
        ret = DeviceIoControl(hDevice, IOCTL_CDROM_RAW_READ, pointerinfo, leninfo, pointerbufferdata, buffer.Length, retbytes, IntPtr.Zero)

        If ret = 1 Then
            Marshal.Copy(pointerbufferdata, buffer, 0, buffer.Length)
        Else
            dskerr = True
        End If
        Marshal.FreeHGlobal(pointerbufferdata)
        Marshal.FreeHGlobal(pointerinfo)

    End Sub

Merci beaucoup pour vos réponses

GRENIER Alain
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
3
Merci
Ne cherchez plus : j'ai trouvé en utilisant le SPTI
Pour la solution voir la source "Acces Direct Disque en VB net"

Merci à tous

GRENIER Alain

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Galain
Messages postés
14594
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2019
137
0
Merci
Bonjour

Va voir cette source, tu auras peut être quelques données en plus :
http://www.vbfrance.com/code.aspx?ID=46012

L'ouverture d'esprit ne se limite pas toujours à une fracture du crâne.
VB (6, .NET1&2), C++, C#.Net1
Mo
Commenter la réponse de NHenry
Messages postés
2377
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
16
0
Merci
Bonjour,
Ce n'est pas du VB.Net mais du C# mais je pense que son contenu d'aidera.
http://www.csharpfr.com/codes/NET2-LECTURE-FICHIER-CDA-EXTRACTION-PISTE-AUDIO-CD_41094.aspx

Pour information, quel code erreur as-tu en retour de DeviceIoControl ?
Commenter la réponse de cs_Willi
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
0
Merci
Salut Willi
Deviceiocontrol ne renvoie 0 en retour et retbytes est = à 0 (ce qui signifie que aucun octet n'a été lu)

Salut NHenry
La source que tu m'as marqué est ma propre source et c'est sur elle que j'ai le problème depuis que j'ai Windows Vista.

Lorsque je fais un "Acces Direct Disque" sur un disque optique (CDROM ou DVDROM) je lis le système de fichiers (UDF pour les DVD vidéo et CDFS pour les CD ou DVD audio et de données)
En CDFS je cherche à lire le secteur 0 en mode Raw pour ensuite déterminer son mode (si le Synchro Pattern "0FFFFFFFFFFFFFFF......" est présent c'est un CD et j'en déduis si CD audio ou de données et si le Synchro Pattern est absent c'est un DVD)
Sous Windows Xp cela fonctionnait mais sous Vista

Merci pour votre aide

GRENIER Alain
Commenter la réponse de cs_Galain
Messages postés
14594
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2019
137
0
Merci
Bonjour

Désolé Galain, j'avais pas fais attention

Désolé (encore une fois), mais cela sort de mes compétences.

L'ouverture d'esprit ne se limite pas toujours à une fracture du crâne.
VB (6, .NET1&2), C++, C#.Net1
Mo
Commenter la réponse de NHenry