zhuge36
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望31点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1517回复:3

DS2.7 自己创建的MDL, 蓝屏。 谢谢!

楼主#
更多 发布于:2004-09-02 17:33
想用自己的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上访问分页内存,可我分配的是非分页的!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-09-02 18:21
你在哪个地方出错的,最好定位到汇编代码,用C++的代码根本就无法了解。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-03 16:50
首先你一次搞走2M的NONPAGED POOL是很愚蠢的做法.
其次NONPAGED POOL不需要LOCK. UNLOCK.因为不被PAGE OUT.
再着NONPAGED的MDL用MmBuildMdlForNonPagedPool
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
zhuge36
驱动牛犊
驱动牛犊
  • 注册日期2003-07-18
  • 最后登录2010-10-31
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望31点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-04 14:09
见笑了,我很菜。
我不用LOCK、UNLOCK也不行,表现为系统重启。
我想在驱动中用缓冲存放三张完整的图象数据,每张要用1024x768x2个字节,所以要2.5Mx3。
MmBuildMdlForNonPagedPool是DDK的吧,我想用DS中的KMemory类来搞定。
多谢回答。
游客

返回顶部