lnt_ddn
驱动牛犊
驱动牛犊
  • 注册日期2004-03-06
  • 最后登录2012-02-02
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2050回复:3

怎样读取USB鼠标的HID描述符

楼主#
更多 发布于:2004-03-18 20:51
    我发送类型码为23的descriptor_request URB给USBDI,结果请求失败。chris cant的wdm驱动开发指南书上的例子却显示同样的方法读取USB键盘HID描述符成功。我觉得这种方法有问题,因为DDK文档上说descriptor_request URB用于获取device,configuration和string 描述符,没有讲到HID描述符。
    我又不知道该怎么做,哪位高手能解答一下?
lnt_ddn
驱动牛犊
驱动牛犊
  • 注册日期2004-03-06
  • 最后登录2012-02-02
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-20 19:44
更正一下,HID描述符已经在Configuration描述符中得到,我想请求的是HID report描述符。

urb类型为struct _URB_CONTROL_DESCRIPTOR_REQUEST
Index=0;
LangID=0;
DescriptorType=0x22;//for HID report descriptor
UsbBuildGetDescriptorRequest(urb,UrbSize,DescriptorType, Index, LangID,Descriptor, NULL, Size,NULL);

IoControlCode=IOCTL_INTERNAL_USB_SUBMIT_URB;
KeInitializeEvent(&event, NotificationEvent, FALSE);
PIRP Irp = IoBuildDeviceIoControlRequest(IoControlCode,
dx->NextStackDevice,NULL,0,NULL,0,TRUE,&event,&IoStatus);

PIO_STACK_LOCATION NextIrpStack = IoGetNextIrpStackLocation(Irp);
NextIrpStack->Parameters.Others.Argument1 = urb;
NTSTATUS status = IoCallDriver( dx->NextStackDevice, Irp);

if (status == STATUS_PENDING)
{
KeWaitForSingleObject( &event, Suspended, KernelMode, FALSE, NULL);
status = IoStatus.Status;
}
结果status报错
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-19 08:50
你的程序贴出来看
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-03-19 08:16
这个要设备响应正确后才完成这个IRQ的
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
游客

返回顶部