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;         // 声明指针
 
 
 

你可能感兴趣的:(File,null,callback,byte,WinCE,磁盘)