StarBurn SDK (Software Development Kit)
ContentsIndexHome
PreviousUpNext
StarBurn_ISO9660JolietFileTree_SeekToBegin Function
C++
__stdcall STARBURN_IMPEX_API EXCEPTION_NUMBER StarBurn_ISO9660JolietFileTree_SeekToBegin(IN PVOID p__PVOID__ISO9660JolietFileTree, OUT PCHAR p__PCHAR__ExceptionText, IN ULONG p__ULONG__ExceptionTextSizeInUCHARs, OUT PULONG p__PULONG__SystemError);
Parameters 
Description 
IN PVOID p__PVOID__ISO9660JolietFileTree 
Pointer to the ISO9660 or Joliet file tree object that toolkit allocated during call to StarBurn_ISO9660FileTree_Create or StarBurn_JolietFileTree_Create, StarBurn_ISO9660JolietFileTree_CreateFromRoot and StarBurn_ISO9660FileTree_BuildImage was applied to.
 
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). 

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.

This function seeks the ISO9660 or Joliet file system image from current offset to the very begining so read operation will start from the 0 offset of the file system image. ISO9660 or Joliet file tree must have assigned all the logical block offsets and all file system internal structures allocated and initialized.

Please see the BuildImage sample that will demonstrate how file system image can be stored on the hard disk drive and either burn later to CD/DVD/Blu-Ray/HD-DVD media or used with CD/DVD/Blu-Ray/HD-DVD emulation software packages. StarBurn_ISO9660JolietFileTree_SeekToBegin is used to rewind the file system image after some part of it was read. Rewinding can be used when the user will want to write the same file system image to the media multiple times.

This example allocates Joliet file tree from the directory, builds file system image, reads some stuff from it and destroys the file tree after it's not needed any more. 

 

// Somewhere in the data region
PVOID l__PVOID__FileTree;
EXCEPTION_NUMBER l__EXCEPTION_NUMBER;
ULONG l__ULONG__TreeNodes;
ULONG l__ULONG__SystemError;
CHAR l__CHAR__ExceptionText[ 1024 ];
UCHAR l__UCHAR__DataBuffer[ 4096 ];
LARGE_INTEGER l__LARGE_INTEGER__NumberOfUCHARs;

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

// Try to create Joliet file tree
l__EXCEPTION_NUMBER =
StarBurn_ISO9660JolietFileTree_Create(
    &l__PVOID__FileTree,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__Status,
    ( PCALLBACK )( StarBurn_Callback ),
    ( PVOID )( &l__LONG__TreeNodes ),
    TRUE,
    FALSE,
    FILE_TREE_JOLIET
    );

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

// Try to build the image, start with LBA 0 and include up to 8 levels into the image 
l__EXCEPTION_NUMBER =
StarBurn_ISO9660JolietFileTree_BuildImage(
    l__PVOID__FileTree,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__SystemError,
    0,
    8
    FALSE,
    "Volume",
    "Publisher",
    "Application"
    );

// Prepare data buffer
RtlZeroMemory(
    &l__UCHAR__DataBuffer,
    sizeof( l__UCHAR__DataBuffer )
    );

// Set transfer size
l__LARGE_INTEGER__NumberOfUCHARs.QuadPart = sizeof( l__UCHAR__DataBuffer );

// Try to read
l__EXCEPTION_NUMBER =
StarBurn_ISO9660JolietFileTree_Read(
    l__PVOID__FileTree,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__SystemError,
    l__LARGE_INTEGER__NumberOfUCHARs.LowPart,
    ( PUCHAR )( &l__UCHAR__DataBuffer )
    );

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

// Do something with data buffer here...        

// Try to seek to the very beging of the "virtual" file system image
l__EXCEPTION_NUMBER =
StarBurn_ISO9660JolietFileTree_SeekToBegin(
    l__PVOID__FileTree,
    ( PCHAR )( &l__CHAR__ExceptionText ),
    sizeof( l__CHAR__ExceptionText ),
    &l__ULONG__SystemError
    );

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

// Do something with image once again...

// Perform actions with Joliet tree here...

// Destroy the Joliet file tree
StarBurn_Destroy( &l__PVOID__FileTree );

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