jilu_sun
驱动牛犊
驱动牛犊
  • 注册日期2005-01-12
  • 最后登录2005-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1570回复:5

如何使用Createfile函数得到设备句柄

楼主#
更多 发布于:2005-01-12 13:38
请教各位大侠!
如何得到usb设备的句柄(handle)?
我的设备信息如下:
Signature="$CHICAGO$"
Class=USB
ClassGUID={36fc9e60-c465-11cf-8056-444553540000}
provider=%Anchor%
DriverVer= 05/17/2002,3.0.0.0

%EzUsb_Desc%=EZUSB_Inst, USB\VID_0547&PID_1002
%EzLoader_Desc%=EZLOADER_Inst, USB\VID_0547&PID_2131

Anchor="AnchorChips"
EzUsb_Desc="Anchor Chips EZ-USB Generic Device"
EzLoader_Desc="Anchor Chips EZ-USB Loader(2131Q/2131S/2135S) - EEPROM missing"
各位老大帮帮忙啊!
焦急等待中!

最新喜欢:

phoenix_lueiphoeni...
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-01-12 14:29
那得支持IRP_MJ_CREATE才行
---内核开发合作或提供基础技术服务QQ:22863668 ---
jilu_sun
驱动牛犊
驱动牛犊
  • 注册日期2005-01-12
  • 最后登录2005-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-12 14:53
谢谢楼上的回复!IRP_MJ_CREATE是什么?
我对硬件也不是太了解,现在要调用厂商提供的dll中的函数,
但是函数中都有一个设备句柄参数,这个句柄如何得到?需要哪些信息呢?紧急求救啊!!!
hero_xue
驱动牛犊
驱动牛犊
  • 注册日期2004-11-15
  • 最后登录2005-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-12 19:44
我觉得2楼说得不对!
要取得指定GUID设备的句柄,可以通下以下方法:
1)根据GUID取得这类设备接口句柄
// setup api, get class devices: list all devices belonging to the uuid of the usbprt interface that are present
hDev = SetupDiGetClassDevs(
ClassGUID,
NULL,
NULL,
DIGCF_PRESENT|DIGCF_INTERFACEDEVICE
 );
2)如果这类接口下的设备有多个,枚举此类下的各个设备
// enumerate the device interfaces in the set created above
rv = SetupDiEnumDeviceInterfaces(hDev, NULL, guidUsbPrt, index, &devIntData);

3)获得各子项具体设备的详细信息.
rv  = SetupDiGetDeviceInterfaceDetail(hDev, &devIntData, devIntDetail, sizeof(ditBuf), &cbNeeded, NULL);

4)上项中的devIntDetail->DevicePath即为你所要的所需的设备句柄
hior = CreateFile(
devIntDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);


上面用到的各函数API均可在MSDN上查出其具体参数应用方法,不再细述.
jilu_sun
驱动牛犊
驱动牛犊
  • 注册日期2005-01-12
  • 最后登录2005-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-13 14:12
To:hero_xue
  非常感谢你的回复,但是在SetupDiEnumDeviceInterfaces 函数中guidUsbPrt,devIntData这些参数如何指定?恳请大侠再指导指导!!!!
hero_xue
驱动牛犊
驱动牛犊
  • 注册日期2004-11-15
  • 最后登录2005-02-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-13 19:21
guidUsbPrt=ClassGUID={0x36fc9e60,0xc465,0x11cf,0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00};


typedef struct _SP_DEVICE_INTERFACE_DATA {
    DWORD cbSize;
    GUID  InterfaceClassGuid;
    DWORD Flags;
    DWORD Reserved;
} SP_DEVICE_INTERFACE_DATA;

typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
    DWORD  cbSize;
    CHAR   DevicePath[ANYSIZE_ARRAY];
} SP_DEVICE_INTERFACE_DETAIL_DATA;

SP_DEVICE_INTERFACE_DATA devIntData;
SP_DEVICE_INTERFACE_DETAIL_DATA *devIntDetail;


备注: devIntData是一个OUTPUT的参数,不用指定值,只要求开辟一个存储空间就可以了!
游客

返回顶部