win2003下,直接写u盘0扇区的问题.

weiyingwu   2008-8-19 16:25 楼主
我写了一个直接写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盘再插上,数据并没有写上.请高手帮忙分析下原因.多谢.

回复评论 (4)

如果是没有分区表的情况,不要打开PhysicalDrive,用打开盘符设备的方式,CreateFile之后,先用DeviceControl FSCTL_LOCK_VOLUME锁定卷,如果不成功可以等待一下再试,成功后再进行读写,处理完后用DeviceControl FSCTL_DISMOUNT_VOLUME,然后再CloseHandle,最后安全拔除设备。
点赞  2008-8-19 23:57
有分区表的,应该怎么样处理呢? 多谢了.
点赞  2008-8-20 15:21
我感觉似乎不是锁定的问题,而是我的写的东西都写入缓存了,没有及时的更新到U盘上,因为我跟踪WriteFile操作,是成功的.
点赞  2008-8-20 15:25
驱动可不可以调试
点赞  2008-8-20 15:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复