GRE Flash Card software with Bangla meaning
http://anandopaul.wordpress.com/
Friday, December 11, 2009
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;
}
Subscribe to:
Posts (Atom)