收录日期:2021/01/23 05:31:24 时间:2016/07/12 06:44:45 标签:Windows客户端开发
我是写的应用程序,直接通过手机向存储卡的flash中的指定扇区写入数据,代码如下。
#include “diskio.h”
//DSK号可能是0~9,可以通过VS2005的Remote Register Editor察看。其他参数各位各异查阅MSDN
HANDLE g_file = CreateFile(_T("DSK1:"), 
GENERIC_READ | GENERIC_WRITE, 
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, 
OPEN_EXISTING, 
0, 
NULL);

if( g_file == INVALID_HANDLE_VALUE ) // Open disk failure!!!
{
CloseHandle(g_file);
}

DWORD sec_num = 5;
BYTE bufer[512] = {0},buffer2[512] = {0};
memset(bufer,0x00,512);
bufer[1]=0x08;
bufer[2]=0x53;
bufer[3]=0xAC;
memset(buffer2,0x00,512);

DWORD res = 0,len=0;

SG_REQ sg;

sg.sr_start  = 640;
sg.sr_num_sec = 1;
sg.sr_num_sg = 1;
sg.sr_status = 0;
sg.sr_callback = NULL;
sg.sr_sglist[0].sb_buf = bufer;
sg.sr_sglist[0].sb_len = 512;
DISK_INFO diskinfo;
//res = LoadFSD(g_file,_T("MMC"));
res=DeviceIoControl(g_file,
DISK_IOCTL_WRITE, 
 &sg,
 sizeof(SG_REQ), 
 0,
 0, 
&len, 
NULL
);
sg.sr_sglist[0].sb_buf = buffer2;
res=DeviceIoControl(g_file,
DISK_IOCTL_READ, 
 &sg,
 sizeof(SG_REQ), 
 0,
 0, 
&len, 
NULL
);
if(res == 0)
{
len = GetLastError();
}
以上是我的代码,已经通过了测试,下面讲解以下,小弟水平有限,有些不专业的地方,请各位大虾不要见怪!
1 diskio.h是WinMobile上SDMemory.dll中用到的IOCTL命令的集合。在WinMobile 5.0和6.0 SDK中是没有的。需要将该头文件添加到工程中去。可以去网上找找或者在wince的开发环境中找到的。

       目前已经在Windows2000和XP上试验过格式化之后的情况,全部正常。

       2 利用CreateFile获得设备句柄,请参考源代码。

       3 利用DeviceIoControl进行设备访问。通过diskio.h中的IOCTL可以设置该函数功能。附件中列出了如何写的操作,在此函数中需要注意。

         (1)DeviceIoControl()参数,分别为:句柄,命令,inbuffer,insize,outbuffer,outsize,returnsize,lpOverlapped

        (2)读写操作使用SG_REQ结构体的参数问题。使用DISK_IOCTL_WRITE和DISK_IOCTL_READ,注意读写操作都是只使用inbuffer,insize参数,out均设置为空,

         (3)获取和设置设备参数使用DISK_IOCTL_GETINFO和DISK_IOCTL_SETINFO,结构体使用DISK_INFO diskinfo,用法和

自己坐沙发
这么底层啊:)
赞~~~

给我一点您的意见,谢谢! 如何在SQL SERVER 2000中加入文件附件拉? 动态连接库的调用,如下面的函数如何动态调用? 一个查询结果显示的问题 小问题 什么是数据源? 图标移动地问题 各位高手,出现‘无法为更新行集定位,一些值可能在最后读取后改变‘的错误,这是为什么阿??SOS! 原有的ASP数据库文件,在NET环境下为何不能显示(请众高手帮忙) KDE和GONE两个环境,我该在哪个环境下开发软件呢?能正常运行另一个环境吗? 急征:软件工程学院的现在及前景!!! java中如何实现语音采集? 如何判断内存是pc133还是pc100? 不知可否利用javascript脚本,给下拉框添加选项????????? 普渡众生 ... 请问在DW中编辑焦点离开一个字段的事件是什么?怎样得到被离开这个字段的dwo? 菜鸟系列:这是什么错误,如何改正? 关如湖南 给些 计算机通信 书下载地址好吗 我想找office2000 development Kit ,不知道有谁见过? 第一次正面交锋,sumarstar 输给“西瓜”JJ! 怎样用C++BUILDER编写关于COM口通讯程序? value and reference 我穷得就剩\"钱\"了 ... 请问在DW中编辑焦点离开一个字段的事件是什么?同时怎样得到被离开这个字段的dwo? 如何设置IE的安全级别,才允许JavaScript调用ActiveX的方法? 泰山的问题。。。。。。。。。。。。。。。。。。。。 是否可以动态运行代码,即我的程序运行后,执行一段用户输入或来自数据源的代码,像动态执行一段script一样,重点请acptvb(微软全球技术中心 如何更改一个工程的工程名? 急,一个是怎么样在网页中实现就算点浏览器的后退它也会自动重新更新?还有一个见内。