wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1500回复:9

读取管道信息的奇怪问题!问题已解决谢谢大家帮助!!!

楼主#
更多 发布于:2002-12-10 16:21
小弟目前编写的USB设备驱动,大致成功了!但目前我有一疑问
就是在读取管道信息描述符时。单独读取管道数时我严格按照
DDK对成员项的数据类型定义,分配了内存可一RTL拷贝时,用SoftIce一跟踪就发现它发生了页故障。而如果我将Interface信息
一起读出却又发现读取失败。
后来了我在用户模式下看
sizeof(PUSBD_INTERFACE_INFORMATION)怎么只有4字节而在
跟踪驱动却发现PUSBD_INTERFACE_INFORMATION->Length =38
我想请教大家这是怎么回事。

[编辑 -  12/10/02 by  wfoog]

[编辑 -  12/12/02 by  wfoog]

[编辑 -  12/13/02 by  wfoog]
阿弥陀佛!阿弥陀佛!阿弥陀佛!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-11 09:55
PUSBD_INTERFACE_INFORMATION是个指针,在32bit x86上,当然只有4bytes啦!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-11 10:15
把P去掉先!
这种问题真该打PP! :D
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-11 14:44
谢谢二位高人。哎犯低级错误了!!!

[编辑 -  12/11/02 by  wfoog]
阿弥陀佛!阿弥陀佛!阿弥陀佛!
wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-12 10:23
我想再请教一下诸位高手。我将以前的低级错误改掉后,可管道
信息读取还是出现页故障:(。

代码见下:
app:
ULONG DataLength;
PUSBD_INTERFACE_INFORMATION pDataBuffer;
pDataBuffer= new  USBD_INTERFACE_INFORMATION;
DataLength=sizeof(USBD_INTERFACE_INFORMATION);
ULONG ByteCount=0;

if (FileHandle != INVALID_HANDLE_VALUE)
{
status = DeviceIoControl(
FileHandle,
IOCTL_TOPUSB_GET_InterfaceInfo,        NULL,
0,
pDataBuffer,
DataLength,
&ByteCount,
NULL
);
调用以上DeviceIoControl函数即进入驱动程序(拷贝Interface信息时出现页故障)
...其它App下代码略

-----------------------------------------------------------
Driver:
PDEVICE_EXTENSION pdx =
(PDEVICE_EXTENSION )DeviceObject->DeviceExtension;
......
......
switch (ioControlCode)
{  
  case IOCTL_TOPUSB_GET_InterfaceInfo:
  {
    
    pch = (PUCHAR) ioBuffer;
    InterfaceInfo=pdx->Interface;
    DataLength=InterfaceInfo->Length;
    
    if (outputBufferLength >= DataLength)
    {  
      RtlCopyMemory(pch,
                    (PUCHAR) InterfaceInfo,
                    DataLength);

      Irp->IoStatus.Information =DataLength;
      Irp->IoStatus.Status = STATUS_SUCCESS;
    }
    
    else
    {
      Irp->IoStatus.Information = 0;
      Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
    }
    
    break;
  }
}

望个路高手出手相救,小弟感激不尽。谢谢谢谢!!!

 

[编辑 -  12/12/02 by  wfoog]

[编辑 -  12/12/02 by  wfoog]
阿弥陀佛!阿弥陀佛!阿弥陀佛!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-12 11:43
用softice自己去跟啊!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-12 15:47
大侠我当然是跟了,可到RtlCopyMemory就出页故障,然后再执行到
Irp->IoStatus.Information =DataLength;就退到App下死了,我还能怎么办呀。希望高手门不吝赐教。
阿弥陀佛!阿弥陀佛!阿弥陀佛!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-13 13:45
RtlCopyMemory那些参数都是有效的吗?你看过了吗?!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
wfoog
驱动牛犊
驱动牛犊
  • 注册日期2002-11-20
  • 最后登录2003-04-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-13 14:23
真是不好意思。诸位大侠小弟目前问题已经解决了!哎说出来可别
打我板子哦。请听我详细道来其实过了昨天由于板子另一个同事一
直在用我无法调试。翻看了许多资料于是怀疑是MDL出了问题加把
劲又详细研究了IRP的数据结构。开始我怀疑是IOCTL的代码定到
Microsoft的保留区去了检查一番并无问题。再一看天啊我竟敢将
IRP_MJ_DEVICE_CONTROL请求的控制代码指定METHOD_IN_DIRECT
赶紧将其改为METHOD_BUFFERED今天一调试果然万事大吉了。
希望我的一点教训能帮助那些初学驱动的朋友们少走弯路。
好了最后向所有帮助过我的朋友们说声谢谢!!!
好给分了!!!
阿弥陀佛!阿弥陀佛!阿弥陀佛!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-13 21:17
嗯,初写driver的时候经常会有这样的小错误。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部