阅读:3732回复:27
用Createfile成功返回的句柄却不能读写,请教
我用Createfile()成功返回读写句柄,然而用writefile,readfile却不行,请各位赐教
|
|
沙发#
发布于:2003-11-10 18:00
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-11-10 20:26
首先先确定到底是否正确返回了。
二再用调试软件来跟一下 。 |
|
地板#
发布于:2003-11-11 08:12
没那末简单。。。
|
|
|
地下室#
发布于:2003-11-11 09:02
也有可能是固件出问题,对你的请求输入、请求输出没有正确执行,当然不可能Read\\Write了。
|
|
5楼#
发布于:2003-12-12 21:29
相同的问题,关注
|
|
6楼#
发布于:2004-07-27 11:19
现在我 的也出现了,有谁能回答。。。
|
|
7楼#
发布于:2004-07-27 13:17
建议试一下DeviceIoControl。
|
|
8楼#
发布于:2004-07-27 16:32
我觉得是你没有正确的打开设备
你可以将你的打开句柄时,用到的GUID码贴出来大家看一下! |
|
|
9楼#
发布于:2004-07-27 22:29
我的GUID是:
0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); SetupDiGetClassDevs 返回0x0016fa30 SetupDiEnumDeviceInterfaces 返回 true functionClassDeviceData->DevicePath返回 "\?usbstor#disk&ven_&prod_&rev_#6&381fcd8&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}" createfile 返回 0x00000768 不知道这些返回值对不对? [编辑 - 7/28/04 by billy2004] |
|
10楼#
发布于:2004-07-27 22:40
我的GUID是: 可是你并没有打开pipe(通道)呀! 所以就不能对设备读写。 你用的是PDIUSBD12吗? |
|
|
11楼#
发布于:2004-07-27 23:11
是PDIUSBD12,可能是pipe的室,可是在哪儿设置啊?
|
|
12楼#
发布于:2004-07-28 10:08
我在createfile之前用strcat在devicePath上加了"\PIPE01"(“\PIPE02”),是不是就是打开了通道呢?
另外那些返回值不知道对不对? [编辑 - 7/28/04 by billy2004] |
|
13楼#
发布于:2004-07-28 11:28
我在createfile之前用strcat在devicePath上加了"PIPE01"(“PIPE02”),是不是就是打开了通道呢? 你可以试试在你的functionClassDeviceData->DevicePath返回 "?usbstor#disk&ven_&prod_&rev_#6&381fcd8&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}\\PIPE00"(PIPE00--对应端点1IN,PIPE01-对应端点1OUT,,PIPE02-对应端点2IN,PIPE03-对应端点2OUT)。然后再用CreateFile打开。 我用这样的方法实现过! |
|
|
14楼#
发布于:2004-07-28 15:37
一共调用了两次createfile:
第一次调用: hOut = CreateFile ( functionClassDeviceData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); //这时functionClassDeviceData->DevicePath: //0x00c21774 "\\?\usb#vid_0471&pid_0100#5&378d755d&0&1#{f16328af-4480-4b18-b028-51301beb166d}" //这一次打开usb设备 ,creatrfile返回: 0x00000748 第二次调用: strcat (completeDeviceName, "\\PIPE2" ); h = CreateFile( completeDeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); //这时completeDeviceName的值是 //0x005e5e30 "\\?\usb#vid_0471&pid_0100#5&378d755d&0&1#{f16328af-4480-4b18-b028-51301beb166d}\PIPE2" //这一次打开usb设备的端点, createfile 的返回值还是0x00000748 |
|
15楼#
发布于:2004-07-28 15:57
strcat (completeDeviceName,
"\\\\PIPE02" ); h = CreateFile( completeDeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); 这时completeDeviceName的值是0x005e5e30 "\\\\?usb#vid_0471&pid_0100#5&378d755d&0&1#{f16328af-4480-4b18-b028-51301beb166d}\\\\PIPE02" |
|
|
16楼#
发布于:2004-07-30 08:00
还是没搞出来,快不行了
|
|
17楼#
发布于:2004-07-30 08:51
用SoftIce跟踪一下,看Write和 Read时驱动是不是正确执行了,最后应该是调用CallDriver后返回,如果都对的话就是firmware有问题了
|
|
|
18楼#
发布于:2004-07-30 11:19
我用的是usb9603,
固件已经调好了,用ds生成了了一个简单代码框架 问题如下: 首先,sys目录下面的sys驱动是否要在exe程序运行前,给设备加载上去? 其次,调试exe代码时 hDevice = OpenByInterface( &ClassGuid, 0, &Error); 返回了一个INVALID_HANDLE_VALUE 其中 CDeviceInterfaceClass DevClass(pClassGuid, pError); 得到的guid为{4CCE721E-692D-4A12-B388-0FB9C7FB134D}; CDeviceInterface DevInterface(&DevClass, instance, pError); 却返回了INVALID_HANDLE_VALUE, SetupDiEnumDeviceInterfaces 返回了0 不知道这是什么原因导致的 请大家帮忙分析一下,谢谢 [编辑 - 7/30/04 by ip4347] |
|
19楼#
发布于:2004-07-30 15:46
十有八九是GUID的事,你再查一下GUID获取的对不对
|
|
上一页
下一页