[CDFS] Use IOCTL_CDROM_READ_TOC instead of IOCTL_CDROM_GET_LAST_SESSION, which is not always available

svn path=/trunk/; revision=64106
This commit is contained in:
Hervé Poussineau 2014-09-10 16:02:02 +00:00
parent 37ff67c8fc
commit fa4b180304

View file

@ -201,14 +201,7 @@ CdfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
ULONG Size; ULONG Size;
ULONG Offset; ULONG Offset;
ULONG i; ULONG i;
struct CDROM_TOC Toc;
{
UCHAR Length[2];
UCHAR FirstSession;
UCHAR LastSession;
TRACK_DATA TrackData;
}
Toc;
DPRINT("CdfsGetVolumeData\n"); DPRINT("CdfsGetVolumeData\n");
@ -219,7 +212,7 @@ CdfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
Size = sizeof(Toc); Size = sizeof(Toc);
Status = CdfsDeviceIoControl(DeviceObject, Status = CdfsDeviceIoControl(DeviceObject,
IOCTL_CDROM_GET_LAST_SESSION, IOCTL_CDROM_READ_TOC,
NULL, NULL,
0, 0,
&Toc, &Toc,
@ -231,13 +224,13 @@ CdfsGetVolumeData(PDEVICE_OBJECT DeviceObject,
return Status; return Status;
} }
DPRINT("FirstSession %u, LastSession %u, FirstTrack %u\n", DPRINT("FirstTrack %u, LastTrack %u, TrackNumber %u\n",
Toc.FirstSession, Toc.LastSession, Toc.TrackData.TrackNumber); Toc.FirstTrack, Toc.LastTrack, Toc.TrackData[0].TrackNumber);
Offset = 0; Offset = 0;
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
Offset = (Offset << 8) + Toc.TrackData.Address[i]; Offset = (Offset << 8) + Toc.TrackData[0].Address[i];
} }
CdInfo->VolumeOffset = Offset; CdInfo->VolumeOffset = Offset;