maggie_zhy
驱动牛犊
驱动牛犊
  • 注册日期2008-06-23
  • 最后登录2008-09-10
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1104回复:1

请教,关于pipehandle的问题

楼主#
更多 发布于:2008-08-05 13:23
目前,代码如下实现是没问题的:
(1)在上层应用程序中,打开读写两个pipe,分别读写;
hRead  = CreateFile(inpipe_DeviceName,GENERIC_WRITE | GENERIC_READ,
                  FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
hWrite = CreateFile(outpipe_DeviceName,GENERIC_WRITE | GENERIC_READ,
                  FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
 
//先写一个命令帧
    DeviceIoControl(hWrite,IOCTL_WRITE,buf1,siz,buf2,siz,&nBytes,NULL);
//然后读取USB设备响应帧
    DeviceIoControl(hRead, IOCTL_READ,buf1, siz,buf2,siz,&nBytes,NULL);
 
CloseHandle(hRead);
CloseHandle(hWrite);
 
(2)在USB驱动中:
收到IRP_MJ_DEVICE_CONTROL,根据irpStack->Parameters.DeviceIoControl.IoControlCode区分是要read还是write,
 
然后创建URB读写数据都没问题。
 
------
 
现在问题在于,上层只能通过一次IOCTL告诉驱动要做什么,
hDEV = open_dev();
DeviceIoControl(hDEV,IOCTL_READREG,buf1,siz,buf2,siz,&nBytes,NULL);
然后驱动收到IRP_MJ_DEVICE_CONTROL后,根据上层需要读取哪个寄存器值,先发送一个命令帧,然后接收USB设备响应帧,再返回给上层。这个过程中需要两个pipe,一个读一个写,之前的pipehandle是从上层获取的,现在怎么做呢?
 
我尝试了上层使用hWrite,驱动收到命令后,先发出命令帧,然后将 irpStack->FileObject->FsContext这个参数修改为之前保存下来的inpipehandle,读数据时候就会重启。好像和pipehandle相关的,不止这一个参数啊。
 
请问,驱动获得一个IRP_MJ_DEVICE_CONTROL,然后先write再read,这个有可能实现吗?pipehandle该如何获取呢?
maggie_zhy
驱动牛犊
驱动牛犊
  • 注册日期2008-06-23
  • 最后登录2008-09-10
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望25点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-08-07 09:09
自己顶下。

哪位高手帮我分析下,这个有可能实现吗?
游客

返回顶部