資源簡介
在操作硬盤的時候,我們需要直接讀寫硬盤扇區,這里提供C++寫的readSectors和writeSectors函數,還有一個輸出函數PrintInform,希望能為大家提供幫助

代碼片段和文件信息
//?WipeTest.cpp:?implementation?of?the?WipeTest?class.
//
//////////////////////////////////////////////////////////////////////
#include?“WipeTest.h“
#include?
#include?
#include?
#include?
using?namespace?std;
void?PrintInform(LPBYTE?pBuf?UINT?uSize)?{
for(UINT?i?=1;?i<=uSize;?i++)?{
printf(“%02X“?pBuf[i-1]);
if(i%16?==?0)?{
printf(“\n“); //end?of?line??when?word?number?more?than?16
}else?if(i%8?==?0)?{
printf(“???“); //print?“?“?between?every?word
}else{
printf(“?“);
}//end?of?if...else?if..
}//end?of?for
}//end?of?method?PrintInform
BOOL?readSectors(?char?pDiskPath[]BYTE?bReadBuffer[]DWORD?dwOffsetByte?DWORD?dNumberOfBytesToRead)?{
HANDLE?hFile?=?CreateFile(pDiskPath?GENERIC_READ?FILE_SHARE_READ??NULL?OPEN_EXISTING?0?NULL?);
if(hFile?==?INVALID_HANDLE_VALUE){
MessageBox(0?“can‘t?open?the?disk!“?0?0);
return?0;
}//end?of?if
SetFilePointer(hFile?dwOffsetByte?*512?0?FILE_BEGIN);//
DWORD?dwReadByte; //被讀取的字節數
BOOL?bRead?=?ReadFile(hFile?bReadBuffer?dNumberOfBytesToRead?&dwReadByte?NULL);
//cout?< if(dwReadByte?==?0){
MessageBox(0?“read?disk?error!“?0?0);
return?0;
}?//end?of?if
CloseHandle(hFile);
return?bRead;
}//end?of?method?readSectors
BOOL?writeSectors(?char?pDiskPath[]?BYTE?cWriteBuffer[]DWORD?dwStartSector?DWORD?dNumberOfBytesToWrite){
HANDLE?hFile?=?CreateFile(pDiskPath?GENERIC_WRITE?FILE_SHARE_READ??NULL?OPEN_EXISTING?0?NULL?);
if(hFile?==?INVALID_HANDLE_VALUE){
MessageBox(0?“can‘t?open?the?disk!“?0?0);
return?0;
}//end?of?if
SetFilePointer(hFile?dwStartSector?*?512?0?FILE_BEGIN);
DWORD?dwWriteByte; //被寫入的字節數
BOOL?bWrite?=?WriteFile(hFilecWriteBufferdNumberOfBytesToWrite?&dwWriteByteNULL);
//cout?<“****************“?< if(dwWriteByte?==?0){
MessageBox(0?“Write?disk?error!“?0?0);
return?0;
}?//end?of?if
CloseHandle(hFile);
return?bWrite;
}//end?of?method?writeSectors
int?main(int?argcchar?*argv){
char?cFilePath[]?=?“\\\\.\\F:\\TTTT.txt“?;??//“\\\\.\\PhysicalDrive0“; //文件路徑(一定要正確!)
char?cPhisycalDiskPath[]?=?“\\\\.\\PhysicalDrive0“; //物理盤符路徑
DWORD?readOffSetSector?=?0; ? //開始扇區
DWORD?uSectorNum?=?1; //預計讀取的扇區總數
DWORD?uReadSize?=?uSectorNum?*?512; //預計讀取的扇區總數的總大小(Byte)
DWORD?uWriteSize?=?uSectorNum?*?512; //預計寫入的扇區總數的總大小(Byte)
BYTE?bBuffer[512]; //數組存放DPT的內容
if(readSectors(cFilePathbBuffer?readOffSetSector?uReadSize)){
PrintInform(bBufferuReadSize);
cout?<“read?appoint?sector?success!“?<
}//end?of?if
memset(bBuffer5512);
if(writeSectors(cFilePathbBuffer?readOffSetSector?uReadSize)){
cout?<“write?oK!“?< }//*//*
return?0;
}//end?of?method?main()
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4306??2008-01-14?22:05??WipeTest\WipeTest.dsp
?????文件????????539??2008-01-14?13:50??WipeTest\WipeTest.dsw
?????文件??????58368??2008-05-29?12:33??WipeTest\WipeTest.ncb
?????文件????????250??2008-05-29?12:32??WipeTest\WipeTest.plg
?????文件????????732??2008-01-16?15:29??WipeTest\WipeTest.h
?????文件???????2998??2008-04-08?12:48??WipeTest\WipeTest.cpp
?????文件?????197632??2008-05-29?12:32??WipeTest\Debug\vc60.idb
?????文件?????135168??2008-04-08?12:48??WipeTest\Debug\vc60.pdb
?????文件??????????0??2008-04-08?12:48??WipeTest\Debug\WipeTest.sbr
?????文件?????229428??2008-04-08?12:48??WipeTest\Debug\WipeTest.exe
?????文件????1082368??2008-04-08?12:48??WipeTest\Debug\WipeTest.pdb
?????文件????6447432??2008-04-08?12:45??WipeTest\Debug\WipeTest.pch
?????文件??????51571??2008-04-08?12:48??WipeTest\Debug\WipeTest.obj
?????文件?????359248??2008-04-08?12:48??WipeTest\Debug\WipeTest.ilk
?????文件????2098176??2008-04-08?12:48??WipeTest\Debug\WipeTest.bsc
?????文件??????53760??2008-05-29?12:33??WipeTest\WipeTest.opt
?????目錄??????????0??2008-04-08?15:48??WipeTest\Debug
?????目錄??????????0??2008-04-08?15:48??WipeTest
-----------?---------??----------?-----??----
?????????????10721976????????????????????18
評論
共有 條評論