Mike - 2007-09-18

I have downloaded and compiled v0.7.0 and after compiling I received the following error when trying to burn a CD-R (on an LG 48x24x48x):

"index was outside the bounds of the array" from the CLR debugger.

The culprit seems to be "m_page_data" within Scsi.ModePage.ModeGet16. The array size, calculated by Scsi.Device.ModeSense, was 26. There is a hardcoded value of 28 passed to ModeGet16 of 28. Changing the value passed to ModeGet16 to 24 prevents this error from occurring.

The value I changed is in Burner.Drive.SetSpeed and was listed as "int speedvalue = pg.ModeGet16(28);".

I am not sure that changing this value to 24 is the proper thing to do, but it does fix the problem.

After fixing the problem and attempting a burn using CreateDataDisk.exe, I end up with no contents on the CD after the burn completes. The burn, from CreateDataDisk's point of view, looks to complete OK.

Interestingly, I noticed a posting to do with DVD's that appears to have the same symptoms as mine (see "Problem reading DVD after CreateDataDisk"). And also a mention that the problem was fixed in 0.6.4.

Based on some code you had added to the "UsingTheBurnerClasses.txt" file and after editing it a little I found that using this small application that the burn proceeds without error and that CD does contain what it is supposed to. Incidentally, this test code had the same error as did CreateDataDisk before I changed the value to 24.

Hoping that this info helps in some small way.

The working version of this code is as follows:

            ulong byteCount;

            // Create a logger (Bwg.Logging.Logger)
            Logger l = new Logger();
            ConsoleSink s = new ConsoleSink();
            l.SetSink(UserMessage.Category.Error, s);
            l.SetSink(UserMessage.Category.Warning, s);
            l.SetSink(UserMessage.Category.Info, s);
            l.SetSink(UserMessage.Category.Debug, s);
            l.SetLevel(UserMessage.Category.Debug, 9);

            // Create a device (Bwg.Scsi.Device)
            Device dev = new Device(l);

            // Create a drive (Bwg.Burner.Drive)
            Drive drv = new Drive(dev);

            DiskBurnOptions dbOpt;

            // Create a disk burn image (Bwg.Burner.DiskBurnImage)
            DiskBurnImage image = new DiskBurnImage(l);

            // Create the object that captures the contents of the disk (Bwg.Isofs.DiskImageContents)
            DiskImageContents contents = new DiskImageContents(l);
            contents.Add("/files", "C:\\Documents and Settings\\Mike Bluett\\My Documents\\My Pictures\\Art");

            // Create the ISO/UDF image creator
            DiskImageCreator creator = new DiskImageCreator(l, contents);

            // Create the output stream for the ISO image that acts as a track data source
            // (Bwg.CreateDataDisk.ImageGeneratorSource)
            ImageGeneratorSource src = new ImageGeneratorSource(creator);

            // Add a track to the disk
            TrackBurnImage track = new TrackBurnImage(TrackBurnImage.TrackType.Data_Mode_1, src);

            dbOpt = drv.GetDefaultBurnOptions();

            // Burn the disk image
            drv.BurnDisk(dbOpt, image, out byteCount);