阅读:3123回复:4
用writefile写PC机上第二块硬盘扇区为什么写不进去呢?
我的机器上除了OS运行的一块硬盘外,还挂了一块硬盘,想对这块硬盘进行物理扇区的读写,读的时候没问题,但写的时候返回是成功的,可实际上没写进去,不知道为什么呢?
以下是写的那段代码: hDev = CreateFile("\\\\.\\PHYSICALDRIVE1", GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH,NULL); //这里一定要用PHYSICALDRIVE1这个物理名称,因为我的硬盘不是用FAT等WIN认识的格式的,所以不可能有C:等逻辑盘符出现,一定要用物理名称 if (hDev == INVALID_HANDLE_VALUE) return 0; SetFilePointer(hDev, 512 * dwStartSector, 0, FILE_BEGIN);//dwStartSector是开始扇区号 bRet = WriteFile(hDev, lpSectBuff, 512 * wSectors, &dwCB, NULL);//wSectors是要写多少个扇区 CloseHandle(hDev); 从查资料的情况看好象用这个系列的函数写物理扇区应该就是这么用吧,但为什么写返回成功,可实际上没写进去呢? 而且我的硬盘不是OS运行的硬盘,该硬盘是个空磁盘,磁盘格式自己定义的,不是FAT,NTFS等任何其他格式的磁盘,所以我应该可以对该硬盘进行任何物理位置的写操作吧?可为什么写不进去呢?我的OS是WINDOWS2003 SERVER 我读该磁盘相应扇区的内容时,读的都是正确的内容,所以想请教一下这里是否有人碰到过这个问题呢? 请高手给点意见,谢谢了先!!!! |
|
沙发#
发布于:2009-02-17 18:50
PHYSICALDRIVE1是符号连接名吗?
|
|
|
板凳#
发布于:2009-02-18 09:57
PHYSICALDRIVE1是物理硬盘名称
|
|
地板#
发布于:2009-02-18 17:46
Windows设备管理是否已经正确识别你的物理硬盘?如果没有当然不能工作了
你不能想当然的用PHYSICALDRIVE1,要确定PHYSICALDRIVE1存在,而且是你要操作的硬盘才能去action,否则认错了门当然到不了家 |
|
|
地下室#
发布于:2009-02-19 11:53
当然能确认了,因为我可以正确读出该扇区的内容
现在问题有一些进展,就是发现是某个扇区位置在写入某一些中文字符时会保存不进去,甚至用WINHEX写入也不行,如果换成其他字符,或者换个位置写也许都可以成功,所以非常奇怪,不知道是否有人碰到过这个问题呢? |
|