如何编程给硬盘分区和格式化!(100分)

  • 主题发起人 主题发起人 barry1999
  • 开始时间 开始时间
男人哭吧哭吧不是罪,尝尝阔别已久眼泪的滋味。。。。。。。
 
好东西,先收藏
 
》先从C盘分出一个O盘(存放OFFICE的文档)和I盘(存放下载的文档)盘
然后再格式化它们!

若是这样的话,在windows下肯定做不到,一般windows是系统盘,启动盘。怎做?
谁做到谁了不起!
我拜他为师!
也请告知我是如何才办到的!?

另外我想说,做这样的项目没必要。真象大石头 说的想搞病毒?
 
/* The code of interest is in the subroutine GetDriveGeometry. The
code in main shows how to interpret the results of the IOCTL call. */

#include <windows.h>
#include <winioctl.h>
#include <stdio.h>

BOOL
ReadMBR()
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results
// DISK_GEOMETRY Geometry;
char MBRBuf[512];

hDevice = CreateFile("////.//PHYSICALDRIVE0", // drive to open
GENERIC_READ, // for read
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes

if (hDevice == INVALID_HANDLE_VALUE) // we can't open the drive
{
MessageBox(NULL,"Open Hard Disk ERROR.",NULL,MB_OK);
return (FALSE);
}

bResult=ReadFile(hDevice,MBRBuf,512,&junk,NULL);
if (bResult==FALSE || junk<512)
{
MessageBox(NULL,"Read MBR ERROR.",NULL,MB_OK);
return FALSE;
}
CloseHandle(hDevice);
for(int i=0;i<512;i++)
{
if(i%16==0)
{
printf("%04X: ",i);
}
printf("%02X ",(unsigned char)MBRBuf);
if(i%16==15)
{
printf("/n");
}

}

return TRUE;

}

BOOL
GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results

hDevice = CreateFile("////.//PHYSICALDRIVE0", // drive to open
0, // don't need any access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes

if (hDevice == INVALID_HANDLE_VALUE) // we can't open the drive
{
return (FALSE);
}

bResult = DeviceIoControl(hDevice, // device we are querying
IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform
NULL, 0, // no input buffer, so pass zero
pdg, sizeof(*pdg), // output buffer
&junk, // discard count of bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O

CloseHandle(hDevice); // we're done with the handle

return (bResult);
}

int
main(int argc, char *argv[])
{
DISK_GEOMETRY pdg; // disk drive geometry structure
BOOL bResult; // generic results flag
ULONGLONG DiskSize; // size of the drive, in bytes
DWORD BytesRead;
#if 0
bResult = GetDriveGeometry (&pdg);

if (bResult)
{
printf("Cylinders = %I64d/n", pdg.Cylinders);
printf("Tracks per cylinder = %ld/n", (ULONG) pdg.TracksPerCylinder);
printf("Sectors per track = %ld/n", (ULONG) pdg.SectorsPerTrack);
printf("Bytes per sector = %ld/n", (ULONG) pdg.BytesPerSector);

DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
(ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
printf("Disk size = %I64d (Bytes) = %12.2f (Mb)/n", DiskSize,
DiskSize / 1024. / 1024.);
} else {
printf ("Attempt to get drive geometry failed. Error %ld./n",
GetLastError ());
}
#endif
printf("/n----------MBR----------/n/n");

ReadMBR();
return ((int)bResult);
}

这个是读分区表的,把ReadFile改成WriteFile应该是写分区表了,我没试过。
 
NowCan的回答就是答案阿!
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部