zhaoaimin
驱动牛犊
驱动牛犊
  • 注册日期2003-11-10
  • 最后登录2003-11-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3732回复:27

用Createfile成功返回的句柄却不能读写,请教

楼主#
更多 发布于:2003-11-10 17:58
我用Createfile()成功返回读写句柄,然而用writefile,readfile却不行,请各位赐教
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-10 18:00
用户被禁言,该主题自动屏蔽!
lioniamhero
驱动小牛
驱动小牛
  • 注册日期2003-05-31
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-10 20:26
首先先确定到底是否正确返回了。
二再用调试软件来跟一下 。
pandengzhe
驱动中牛
驱动中牛
  • 注册日期2003-01-17
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-11 08:12
没那末简单。。。
大风卷兮,林木为摧,意苦若死,招憩不来。 百岁如流,富贵冷灰,大道日往,苦为雄才。 壮士拂剑,浩然弥哀,萧萧落叶,漏雨苍苔。
gaohtao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-20
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-11 09:02
也有可能是固件出问题,对你的请求输入、请求输出没有正确执行,当然不可能Read\\Write了。
yux008007
驱动牛犊
驱动牛犊
  • 注册日期2003-10-12
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-12 21:29
相同的问题,关注
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-27 11:19
现在我 的也出现了,有谁能回答。。。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-27 13:17
建议试一下DeviceIoControl。
snoopy_dl
驱动牛犊
驱动牛犊
  • 注册日期2003-01-21
  • 最后登录2004-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-07-27 16:32
我觉得是你没有正确的打开设备
你可以将你的打开句柄时,用到的GUID码贴出来大家看一下!
虚心向各位大虾请教~~~~~~ 争取自身的提高~~~~~~~~~~
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
snoopy_dl
驱动牛犊
驱动牛犊
  • 注册日期2003-01-21
  • 最后登录2004-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-27 22:40
我的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
 


可是你并没有打开pipe(通道)呀!
所以就不能对设备读写。
你用的是PDIUSBD12吗?
虚心向各位大虾请教~~~~~~ 争取自身的提高~~~~~~~~~~
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-27 23:11
是PDIUSBD12,可能是pipe的室,可是在哪儿设置啊?
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-07-28 10:08
我在createfile之前用strcat在devicePath上加了"\PIPE01"(“\PIPE02”),是不是就是打开了通道呢?

另外那些返回值不知道对不对?


[编辑 -  7/28/04 by  billy2004]
snoopy_dl
驱动牛犊
驱动牛犊
  • 注册日期2003-01-21
  • 最后登录2004-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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打开。
我用这样的方法实现过!
虚心向各位大虾请教~~~~~~ 争取自身的提高~~~~~~~~~~
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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

                        
snoopy_dl
驱动牛犊
驱动牛犊
  • 注册日期2003-01-21
  • 最后登录2004-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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"
虚心向各位大虾请教~~~~~~ 争取自身的提高~~~~~~~~~~
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-07-30 08:00
还是没搞出来,快不行了
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-07-30 08:51
用SoftIce跟踪一下,看Write和 Read时驱动是不是正确执行了,最后应该是调用CallDriver后返回,如果都对的话就是firmware有问题了
zfw
ip4347
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
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]
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-07-30 15:46
十有八九是GUID的事,你再查一下GUID获取的对不对
上一页
游客

返回顶部