阅读:1104回复:1
请教,关于pipehandle的问题
目前,代码如下实现是没问题的:
(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该如何获取呢? |
|
沙发#
发布于:2008-08-07 09:09
自己顶下。
哪位高手帮我分析下,这个有可能实现吗? |
|