CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4

Threaded View

  1. #1
    Join Date
    Dec 2014
    Posts
    8

    partitioning USB Falsh drive

    I have written some code to make two partitions in USB flash drive. When I ran it I am not able to make partitions on usb. What'll be the problem in this code.
    Code:
    /-------------------INITIALIZE AND PARTITION-------------------------------//
    #include "stdafx.h"                                                                  
    #include <Windows.h>                                                            
    #include <stdio.h>                                                                  
    #include <iostream>                                                                
    #include <tchar.h>                                                                
    #include <winioctl.h>                                                            
    #include <shellapi.h>                                                            
    //-------------------------------------Main-------------------------------------//
    int _tmain(int argc, _TCHAR* argv[])                                                                    
    {                                                                                
    	//char *dsk = "\\\\.\\PhysicalDrive1";                                        
    	HANDLE hDisk;                                                                
    	DWORD junk = 0;                                                                
    	BOOL bResult = false;    
    	unsigned int SectorSize = 512;
    //
    	//
    	hDisk = CreateFile(TEXT("\\\\.\\E:"),                            
    		GENERIC_READ | GENERIC_WRITE,                                           
    		FILE_SHARE_READ | FILE_SHARE_WRITE,                                        
    		NULL,                                                                    
    		OPEN_EXISTING,                                                            
    		0,                                                                        
    		NULL);                                                                    
    	//
    	//error handler for driver                                                    
    	if (hDisk == INVALID_HANDLE_VALUE)                                              
    	{                                                                            
    		CloseHandle(hDisk);                                                        
    		return 1;                                                                
    	}                                                                            
    	//
    	//
    	CREATE_DISK dsk;                                                            
    	dsk.PartitionStyle = PARTITION_STYLE_MBR;                                    
    	dsk.Mbr.Signature = 9999;                                                    
    	//
    	//-------------------------------Initialize Disk--------------------------------//
    	bResult = DeviceIoControl(hDisk,    //initialize raw disk                    
    		IOCTL_DISK_CREATE_DISK,                                                    
    		&dsk, sizeof(dsk),                                                        
    		NULL, 0,                                                                
    		&junk,                                                                    
    		NULL);                                                                    
    	//
    	if (!bResult)                                                                
    	{                                                                            
    		return GetLastError();                                                    
    	}                                                                            
    	//
    	bResult = DeviceIoControl(hDisk,    //to flush changes                        
    		IOCTL_DISK_UPDATE_PROPERTIES,                                            
    		NULL, 0, NULL, 0, &junk, NULL);                                            
    	//
    	if (!bResult)                                                                
    	{                                                                            
    		return GetLastError();                                                    
    	}                                                                            
    	//
    	//
    	//----------------------------Partition Disk--------------------------------//
    	LARGE_INTEGER DiskSize;
    	DiskSize.QuadPart = 15784004812.8;
    		LARGE_INTEGER Part_1_size;
    		Part_1_size.QuadPart = 7892002406.4;
    		LARGE_INTEGER Part_2_size;
    		Part_2_size.QuadPart = 7892002406.4;
    	LARGE_INTEGER lgPartSize;                                                    
    	//
    	lgPartSize.QuadPart = (1024 * 1024 * 1024);                                    
    	//
    	DWORD dwDriverLayoutInfoExLen = sizeof(DRIVE_LAYOUT_INFORMATION_EX) + 3 *    
    		sizeof(PARTITION_INFORMATION_EX);                                        
    	//
    	DRIVE_LAYOUT_INFORMATION_EX *pdg = (DRIVE_LAYOUT_INFORMATION_EX *)new        
    		BYTE[dwDriverLayoutInfoExLen];                                            
    	//
    	if (pdg == NULL)                                                            
    	{                                                                            
    		return -1;                                                                
    	}                                                                            
    	//
    	SecureZeroMemory(pdg, dwDriverLayoutInfoExLen);                                
    	
    
    	//Create the PHTSYS partition
    	pdg->PartitionEntry[0].PartitionStyle = PARTITION_STYLE_MBR;
    	pdg->PartitionEntry[0].StartingOffset.QuadPart = 32768;
    	pdg->PartitionEntry[0].PartitionLength = Part_1_size;
    	pdg->PartitionEntry[0].PartitionNumber = 1;
    	pdg->PartitionEntry[0].RewritePartition = 1;
    	pdg->PartitionEntry[0].Mbr.PartitionType = PARTITION_FAT32;
    	pdg->PartitionEntry[0].Mbr.BootIndicator = TRUE;
    	pdg->PartitionEntry[0].Mbr.RecognizedPartition = 1;
    	pdg->PartitionEntry[0].Mbr.HiddenSectors = (pdg->PartitionEntry[0].StartingOffset.QuadPart - 1) / SectorSize;
    
    	//Create the extended entry for the PHTDATA partition
    	pdg->PartitionEntry[1].PartitionStyle = PARTITION_STYLE_MBR;
    	pdg->PartitionEntry[1].StartingOffset.QuadPart = Part_1_size.QuadPart + pdg->PartitionEntry[0].StartingOffset.QuadPart;
    	pdg->PartitionEntry[1].PartitionLength = Part_2_size;
    	pdg->PartitionEntry[1].PartitionNumber = 2;
    	pdg->PartitionEntry[1].RewritePartition = 1;
    	pdg->PartitionEntry[1].Mbr.PartitionType = PARTITION_EXTENDED;
    	pdg->PartitionEntry[1].Mbr.BootIndicator = 0;
    	pdg->PartitionEntry[1].Mbr.RecognizedPartition = 1;
    	pdg->PartitionEntry[1].Mbr.HiddenSectors = (pdg->PartitionEntry[0].StartingOffset.QuadPart + Part_1_size.QuadPart) / SectorSize;
    
    	//Create the PHTDATA partition
    	pdg->PartitionEntry[4].PartitionStyle = PARTITION_STYLE_MBR;
    
    
    	pdg->PartitionEntry[4].StartingOffset.QuadPart = Part_1_size.QuadPart + pdg->PartitionEntry[0].StartingOffset.QuadPart + SectorSize;
    
    	LARGE_INTEGER LogicalPartition = Part_2_size;
    
    	LogicalPartition.QuadPart = LogicalPartition.QuadPart - SectorSize;
    	pdg->PartitionEntry[4].PartitionNumber = 3;
    	pdg->PartitionEntry[4].RewritePartition = 1;
    	pdg->PartitionEntry[4].Mbr.PartitionType = PARTITION_FAT32;
    	pdg->PartitionEntry[4].Mbr.BootIndicator = 0;
    	pdg->PartitionEntry[4].Mbr.RecognizedPartition = 1;
    	pdg->PartitionEntry[4].Mbr.HiddenSectors = (pdg->PartitionEntry[0].StartingOffset.QuadPart + Part_1_size.QuadPart) / SectorSize;
    	bResult = DeviceIoControl(hDisk,            //device to be queried            
    		IOCTL_DISK_SET_DRIVE_LAYOUT_EX,            //operation to perform            
    		pdg, sizeof DRIVE_LAYOUT_INFORMATION_EX,//sizeof(pdg),                   
    		NULL, 0,                                // output buffer                 
    		&junk,                                    //# bytes returned                 
    		NULL);                                                                   
    	
    	if (!bResult)                                                                
    	{                                                                            
    		return GetLastError();                                                    
    	}                                                                            
    	//
    	//
    	CloseHandle(hDisk);
    	return 0;                                                                                    
    }
    Last edited by sateeshn2507; December 9th, 2014 at 08:12 AM.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured