Friday, December 11, 2009

GRE Bangla Flash Card Software

GRE Flash Card software with Bangla meaning

http://anandopaul.wordpress.com/

Friday, August 14, 2009

Stack implementation in C++

This post is for student who can use this simple code.

Link : http://www.codeproject.com/KB/cpp/Stack.aspx

Wednesday, July 22, 2009

Create Doubly Linked list from singly Linked List


BOOLEAN ddrv_CreateDoublyLinkedList( SPEED_DEVICE_EXTENSION * apDevExt )
{
DEFRAGFILE * lpFileList = apDevExt->mpFileList;
DEFRAGFILE * lpPrevFile = NULL;

if ( lpFileList != NULL )
{
lpFileList->mPrevPtr = NULL;
lpPrevFile = lpFileList;
lpFileList = lpFileList->mNextPtr;
}
while( lpFileList != NULL )
{
lpFileList->mPrevPtr = lpPrevFile;
lpPrevFile = lpFileList;
lpFileList = lpFileList->mNextPtr;
}

return TRUE;
}

move file cluster in Kernel mode driver

NTSTATUS ddrv_MoveFileBlock( SPEED_DEVICE_EXTENSION* apDevExt, HANDLE ahFile, ULONGLONG aullStartVcn, ULONGLONG aullTargetLcn, ULONGLONG aullClusters )
{
ULONG lulStatus;
IO_STATUS_BLOCK lIoStatusBlock;

if( KeReadStateEvent( &apDevExt->mStopEvent ) == 0x1 )
{
ddrv_exitDefrag( apDevExt , 1 );
return STATUS_ABANDONED;
}

apDevExt->mpMoveFile->FileHandle = ahFile;
apDevExt->mpMoveFile->StartVcn.QuadPart = aullStartVcn;
apDevExt->mpMoveFile->TargetLcn.QuadPart = aullTargetLcn;

#ifdef _WIN64
apDevExt->mpMoveFile->NumVcns = aullClusters;
#else
apDevExt->mpMoveFile->NumVcns = ( ULONG )aullClusters;
#endif
lulStatus = ZwFsControlFile( apDevExt->mhVolume, NULL, NULL, 0, &lIoStatusBlock, FSCTL_MOVE_FILE, apDevExt->mpMoveFile, sizeof( MOVEFILE_DESCRIPTOR ), NULL, 0 );

if( lulStatus == STATUS_PENDING )
{
NtWaitForSingleObject( ahFile, FALSE, NULL );
lulStatus = lIoStatusBlock.Status;
}

if ( lulStatus != STATUS_SUCCESS )
{
DebugPrint("Move Unsuccessful : %x", ( UINT )lulStatus );
DebugPrint(" aullStartVcn %I64u aullTargetLcn %I64u mTotalClusters %I64u", aullStartVcn, aullTargetLcn, apDevExt->mTotalClusters );
}

return lulStatus;
}

Most efficient iterative Traversal of BST

lpFileList = Head;

if ( lpFileList != NULL )
{
while( lpFileList->Smaller != NULL )
{
lpFileList = lpFileList->Smaller;
}

do
{

// write anything for each node

***before any continue statement u must call this function
//lpFileList = ddrv_getFile( lpFileList );

//To Get next file
if ( lpFileList->Bigger != NULL )
{
lpFileList = lpFileList->Bigger;
while( lpFileList->Smaller != NULL )
{
lpFileList = lpFileList->Smaller;
}
}
else
{
while( lpFileList->Parent != NULL && lpFileList == lpFileList->Parent->Bigger )
{
lpFileList = lpFileList->Parent;
}
lpFileList = lpFileList->Parent;
}
}while ( lpFileList != NULL );
}






DEFRAGFILE * ddrv_getFile( DEFRAGFILE * apFileList )
{
if ( apFileList == NULL )
{
return NULL;
}

if ( apFileList->Bigger != NULL )
{
apFileList = apFileList->Bigger;
while( apFileList->Smaller != NULL )
{
apFileList = apFileList->Smaller;
}
}
else
{
while( apFileList->Parent != NULL && apFileList == apFileList->Parent->Bigger )
{
apFileList = apFileList->Parent;
}
apFileList = apFileList->Parent;
}

return apFileList;

}