.
.
const int BUFSIZE =161*1024;//322*512=164864位元組
unsigned char lpWriteBuff[BUFSIZE];//存要寫入硬碟(這里是F盤)的資料
.
.
char devName[200];
strcpy(devName,"\\\\.\\PHYSICALDRIVE0");
WriteSectors(devName,322, 238852096, lpWriteBuff);
//322是扇區個數
//筆者想要把lpWriteBuff的內容寫到硬碟(這里是F盤)的偏移地址為238852096(邏輯扇區:LBA=238852096位元組 )
.
.
BOOL CCRegProgramDlg::WriteSectors( char devName[],LONG redpos, LONG wSectors, unsigned char lpWriteBuff[])
{ //筆者想要把lpWriteBuff的內容寫到硬碟(這里是F盤)的偏移地址為238852096(邏輯扇區:LBA=238852096位元組 )的位置
//筆者理解:redpos=322:扇區個數,wSectors=238852096:設定寫入資料的地址(要寫入資料起點的偏移地址)
LARGE_INTEGER li={0};
li.QuadPart=wSectors;//wSectors=25700620;//應該是512的整數倍,(//0x200 = 512)
//通過設定寫入的地址
//li.LowPart=redpos*512;
//li.HighPart=1024*redpos*512;//11983574;//158575088;//1024*redpos*512;
CString ss;ss.Format("li.LowPart=%d li.HighPart=%d %d % d",li.LowPart,li.HighPart,redpos,li.QuadPart);AfxMessageBox(ss);
HANDLE hDev=CreateFile(devName,GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if(hDev == INVALID_HANDLE_VALUE) return 0;
//SetFilePointer(hDev, 512 * dwStartSector, 0, FILE_BEGIN);//原代碼
//SetFilePointer(hDev, li.LowPart, 0, FILE_BEGIN);//該陳述句結果
SetFilePointer(hDev, li.LowPart, &li.HighPart, FILE_BEGIN);
//DWORD dwCB;//原代碼
unsigned long dwCB;
BOOL bRet = WriteFile(hDev, lpWriteBuff, redpos*512, &dwCB, NULL);//li.LowPart
CloseHandle(hDev);
return bRet;
}
//問題是:SetFilePointer(hDev, li.LowPart, &li.HighPart, FILE_BEGIN);陳述句
//不能把lpWriteBuff[BUFSIZE]的內容寫到硬碟(F盤)偏移地址為:238852096的位置
//而是幾乎寫到C盤的“起始位置”,關機后再開機,系統不能正常啟動
//請高手能幫筆者解決這個問題,筆者不是計算機專業,上面用的術語不一定準確
uj5u.com熱心網友回復:
strcpy(devName,"\\\\.\\F:");uj5u.com熱心網友回復:
先打開0磁盤,得到句梹,li.QuadPart等于絕對扇區,寫內容的話你這樣是不行的。和檔案系統有關轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56425.html
標籤:基礎類
