StarBurn SDK (Software Development Kit)
ContentsIndexHome
PreviousUpNext
StarBurn_CdvdBurnerGrabber_GrabRange Function
C++
__stdcall STARBURN_IMPEX_API EXCEPTION_NUMBER StarBurn_CdvdBurnerGrabber_GrabRange(IN PVOID p__PVOID__CdvdBurnerGrabber, OUT PCHAR p__PCHAR__ExceptionText, IN ULONG p__ULONG__ExceptionTextSizeInUCHARs, OUT PULONG p__PULONG__SystemError, OUT PCDB_FAILURE_INFORMATION p__PCDB_FAILURE_INFORMATION, IN LONG p__LONG__StartingLBA, IN LONG p__LONG__EndingLBA, IN PCHAR p__PCHAR__FileName, IN LONG p__LONG__Retries, IN BOOLEAN p__BOOLEAN__IsBadBlockIgnore, IN BOOLEAN p__BOOLEAN__IsSingleLBTransferForced, IN ULONG p__ULONG__ReadReportDelayInSeconds);
Parameters 
Description 
IN PVOID p__PVOID__CdvdBurnerGrabber 
Pointer to the CdvdBurnerGrabber object that toolkit allocated before.
 
OUT PCHAR p__PCHAR__ExceptionText 
Pointer to array of CHARs that will be used to store formatted exception description message.
 
IN ULONG p__ULONG__ExceptionTextSizeInUCHARs 
Size of the array of CHARs used to be formatted exception message storage.
 
OUT PULONG p__PULONG__SystemError 
Pointer to ULONG that will contain the system error (if some will occur).
 
OUT PCDB_FAILURE_INFORMATION p__PCDB_FAILURE_INFORMATION 
Pointer to CDB_FAILURE_INFORMATION that will be filled with apropriate values.
 
IN LONG p__LONG__StartingLBA 
Begining of the LBA range to grab.
 
IN LONG p__LONG__EndingLBA 
Ending of the LBA range to grab.
 
IN PCHAR p__PCHAR__FileName 
Pointer to file name track will be stored to.
 
IN LONG p__LONG__Retries 
Number of retries.
 
IN BOOLEAN p__BOOLEAN__IsBadBlockIgnore 
Is bad block ignore.
 
IN BOOLEAN p__BOOLEAN__IsSingleLBTransferForced 
Is single LB transfer forced.
 
IN ULONG p__ULONG__ReadReportDelayInSeconds 
Read report delay in seconds. 

Execution status. EN_SUCCESS if the operation completed successfuly. If the exception number will be EN_SYSTEM_CALL_FAILED, variable that SystemError points to will be filled with system error. If something other then EN_SUCCESS will be returned buffer that ExceptionText will point to will be filled with formatted exception message. If the exception number will be EN_SCSI_CDB_FAILED, CDB_FAILURE_INFORMATION will be filled with apropriate values (CDB that faled, CDB size, SCSI sense data, SCSI sense data size, SCSI transport, device and host adapter status codes).

This function grabs range of logical blocks from the currently inserted disc on CD/DVD/Blu-Ray/HD-DVD burner device.

Please see the GrabTrack sample that will demonstrate how ISO9660 or Joliet file system image can be grabbed from the CD/DVD/Blu-Ray/HD-DVD media and how StarBurn_CdvdBurnerGrabber_GrabTrack can be used to grab track actually from the CD/DVD/Blu-Ray/HD-DVD media. To grab not whole track but just range of logical blocks TOC must be get first by call to StarBurn_CdvdBurnerGrabber_GetTOCInformation and after this StarBurn_CdvdBurnerGrabber_GrabRange can be used to grab range of logical blocks. Attention! Care shuld be taken b/s the range is inclusive. So grabbing the range 10 - 100 will take 91 logical blocks from 10 and up to 100.

This example allocates CdvdBurnerGrabber object, grabs range of logical blocks track and destroys the device object after it's not needed any more. 

 

// Somewhere in the data region
PVOID l__PVOID__CdvdBurnerGrabber;
EXCEPTION_NUMBER l__EXCEPTION_NUMBER;
ULONG l__ULONG__SystemError;
CHAR l__CHAR__ExceptionText[ 1024 ];
CDB_FAILURE_INFORMATION l__CDB_FAILURE_INFORMATION;
TOC_INFORMATION l__TOC_INFORMATION;

// Prepare exception text buffer
RtlZeroMemory(
    &l__CHAR__ExceptionText,
    sizeof( l__CHAR__ExceptionText )
    );

// Prepare CDB failure information
RtlZeroMemory(
    &l__CDB_FAILURE_INFORMATION,
    sizeof( l__CDB_FAILURE_INFORMATION )
    );

// Try to create CdvdBurnerGrabber on 0:0:4:0 with 32MB of cache
l__EXCEPTION_NUMBER =
StarBurn_CdvdBurnerGrabber_Create(
    &l__PVOID__CdvdBurnerGrabber,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__SystemError,
    &l__CDB_FAILURE_INFORMATION,
    ( PCALLBACK )( StarBurn_Callback ),
    0,
    0,
    4,
    0,
    32
    );

// Check for correct reply
if (  l__EXCEPTION_NUMBER != EN_SUCCESS )
{
// Handle error here...
}

// Prepare TOC information buffer
RtlZeroMemory(
    &l__TOC_INFORMATION,
    sizeof( l__TOC_INFORMATION )
    );

// Get TOC information here and analyze it...

// Try to grab the range of 1001 logical blocks (range is both sides inclusive) (from TOC we know that this range 0 = 1000 is 
// valid) with 2 retries and read report status every 1 second
l__EXCEPTION_NUMBER =
StarBurn_CdvdBurnerGrabber_GrabRange(
    l__PVOID__CdvdBurnerGrabber,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__SystemError,
    &l__CDB_FAILURE_INFORMATION,
    0,
    1000,
    "track01range",
    NUMBER_OF_READ_RETRIES,
    TRUE,
    FALSE,
    READ_REPORT_DELAY_IN_SECONDS
    );

// Check for correct reply
if (  l__EXCEPTION_NUMBER != EN_SUCCESS )
{
// Handle error here...
}

// Do something with CdvdBurnerGrabber device object and disc information here...       

// Destroy the CdvdBurnerGrabber
StarBurn_Destroy( &l__PVOID__CdvdBurnerGrabber );

// Just check for pointer (paranoid?)
if ( l__PVOID__CdvdBurnerGrabber != NULL )
{
// Handle error here...
}