StarBurn SDK (Software Development Kit)
ContentsIndexHome
Example

This example allocates CdvdBurnerGrabber object, creates and destroys UDF tree 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;
CDB_FAILURE_INFORMATION l__CDB_FAILURE_INFORMATION;
UDF_TREE_ITEM l__UDF_TREE_ITEM__Directory[ 10 ];
UDF_CONTROL_BLOCK l__UDF_CONTROL_BLOCK;

unsigned char g__UCHAR__FileSystemHead[ ( UDF_HEAD_SIZE_IN_LOGICAL_BLOCKS * UDF_LOGICAL_BLOCK_SIZE_IN_UCHARS ) ];
unsigned char g__UCHAR__FileSystemTail[ ( UDF_TAIL_SIZE_IN_LOGICAL_BLOCKS * UDF_LOGICAL_BLOCK_SIZE_IN_UCHARS ) ];
unsigned char g__UCHAR__FileSystemStructures[ ( 1024 * UDF_LOGICAL_BLOCK_SIZE_IN_UCHARS ) ];

UDF_TREE_ITEM g__UDF_TREE_ITEM__File[ 200 ]; // File[ 0 ] is not used

// 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...
}

// Format VIDEO_TS directory
StarBurn_UDF_FormatTreeItemAsDirectory(
    &l__UDF_TREE_ITEM__Directory[ 2 ],
    ( ++l__ULONG__GUID ),
    "VIDEO_TS",
    &l__UDF_TREE_ITEM__Directory[ 1 ]
    );

// Format file node 1 as file
l__ULONG__SystemError =
StarBurn_UDF_FormatTreeItemAsFile(
    &g__UDF_TREE_ITEM__File[ 1 ],
    ( ++l__ULONG__GUID ),
    "video_ts.ifo",
    "c:\VOB\video_ts.ifo",
    &l__UDF_TREE_ITEM__Directory[ 2 ]
    );

// Handle error case here if l__ULONG__SystemError is not NO_ERROR...

// Create UDF tree with StarBurn_UDF_CreateEx() here
l__EXCEPTION_NUMBER =
StarBurn_UDF_CreateEx(
    ( PUCHAR )( &g__UCHAR__FileSystemHead ),
    sizeof( g__UCHAR__FileSystemHead ),
    ( PUCHAR )( &g__UCHAR__FileSystemTail ),
    sizeof( g__UCHAR__FileSystemTail ),
    ( PUCHAR )( &g__UCHAR__FileSystemStructures ),
    &l__UDF_TREE_ITEM__Directory[ 1 ], // This is ROOT
    &l__UDF_TREE_ITEM__Directory[ 2 ], // This is VIDEO_TS and not ROOT, for VIDEO_TS listing
    &l__UDF_TREE_ITEM__Directory[ 3 ], // This is AUDIO_TS and not ROOT, for AUDIO_TS listing
    &l__UDF_CONTROL_BLOCK,
    ( CHAR * )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__Status,
    "VolumeLabel",
    "PublisherName",
    "ApplicationName",
    2006,   // Year
    10,     // Month
    20,     // Day,
    12,     // Hour
    10,     // Minute
    0,      // Second
    50      // Millisecond
    );

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

// Do something with the UDF tree here (maybe burn to CdvdBurnerGrabber object)

// Clean up UDF stuff with StarBurn_UDF_CleanUp() here

// Destroy UDF tree from the root
StarBurn_UDF_Destroy(
    &l__UDF_TREE_ITEM__Directory[ 0 ],
    &l__UDF_CONTROL_BLOCK
    );

// Destroy the CdvdBurnerGrabber
StarBurn_Destroy( &l__PVOID__CdvdBurnerGrabber );

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