python读写磁盘扇区数据_C++-如何直接读取Windows磁盘扇区的数据?

1.通过CreateFile系列来完成

读写扇区可以通过CreateFile打开磁盘逻辑分区,还要通过SetFilePointer以文件操作的方式把指针移到要操作的磁盘扇区开始处,在定位到要访问的扇区开始位置后就可以通过ReadFile或WriteFile函数实施相应的读写访问了,具体操作与文件读写并没有什么太大的差别。

示例代码:

BOOL CDirectAccessHDDlg::WriteSectors(BYTE bDrive, DWORD dwStartSector,

WORD wSectors, LPBYTE lpSectBuff)

// 对磁盘扇区数据的写入

{

if (bDrive == 0) return 0;

char devName[] = "\.\A:";

devName[4] ='A' + bDrive - 1;

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);

DWORD dwCB;

BOOL bRet = WriteFile(hDev, lpSectBuff, 512 wSectors, &dwCB, NULL);

CloseHandle(hDev);

return bRet;

}

BOOL CDirectAccessHDDlg::ReadSectors(BYTE bDrive, DWORD dwStartSector,

WORD wSectors, LPBYTE lpSectBuff)

// 对磁盘扇区数据的读取

{

if (bDrive == 0) return 0;

char devName[] = "\.\A:";

devName[4] ='A' + bDrive - 1;

HANDLE hDev = CreateFile(devName, GENERIC_READ, FILE_SHARE_WRITE,

NULL, OPEN_EXISTING, 0, NULL);

if (hDev == INVALID_HANDLE_VALUE) return 0;

SetFilePointer(hDev, 512 dwStartSector, 0, FILE_BEGIN);

DWORD dwCB;

BOOL bRet = ReadFile(hDev, lpSectBuff, 512 wSectors, &dwCB, NULL);

CloseHandle(hDev);

return bRet;

}

2.通过ReadSectors直接读写磁盘扇区数据

示例代码:

if (ReadSectors(uDiskID, m_uFrom, (UINT)dwSectorNum, bBuf) == FALSE) {

MessageBox("所选磁盘分区不存在!", "错误", MB_OK | MB_IConERROR);

return;

}

//为了方便数据的显示,可做如下处理以完成格式转换等工作:

for (DWORD i = 0; i < dwSectorNum * 512; i++) {

sprintf(cBuf, "%s%02X ", cBuf, bBuf[i]);

if ((i % 512) == 511)

sprintf(cBuf, "%srn第%d扇区rn", cBuf, (int)(i / 512) + m_uFrom);

if ((i % 16) == 15)

sprintf(cBuf, "%srn", cBuf);

else if ((i % 16) == 7)

sprintf(cBuf, "%s- ", cBuf);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值