WinCE下的物理扇区读写

 
WinCE下的物理扇区读写
首先引用头文件:
#include "D://WINCE500//PUBLIC//COMMON//OAK//INC//Diskio.h"
看看你的PB是如何安装的,没有安装PB的朋友,给我留言吧,我把上述文件发给你。
 
打开磁盘:
hFile = CreateFile(_T("DSK2:"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
注意上述函数中的几个参数使用。打开磁盘后还要设置准备要读写的扇区位置,如下:
    SetFilePointer(hFile,sec_num * 512,0,FILE_BEGIN);
自己查一下MSDN上关于该函数的说明,要注意访问磁盘的位置一定是512的倍数。
 
写操作:
    SG_REQ sr; 
    memset(&sr,0x00,sizeof(SG_REQ));
    sr.sr_start = sec_st;                       // 从第几个扇区开始访问
    sr.sr_num_sec = sec_num;                    // 访问扇区的个数
    sr.sr_num_sg = 1; 
    sr.sr_status = 0;                           //ERROR_SUCCESS; 
    sr.sr_callback = NULL; 
    sr.sr_sglist[0].sb_buf = (LPBYTE)pBuf;      // 要写的内容,自己指定
    sr.sr_sglist[0].sb_len = len;               // 必须是的倍数,一个扇区字节
   
    // 写入
    DWORD    dRet = 0;
    ret = DeviceIoControl(hFile,DISK_IOCTL_WRITE,&sr,sizeof(SG_REQ),0,0,&dRet,NULL);
 
读操作:
和写操作类似,只是改动:
………….
sr.sr_sglist[0].sb_buf = (LPBYTE)pBuf;      // 要读的内容,自己指定缓存
………….
    ret = DeviceIoControl(hFile,DISK_IOCTL_READ,&sr,sizeof(SG_REQ),0,0,&dRet,NULL);
 
另外在WinCE下访问缓冲需注意字节个数问题,涉及UNICODE,不明白的朋友,声明空间时统统使用:
BYTE    buf[3000];        // 声明3000个字节的空间
BYTE    *pBuf = NULL;         // 声明指针
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值