阅读:3141回复:7
高分救急:IoFreeMdl出错,现在连操作系统都进不了了,怎么办
我只是把我的代码中添加了IoFreeMdl()而已,怎么会这样子的呢?
我代码中使用了MDL,我通过IoAllocateMdl创建了一个MDL,然后对它MmProbeAndLockPages().本来我是没有释放我的MDL的,运行时也没有出错,但当我添加了IoFreeMdl后,运行时就出现蓝屏,然后我就重起调试,重复了几次后就再也进不去了。 是IoFreeMdl的问题吗?可是我觉得是应该调用的啊 系统是WIN2000,现象是当WIN2000载入到最后是,跳出蓝屏,错误是 STOP:0x00000051 REGISTRY_ERROR 我试图从安全模式进入,一样的结果,该怎么办?重装系统吗?太耗时间了,而且到时候说不定再出现这样的状况,还是没用。 大家帮忙啊,分数可以再加的 |
|
沙发#
发布于:2003-07-24 10:50
1.先把相应的设备拆下,看能否启动。
2.选择最近的一次启动设置试试。 |
|
板凳#
发布于:2003-07-24 16:15
释放前有没有调用MmUnlockPages?
试试软盘启动,把你那个DRIVER删除掉再重起。 |
|
地板#
发布于:2003-07-24 16:41
释放前有没有调用MmUnlockPages? 调用了,我的程序是想在TDI中发送和接收数据,发送代码如下 NTSTATUS TdiSend( IN PFILE_OBJECT pEndPointObject, IN PVOID pBuffer, IN ULONG Length ) { PDEVICE_OBJECT pDeviceObject; KEVENT Event; IO_STATUS_BLOCK IoStatus; PIRP pIrp; PMDL pMdl; NTSTATUS status; dprintf(\"Sending...\\n\"); pDeviceObject = IoGetRelatedDeviceObject(pEndPointObject); KeInitializeEvent(&Event, NotificationEvent, FALSE); pIrp = TdiBuildInternalDeviceControlIrp( TDI_SEND, pDeviceObject, pEndPointObject, &Event, &IoStatus ); if( NULL == pIrp ) { dprintf(\"TdiSend():Insufficient Resources\\n\"); return STATUS_INSUFFICIENT_RESOURCES; } pMdl = IoAllocateMdl( pBuffer, Length, FALSE, FALSE, pIrp ); if( NULL == pMdl ) { dprintf(\"TdiSend():Fail to allocate the mdl\"); return STATUS_INSUFFICIENT_RESOURCES; } MmProbeAndLockPages( pMdl, KernelMode, IoModifyAccess ); TdiBuildSend( pIrp, pDeviceObject, pEndPointObject, NULL, NULL, pMdl, 0, Length ); status = IoCallDriver(pDeviceObject, pIrp); if( STATUS_PENDING == status ) { dprintf(\"Waiting to send\"); status = KeWaitForSingleObject(&Event, UserRequest, KernelMode, FALSE, 0); } if( !NT_SUCCESS(status) ) { dprintf(\"Fail to Send\\n\"); return status; } if( !NT_SUCCESS(IoStatus.Status) ) { dprintf(\"Fail to Send\\n\"); return IoStatus.Status; } dprintf(\"Success to Send %u bytes\\n\", IoStatus.Information); MmUnlockPages(pMdl); IoFreeMdl(pMdl); return IoStatus.Status; } 就是这样的,结果是如果把 IoFreeMdl(pMdl); 注释掉的话就没什么问题,但是肯定应该释放的呀 |
|
地下室#
发布于:2003-07-25 08:51
MmUnlockPages(pMdl) 与 IoFreeMdl(pMdl)之间加延时试试看。
另外,把系统重装后做个ghost放在后面的分区。调驱动时把系统搞当掉是经常的事。 |
|
|
5楼#
发布于:2003-07-25 16:09
我已经重装系统了,也做了GHOST,
现在的问题是我那IoFreeMdl()上,我决定另开一贴,希望大家支持 |
|
6楼#
发布于:2011-05-17 11:00
我查了半天,貌似是不用释放的,好多代码里都这样,可能与TdiBuildInternalDeviceControlIrp申请的irp一样,自动释放
|
|
7楼#
发布于:2011-05-17 11:00
这都是03年的帖子了。
|
|