Lecture secteur CDROM en mode RAW [Résolu]

Signaler
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
-
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
-
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

5 réponses

Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
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
Messages postés
14688
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 août 2020
144
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
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
20
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 ?
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
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
Messages postés
14688
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 août 2020
144
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