社区
硬件/系统
帖子详情
Windows XP下的硬盘读写
wyvernwhite
2004-07-19 05:48:42
在WinXP下面有哪些API可以读写硬盘(最好是对硬盘的直接读写)
...全文
141
9
打赏
收藏
Windows XP下的硬盘读写
在WinXP下面有哪些API可以读写硬盘(最好是对硬盘的直接读写)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wyvernwhite
2004-07-23
打赏
举报
回复
已经全部搞定了,多谢
wyvernwhite
2004-07-20
打赏
举报
回复
......我发出回复以后想起来这可能是你自己写的了,但是好象不能改帖子.....
再次表示衷心的感谢,有什么疑问我再问你吧^^
会思考的草
2004-07-20
打赏
举报
回复
m_hDrive就不用多说了吧,至于这个m_DiskInfo么……
BOOL CLogicalPartition::GetDiskGeometry()
{
char szPath[255] = {0};
BOOL bResult = FALSE;
DWORD dwOutBytes = 0;
if(m_hDrive == INVALID_HANDLE_VALUE)
{
return FALSE;
}
sprintf(szPath, "%c:\\", m_chDriveLetter);
ZeroMemory(&m_DiskInfo, sizeof(DISK_GEOMETRY));
if(GetDriveType(szPath)== DRIVE_CDROM)
{
bResult = DeviceIoControl(
m_hDrive,
IOCTL_CDROM_GET_DRIVE_GEOMETRY,
NULL,
0,
&m_DiskInfo,
sizeof(DISK_GEOMETRY),
&dwOutBytes,
NULL
);
}
else
{
bResult = DeviceIoControl(
m_hDrive,
IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL,
0,
&m_DiskInfo,
sizeof(DISK_GEOMETRY),
&dwOutBytes,
NULL
);
}
return bResult;
}
会思考的草
2004-07-20
打赏
举报
回复
这个……咳,是俺写的一个类,汗……
wyvernwhite
2004-07-20
打赏
举报
回复
谢谢楼上,不过......这个CLogicalPartition我怎么在MSDN里查不到啊,能不能再麻烦你一下把缺失的部分补上^^(比如m_hDrive, m_DiskInfo 这些成员变量的值怎么得到)
会思考的草
2004-07-20
打赏
举报
回复
2000/XP下,先打开卷:
HANDLE CLogicalPartition::GetDriveHandle
{
char szDevice[255] = {0};
sprintf(szDevice, "\\\\.\\%c:", m_chDriveLetter);
return CreateFile(szDevice,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
}
然后读取扇区:
//从第dwStart个扇区开始,连续读取包括起始扇区在内的dwSecCount个扇区.dwBufSz是m_pFat大小(以字节计)
//扇区起始号均是从0开始计算
BOOL CLogicalPartition::ReadSectors(LPBYTE lpBuf, DWORD dwBufSz, DWORD dwStartSec, DWORD dwSecCount)
{
DWORD dwResult = 0;
LARGE_INTEGER qDistance;
//入口参数合法性校验
if(lpBuf == NULL)
{
return FALSE;
}
if(dwBufSz < (dwSecCount*m_DiskInfo.BytesPerSector))
{
MessageBox(NULL,"缓冲区不够!数据会被截断!","警告",MB_OK|MB_ICONWARNING);
}
if(m_hDrive == INVALID_HANDLE_VALUE)
{
return FALSE;
}
//移动文件指针到起始位置
ZeroMemory(&qDistance, sizeof(LARGE_INTEGER));
qDistance.QuadPart = dwStartSec*m_DiskInfo.BytesPerSector;//计算移动距离
if(qDistance.u.HighPart==0 && qDistance.u.LowPart==0)
{
dwResult = SetFilePointer(m_hDrive, 0, NULL, FILE_BEGIN);
}
else if(qDistance.u.HighPart==0)//高32位为0
{
dwResult = SetFilePointer(m_hDrive, qDistance.u.LowPart, NULL, FILE_BEGIN);
}
else
{
dwResult = SetFilePointer(m_hDrive,qDistance.u.LowPart,&qDistance.u.HighPart,FILE_BEGIN);
}
if(dwResult== -1 && GetLastError()!= NO_ERROR)
{
CString strErrorMsg = _T("");
strErrorMsg.Format("磁盘读取错误,错误号:%x",GetLastError());
MessageBox(NULL,strErrorMsg, "错误", MB_OK|MB_ICONERROR);
return FALSE;
}
dwResult = 0;
//读取磁盘扇区
if(ReadFile(m_hDrive, lpBuf, dwSecCount*m_DiskInfo.BytesPerSector, &dwResult, NULL)== 0)
{
CString strErrorMsg = _T("");
strErrorMsg.Format("磁盘读取错误,错误号:%x",GetLastError());
MessageBox(NULL,strErrorMsg, "错误", MB_OK|MB_ICONERROR);
return FALSE;
}
if(dwResult == 0)
{
return FALSE;
}
return TRUE;
}
wyvernwhite
2004-07-19
打赏
举报
回复
那有什么办法能在硬盘里找到指定的数据(也要需要用直接对硬盘操作来实现)
名牌大灰狼
2004-07-19
打赏
举报
回复
BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped
);
liotion
2004-07-19
打赏
举报
回复
DeviceIoControl
windows
xp
AHCI驱动
为让
硬盘
支持AHCI模式,需要按照此驱动。
XP
硬盘
读写
速度很慢的解决方法
05购入的电脑,今日仍在发挥余热,但系统速度慢得出奇。今日检测了
硬盘
读写
速度还不到2m/s,实在令人难以接受。一查之下,
硬盘
被置为PIO模式了,难怪。用以下方法得以解决:1、对桌面“我的电脑”右键选择“属性”,选择“硬件”->“设备管理器”。2、展开“IDE ATA/ATAPI 控制器”节点,双击“主要IDE控制器”。3、点击“高级设置”,查看“设备0”的传输模式为“DMA(若可用)”,再下面“当
3t
硬盘
xp
_解决方案:如何在
Windows
XP
SP3 32位系统下识别3T容量GPT格式的
硬盘
...
随着
硬盘
驱动器容量的增加,大于3TB的大型
硬盘
驱动器变得越来越普遍,但是
XP
仅支持2.0TB以内的
硬盘
驱动器,超过该容量则无法读取。在
Windows
操作系统环境中,如果要标识,访问和创建容量超过2.2TB的分区/
硬盘
驱动器,解决方案是将MBR放弃给GPT分区表。但麻烦的是,
Windows
7、Vista的特定版本仅支持GPT分区表,而
Windows
XP
则不支持。操作系统版本和MBR分区表受到限制,...
mac
硬盘
读写
速度测试 软件,使用适用于
Windows
/ Mac的最佳10工具开始测试
硬盘
速度...
后台运行多任务时计算机运行缓慢吗? 也许是时候测试计算机的
硬盘
速度了。 您需要知道
硬盘
是计算机的大脑,如果性能不佳,您的计算机也将无法正常工作。 如果您没有
Windows
计算机或Mac,可以在下面找到适合自己的测试仪。部分 1。 在
Windows
上测试
硬盘
速度HD Tach可以成为2004中出现的
硬盘
基准测试工具的老手,但它在
硬盘
速度测试中仍能产生良好的效果。 通过在
Windows
XP
兼容模式下...
windows
xp
系统老电脑支持3TB
硬盘
的方法
使用3TB
硬盘
的局限性 使用
Windows
XP
系统的电脑一般都是比较老的配置,其中的老主板BIOS支持MBR分区,最大只能支持2.19TB的空间,要让3TB
硬盘
不受这个限制就要将它转换为GPT分区。然而用户常用的32位
Windows
XP
并不支持对GPT分区的
读写
,如果用户要在3TB
硬盘
作为数据从盘,就必须使用Window...
硬件/系统
2,644
社区成员
17,232
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章