Hi, I'm trying to use IWriteEngine2 of IMAPI2 to write a single sector to a disc at LBA 0. Everything goes fine until the very end - when it's supposed to stop burning, the disc keeps spinning and the device is locked. I can't open the tray without doing a restart. In fact, WriteSection() returns S_OK, indicating that data must've been written, although the medium (CD-RW) remains blank afterwards (checked with hex editor).
Every call to the COM methods returns S_OK (this is what Assert() checks for), see excerpt below.
Code:
CoInitialize(NULL);
IWriteEngine2* writeEngine;
Assert(CoCreateInstance(__uuidof(MsftWriteEngine2), NULL, CLSCTX_ALL,
__uuidof(IWriteEngine2), (void**)&writeEngine));
IDiscRecorder2* discRecorder;
Assert(CoCreateInstance(__uuidof(MsftDiscRecorder2), NULL, CLSCTX_ALL,
__uuidof(IDiscRecorder2), (void**)&discRecorder));
IDiscMaster2* discMaster;
Assert(CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_ALL,
__uuidof(IDiscMaster2), (void**)&discMaster));
BSTR uniqueID;
long numDevices = 0;
Assert(discMaster->get_Count(&numDevices));
for(int i = 0; i < 100; i++)
if(discMaster->get_Item(i, &uniqueID) == S_OK) break;
Assert(discRecorder->InitializeDiscRecorder(uniqueID));
Assert(discRecorder->AcquireExclusiveAccess(VARIANT_TRUE, SysAllocString(L"abcd")));
Assert(writeEngine->put_Recorder((IDiscRecorder2Ex*)discRecorder));
Assert(writeEngine->put_BytesPerSector(2048));
Assert(writeEngine->put_StartingSectorsPerSecond(-1));
Assert(writeEngine->put_EndingSectorsPerSecond(-1));
IStream* patternStream;
patternStream = SHCreateMemStream(pattern, 2048); //pattern is a valid pointer to 2048 bytes of memory
Assert(writeEngine->WriteSection(patternStream, 0, 1)); //after burning this returns S_OK
Assert(discRecorder->ReleaseExclusiveAccess());
I've tried reading the stream, which works fine, so it shouldn't be a problem with IStream. The reason I'm using IWriteEngine2 is that data will be generated "on the fly" and should not be written in the conventional data CD format, but raw.
Let me know of any ideas to fix this. Thanks!