阅读:1517回复:3
DS2.7 自己创建的MDL, 蓝屏。 谢谢!
想用自己的MDL代替传下来的MDL。
在OnStartDevice(KIrp I)中分配非分页内存: pBuffer = ( PUCHAR ) ExAllocatePool( NonPagedPool, 2457600); if( pBuffer == NULL) return STATUS_NO_MEMORY; 在Read(KIrp I)中: ..... KMemory membuffer(pBuffer,2457600); membuffer.LockPages(IoReadAccess, KernelMode ); for(int j=0;j<1;j++){ // Create an URB to do actual Bulk read from Pipe0 PURB pUrb = m_Endpoint2IN.BuildBulkTransfer( membuffer, // Where is data coming from? dwTotalSize, // How much data to read? TRUE, // direction (TRUE = IN) NULL // Link to next URB ); membuffer.UnlockPages(); ............ 蓝屏IRQL_NOT_LESS_OR_EQUAL,驱动程序在等于或高于DISPATCH_LEVEL的IRQL上访问分页内存,可我分配的是非分页的! |
|
沙发#
发布于:2004-09-02 18:21
你在哪个地方出错的,最好定位到汇编代码,用C++的代码根本就无法了解。。。。。
|
|
|
板凳#
发布于:2004-09-03 16:50
首先你一次搞走2M的NONPAGED POOL是很愚蠢的做法.
其次NONPAGED POOL不需要LOCK. UNLOCK.因为不被PAGE OUT. 再着NONPAGED的MDL用MmBuildMdlForNonPagedPool |
|
|
地板#
发布于:2004-09-04 14:09
见笑了,我很菜。
我不用LOCK、UNLOCK也不行,表现为系统重启。 我想在驱动中用缓冲存放三张完整的图象数据,每张要用1024x768x2个字节,所以要2.5Mx3。 MmBuildMdlForNonPagedPool是DDK的吧,我想用DS中的KMemory类来搞定。 多谢回答。 |
|