我写了一个直接写U盘0扇区的程序,目的是对U盘的0扇区进行加密.流程如下:
1.取得u盘的句柄:
char szdrv[MAX_PATH] = {0};
sprintf(szdrv, "\\\\.\\physicaldrive%d", uDevIndex);
HANDLE hDrive =
CreateFile(szdrv, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hDrive)
{
return false;
}
2.ReadFile
3.加密
4.WriteFile
但是通过一下流程的测试,会出现写不上的问题:(win2003 标准版 sp2)
1.格式化(格式化之后不拔出U盘)
2.进行上述的操作.
结果就是拔出U盘再插上,数据并没有写上.请高手帮忙分析下原因.多谢.
如果是没有分区表的情况,不要打开PhysicalDrive,用打开盘符设备的方式,CreateFile之后,先用DeviceControl FSCTL_LOCK_VOLUME锁定卷,如果不成功可以等待一下再试,成功后再进行读写,处理完后用DeviceControl FSCTL_DISMOUNT_VOLUME,然后再CloseHandle,最后安全拔除设备。
我感觉似乎不是锁定的问题,而是我的写的东西都写入缓存了,没有及时的更新到U盘上,因为我跟踪WriteFile操作,是成功的.