阅读:1762回复:9
有酬请教高手:能否帮忙写一个能对u盘某个绝对扇区进行读写的API函数?
有酬请教高手:能否帮忙写一个能对u盘某个绝对扇区进行读写的API函数?
一个读函数: 参数是(绝对扇区号,字节数) 一个写函数: 参数是(绝对扇区号,字节数) 本人在深圳,电话13798380489 szjhh@vip.sina.com 急,谢谢! |
|
最新喜欢:![]() |
沙发#
发布于:2005-01-12 22:07
这个跟你的u盘的固件程序有关,如果固件提供了接口那就好办,如果没有那就很麻烦,只有做u盘控制器的才能写哦!!
|
|
板凳#
发布于:2005-01-17 14:37
用CreateFile打开U盘后,就可以用ReadFile、WriteFile读写了。
根据绝对扇区号很容易得到这两个函数的参数了。 不用再编一个了吧。 |
|
|
地板#
发布于:2005-01-17 21:24
用CreateFile打开U盘后,就可以用ReadFile、WriteFile读写了。 怎么得到呢?我们根本不知道底下u盘是怎么组织文件系统的.... |
|
地下室#
发布于: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); |
|
|
5楼#
发布于:2005-01-18 17:26
老大,好像有误解哦。。
我觉得困难的地方不是因为USB设备的handler,而是我们不清楚底下U盘的扇区的组织情况。 |
|
6楼#
发布于:2005-01-18 17:53
老大,好像有误解哦。。 是啊。我让你看的是这两行 // 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的数据。 |
|
|
7楼#
发布于:2005-01-19 08:54
U盘用FAT表的
|
|
8楼#
发布于:2005-01-19 09:54
呵呵,不知道你做过u盘没有?u盘的flash是按block组织的(1block = 32pages, 1page = 512bytes,一般的flash是这样的),我们可能把flash的前面的block(比如block0)用来存储我们自己的信息,所以这个block在windows下一般是看不到的,只能在固件里看到。。。那么,其实所谓的MBR(硬盘里的第0扇区)就会从block1开始,所以按照你的方法只可以读写“相对”的扇区.......
|
|
9楼#
发布于:2005-01-26 19:26
要写你的U盘固件的人才可以,如果固件不提供此功能,在PC端是没办法实现的
|
|