WINCE6.0驱动问题

azhe   2008-10-20 17:27 楼主
有篇文章(具体原文在那,我找不到了)提到在FLASH驱动中函数
BOOL  FMD_OEMIoControl(DWORD dwIoControlCode, PBYTE pInBuf, DWORD nInBufSize, PBYTE pOutBuf, DWORD nOutBufSize, PDWORD pBytesReturned)
{
.........
.........
       case 0xff123456:
            FMD_ReadSector(..);                //调用读Sector函数
            break;
       case 0xff654321:
            FMD_WriteSector(..);                //调用写Sector函数
            break;
       case 0xff123457:
            FMD_EraseBlock(..);               //调用擦除Block函数
            break;
.........
.........
}
应用程序
hFirm = CreateFile(TEXT("DSK1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFirm == INVALID_HANDLE_VALUE)
{
  printf("Open Flash Device Failed");
  return 0;
}
iRet = DeviceIoControl(hFirm, 0xff123456, para1, para2, para3, para4, para5, para6);  //Read Flash Sector
iRet = DeviceIoControl(hFirm, 0xff654321, para1, para2, para3, para4, para5, para6);  //Write Flash Sector
iRet = DeviceIoControl(hFirm, 0xff123457, para1, para2, para3, para4, para5, para6);  //Erase Flash Block

在WINCE6.0中不能这么用,为什么?

回复评论 (5)

如果不行,那又该怎么写好呢?
点赞  2008-10-20 17:28
如果你的驱动是由Storage Manager加载的话,你应该调用OpenStore来打开,获得HANDLE
如果是由Device Manager加载的话,应该可以用CreateFile来打开
但这跟CE5.0还是6.0有关吗?
点赞  2008-10-20 17:43
可以像文章里面说的那样用的,我试过,成功过!估计你的IOCTL宏没有定义好.他说的只是一个示意的数字,你不能拿来就用啊!要自己去定义的!
点赞  2008-10-20 20:15
引用: 引用 2 楼 hzdysymbol 的回复:
如果你的驱动是由Storage Manager加载的话,你应该调用OpenStore来打开,获得HANDLE
如果是由Device Manager加载的话,应该可以用CreateFile来打开
但这跟CE5.0还是6.0有关吗?


高手
点赞  2008-10-20 20:26
引用: 引用 2 楼 hzdysymbol 的回复:
如果你的驱动是由Storage Manager加载的话,你应该调用OpenStore来打开,获得HANDLE
如果是由Device Manager加载的话,应该可以用CreateFile来打开
但这跟CE5.0还是6.0有关吗?

http://blog.eeworld.net/nanjianhui/archive/2008/03/19/2196466.aspx
原文在这里
谢谢大家的支持
我自己再弄一下
点赞  2008-10-21 10:01
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复