#1楼主:createfile,deviceioctl的使用问题
文章发表于:2008-08-14 12:50
createfile中的第一个参数怎么获得呢?用setup中的api列举某个类的usb可得到ID
,windows中USB的驱动GUID在REGEDIT\usb中可得到,若我插入一个带USB接口的
ARM板,没有产品id,用windows的默认驱动,那么PC是怎么用createfile,deviceioctl
与arm通信的呢?这时的ID是window的compatible ID吗?怎么获得呢?望各位赐教!!
#2
文章发表于:2008-08-14 20:27
那要看你的设备是什么类型的了,是什么类型的就要在某个类下去查找,找到设备后,就可用createfile打开设备了。
#3
文章发表于:2008-08-18 19:35
你好!圈圈大哥.
我现在又遇到这样一个情况:当 我把GUID号用
DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,0x36FC9E60,0xC465,0x11CF,0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00)
之后就出现了问题:
testUSBDlg.obj : error LNK2001: unresolved external symbol _GUID_DEVINTERFACE_USB_DEVICE
Debug/testUSB.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
我看你的例程里有两个GUID,一个是GUID_DEVINTERFACE_COMPUTER00USB,还有一个是GUID_DEVCLASS_COMPUTER00USB,那么加载驱动用的是那个GUID呢? 你说后面这个是SETUP CLASS GUID,那我枚举HUB下的所有NODE,DeviceIoControl(Hub,
IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
得到的到底是那个GUID呢?
w
#4
文章发表于:2008-08-19 10:40
应该是接口类ID(即DEVINTERFACE),安装类ID只在安装时使用,一般访问驱动很少用它的。
具体你可以看这个函数的说明。GUID有两类,一类是安装类,另一类是接口类。分别在注册表的不同位置。在我的新书中说明了这个,嘿嘿~~~
#5
文章发表于:2008-08-19 12:17
谢谢!
介绍下你的新书吧!怎么买的到
呵呵
#6
文章发表于:2008-08-19 13:25
圈圈大哥:我怎么加了下划线后就出现这个错误啊,能帮忙解答一下吗,
e:\program files\microsoft visual studio\myprojects\testusb\iocontrol.h(14) : error C2501: '_DEFINE_GUID' : missing storage-class or type specifiers
e:\program files\microsoft visual studio\myprojects\testusb\iocontrol.h(14) : error C2078: too many initializers
我怎么在USB.INF文件中没看到有接口类啊,,只有classGuid
#7
文章发表于:2008-08-19 13:39
还有一个问题就是driver guid {36FC9E60-C465-11CF-8056-444553540000}\0013 ,后面这个0013是什么意思啊
谢谢圈圈大哥!
#8
文章发表于:2008-08-19 23:05
0013我也不知道啥意思
INF文件中只有CLASS GUID的,就是安装类GUID。
而接口类GUID则在驱动程序的代码中,你可以看我以前的驱动程序包实例。
#9
文章发表于:2008-08-20 08:50
谢谢!
搞了半天,原来我只是获得了安装类GUID,难怪实现与USB的通信还是不行,那么是否可以通过WIN中的API函数获得驱动程序的GUID呢?我通过这个安装类GUID却能获得设备的VID和ID,这该怎么解释呢?是否可通过他两获取接口的GUID呢?
麻烦圈圈大哥帮忙解答一下!
#10
文章发表于:2008-08-20 22:06
这个我也不清楚哦,你找找看MSDN中的相关函数看有没有,理论上是可以的,因为这些信息都记录在注册表中,人工都可以把它们弄出来,应该有相关API函数吧。
#11
文章发表于:2008-08-21 12:40
谢谢哦~~
我对固件程序的运行还有点迷糊:主机对USB的请求包,USB一般都得响应,响应函数对包的信息分析到底是那个事件(IN/OUT/SETUP...),端口是怎么判断这些事件的呢(例如:EP2 bulk in/out,它收到一个主机的一个包,它是怎么分析这个包是ARK,或是OUT的呢)
(还有,那么主机对USB的配置是在USB初始化并与主机连接后才发生的,0口对其响应,其他端口对主机请求是怎么识别的呢)。信息包经过USB的SIE引擎解码成什么格式呢,(我看你那有一个control_data存储控制传输得数据,调用endpoint0-out之前并未看到将数据存储到里面啊)
圈圈大哥能帮忙解答下吗!谢了