-
-
[求助]各位大大们,一个驱动导致蓝屏的问题,请帮忙给分析下,谢谢了
-
发表于: 2009-12-1 22:37 3389
-
驱动目的:是学习TDI驱动编程, 得到当前网络连接状况,得到每个网络连接的地址和端口信息。
方法思路:在驱动中过滤\device\tcp和\device\udp等设备对象的IRP_MJ_CREATE,该请求会生成网络连接的地址和端口信息,过滤这个请求,在完成例程中构建一个查询Irp,然后分发给该这些设备对象,当查询Irp被完成时,在查询IRp的完成例程输出地址和端口信息。
问题:当在第一个完成例程中 调用IoCallDriver分发查询Irp时,就蓝屏,代码有注释说明。
请各位大大们给分析指点下。我研究了两天了没找到问题,附件为驱动代码
方法思路:在驱动中过滤\device\tcp和\device\udp等设备对象的IRP_MJ_CREATE,该请求会生成网络连接的地址和端口信息,过滤这个请求,在完成例程中构建一个查询Irp,然后分发给该这些设备对象,当查询Irp被完成时,在查询IRp的完成例程输出地址和端口信息。
问题:当在第一个完成例程中 调用IoCallDriver分发查询Irp时,就蓝屏,代码有注释说明。
请各位大大们给分析指点下。我研究了两天了没找到问题,附件为驱动代码
////////////////////////////////////////////////////////////////////////// // //地址端口生成的Irp的完成例程,该例程在该例程中会调用IoCallDriver分发新的查询Irp //问题也就在这里,只要分发查询Irp,就会蓝屏 NTSTATUS tdi_create_addrobj_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context) { NTSTATUS status; PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation( Irp ); PIRP query_irp =(PIRP) Context; PDEVICE_OBJECT devobj = GetOrginalDeviceObject(DeviceObject); TDI_ADDRESS_INFO* tdi; PMDL mdl; KdPrint(("tdi_create_addrobj_complete\n")); if ( Irp->IoStatus.Status != STATUS_SUCCESS ) { goto done; } tdi = (TDI_ADDRESS_INFO *)ExAllocatePool(NonPagedPool, TDI_ADDRESS_INFO_MAX); if (tdi == NULL) { KdPrint(("[tdi_fw] tdi_create_addrobj_complete: ExAllocatePool!\n")); status = STATUS_INSUFFICIENT_RESOURCES; return status; } KdPrint(("tdi_create_addrobj_complete : ExAllocatePool\n")); mdl = IoAllocateMdl(tdi, TDI_ADDRESS_INFO_MAX, FALSE, FALSE, NULL); if (mdl == NULL) { KdPrint(("[tdi_fw] tdi_create_addrobj_complete: IoAllocateMdl!\n")); status = STATUS_INSUFFICIENT_RESOURCES; return status; } MmBuildMdlForNonPagedPool(mdl); TdiBuildQueryInformation(query_irp, devobj, irps->FileObject, tdi_create_addrobj_complete2, tdi, TDI_QUERY_ADDRESS_INFO, mdl ); KdPrint(("tdi_create_addrobj_complete : TdiBuildQueryInformation\n")); [B] [COLOR="red"]//把这句打开就会蓝屏,不分发该Irp就没有问题[/COLOR][/B] [B][COLOR="Red"]IoCallDriver( devobj, query_irp );[/COLOR][/B] done: if( Irp->PendingReturned ) { IoMarkIrpPending(Irp); } return STATUS_SUCCESS; }
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [讨论]Ntfs的小疑问,各位牛牛进来看看 6681
- 一个简单的编译问题 3094
- [原创]MDL学习笔记 5281
- [原创]计算机系学生大学四年应该这样过 3735
- [求助]各位大大们,一个驱动导致蓝屏的问题,请帮忙给分析下,谢谢了 3390
看原图
赞赏
雪币:
留言: