阅读:1501回复:9
读取管道信息的奇怪问题!问题已解决谢谢大家帮助!!!
小弟目前编写的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] |
|
|
沙发#
发布于:2002-12-13 21:17
嗯,初写driver的时候经常会有这样的小错误。
|
|
|
板凳#
发布于:2002-12-13 14:23
真是不好意思。诸位大侠小弟目前问题已经解决了!哎说出来可别
打我板子哦。请听我详细道来其实过了昨天由于板子另一个同事一 直在用我无法调试。翻看了许多资料于是怀疑是MDL出了问题加把 劲又详细研究了IRP的数据结构。开始我怀疑是IOCTL的代码定到 Microsoft的保留区去了检查一番并无问题。再一看天啊我竟敢将 IRP_MJ_DEVICE_CONTROL请求的控制代码指定METHOD_IN_DIRECT 赶紧将其改为METHOD_BUFFERED今天一调试果然万事大吉了。 希望我的一点教训能帮助那些初学驱动的朋友们少走弯路。 好了最后向所有帮助过我的朋友们说声谢谢!!! 好给分了!!! |
|
|
地板#
发布于:2002-12-13 13:45
RtlCopyMemory那些参数都是有效的吗?你看过了吗?!
|
|
|
地下室#
发布于:2002-12-12 15:47
大侠我当然是跟了,可到RtlCopyMemory就出页故障,然后再执行到
Irp->IoStatus.Information =DataLength;就退到App下死了,我还能怎么办呀。希望高手门不吝赐教。 |
|
|
5楼#
发布于:2002-12-12 11:43
用softice自己去跟啊!
|
|
|
6楼#
发布于: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] |
|
|
7楼#
发布于:2002-12-11 14:44
谢谢二位高人。哎犯低级错误了!!!
[编辑 - 12/11/02 by wfoog] |
|
|
8楼#
发布于:2002-12-11 10:15
把P去掉先!
这种问题真该打PP! :D |
|
|
9楼#
发布于:2002-12-11 09:55
PUSBD_INTERFACE_INFORMATION是个指针,在32bit x86上,当然只有4bytes啦!
|
|
|