harvey99
驱动牛犊
驱动牛犊
  • 注册日期2002-12-14
  • 最后登录2005-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1763回复:9

有酬请教高手:能否帮忙写一个能对u盘某个绝对扇区进行读写的API函数?

楼主#
更多 发布于:2005-01-12 19:29
有酬请教高手:能否帮忙写一个能对u盘某个绝对扇区进行读写的API函数?

一个读函数: 参数是(绝对扇区号,字节数)
一个写函数: 参数是(绝对扇区号,字节数)

本人在深圳,电话13798380489  szjhh@vip.sina.com

急,谢谢!

最新喜欢:

quickerquicke...
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-12 22:07
这个跟你的u盘的固件程序有关,如果固件提供了接口那就好办,如果没有那就很麻烦,只有做u盘控制器的才能写哦!!
tsingkong
驱动牛犊
驱动牛犊
  • 注册日期2003-03-25
  • 最后登录2013-11-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-17 14:37
用CreateFile打开U盘后,就可以用ReadFile、WriteFile读写了。
根据绝对扇区号很容易得到这两个函数的参数了。
不用再编一个了吧。
mailto:tsingkong@163.com
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-17 21:24
用CreateFile打开U盘后,就可以用ReadFile、WriteFile读写了。
根据绝对扇区号很容易得到这两个函数的参数了。
              ~~~~~~~~~~~~~~~~
不用再编一个了吧。


怎么得到呢?我们根本不知道底下u盘是怎么组织文件系统的....
tsingkong
驱动牛犊
驱动牛犊
  • 注册日期2003-03-25
  • 最后登录2013-11-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-17 22:41
参见
http://www.driverdevelop.com/forum/html_85160.html?1105972510
七楼,最后:
CloseHandle(savef);
// ZeroMemory(buffer,512);
// bRet=SetFilePointer(hUSBFile,0,0,FILE_BEGIN);
// bRet=WriteFile(hUSBFile,buffer,512,&RealLength,NULL);
//最后别忘了关闭设备
if(CloseHandle(hUSBFile)) printf("成功关闭设备!n");
else printf("关闭设备失败!n");
}
//退出喽
//释放资源
SetupDiDestroyDeviceInfoList(hDeviceInfo);
mailto:tsingkong@163.com
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-18 17:26
老大,好像有误解哦。。
我觉得困难的地方不是因为USB设备的handler,而是我们不清楚底下U盘的扇区的组织情况。
tsingkong
驱动牛犊
驱动牛犊
  • 注册日期2003-03-25
  • 最后登录2013-11-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-18 17:53
老大,好像有误解哦。。
我觉得困难的地方不是因为USB设备的handler,而是我们不清楚底下U盘的扇区的组织情况。


是啊。我让你看的是这两行
// bRet=SetFilePointer(hUSBFile,0,0,FILE_BEGIN);
// bRet=WriteFile(hUSBFile,buffer,512,&RealLength,NULL);
也就是说,在已知绝对扇区号SectorNum和扇区字节数BytesPerSec的情况下,可以得到:Offset=SectorNum*BytesPerSec.
然后,SetFilePointer(hUSBFile,0,Offset,FILE_BEGIN);
忘了是第二个还是第三个参数是Offset了,总之,很容易就可以移动文件指针到想要读的扇区处。
然后,WriteFile(hUSBFile,buffer,512,&RealLength,NULL);
就可以了。buffer中就是扇区号为SectorNum的数据。
mailto:tsingkong@163.com
sampex
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-19 08:54
U盘用FAT表的
Shentu
驱动小牛
驱动小牛
  • 注册日期2004-04-05
  • 最后登录2011-01-24
  • 粉丝0
  • 关注0
  • 积分234分
  • 威望24点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-19 09:54
呵呵,不知道你做过u盘没有?u盘的flash是按block组织的(1block = 32pages, 1page = 512bytes,一般的flash是这样的),我们可能把flash的前面的block(比如block0)用来存储我们自己的信息,所以这个block在windows下一般是看不到的,只能在固件里看到。。。那么,其实所谓的MBR(硬盘里的第0扇区)就会从block1开始,所以按照你的方法只可以读写“相对”的扇区.......
johnson__fu
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2005-04-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-26 19:26
要写你的U盘固件的人才可以,如果固件不提供此功能,在PC端是没办法实现的
游客

返回顶部