阅读:941回复:3
读取urb里的数据,为什么会page fault?
我写的是usbstor.sys的下层驱动,监视它往usb发送的数据。当我收到_URB_BULK_OR_INTERRUPT_TRANSFER的URB时,就从其TransferBuffer(当TransferBuffer !=NULL时)开始,调试输出一串长度为TransferBufferLength 的数据。为什么会page fault?
3x@Q |
|
沙发#
发布于:2003-04-11 09:49
请问你确定page fault是读取urb数据引起的么?
如果是的话,请问你是如何用urb数据buffer指针的? TransferBufferLength是以字节为单位的,不知道你是如何转换PVOID指针的 |
|
|
板凳#
发布于:2003-04-11 13:30
以(UCHAR*)转换的。以下是我的调试输出函数调用。如果我把下面这句注释掉的话,就不会pagefault。
DbgDataOut( (UCHAR*)pUrbBulk->TransferBuffer, pUrbBulk->TransferBufferLength); 输出函数定义为: OID DbgDataOut(UCHAR* pData, ULONG ulDataLength) { for(ULONG i = 0; i< ulDataLength; i++) { t.Trace(TraceAlways,\"%02x \", pData); if( (i+1)%8 == 0 ) { t<<\"\\n\"; } else if( (i+1)%4 == 0 ) { t<<\"-- \"; } } } 其中t.Trace是用的DS的函数,相当于ddk的DbgPrint。 |
|
地板#
发布于:2003-04-11 16:59
我没用过ds的这个函数
你用DbgPrint 和 ((PUCHAR)pData)++试一下呢? 我是菜鸟,不对的话,请多包涵 |
|
|