能力值:
( LV12,RANK:760 )
2 楼
close处理有问题
能力值:
( LV2,RANK:10 )
3 楼
十分感谢您的回答
我是这样编写的:
NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
pIrp->IoStatus.Status = STATUS_SUCCESS;
pIrp->IoStatus.Information = 0;
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
KdPrint (("close\n"));
return STATUS_SUCCESS;
}
请问如何修改才是正确的呢?
能力值:
( LV2,RANK:10 )
4 楼
我看了网上对这个close的处理都是这样写的
能力值:
( LV12,RANK:210 )
5 楼
自己拿Windbg分析一下啊。你自己有source,有binary,有symbol,别人什么都没有。不自己分析,拿个mini dump给别人,能看出什么东西?
以下是windbg分析的结果(摘取了重点)。
异常是Access Violation。从现状看,可能是你调用了非法的函数指针,或者栈溢出破坏了返回地址。
这是Windbg给出的推测:
*** Possible invalid call from b6d4fc03 ( +0x20006e )
*** Expected target 9ef46eb0 ( +0x20006e )
请结合下面的stack trace自己分析。你只给了一个dump,既无源代码又无符号,甚至连汇编、机器码都没有。没有什么好办法分析。
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx
FAULTING_IP:
hips+14e4
a21c64e4 ?? ???
eax=00000000 ebx=00000000 ecx=e81f72a8 edx=88b39180 esi=e81f72a8 edi=88b39180
eip=a21c64e4 esp=b6d4fbf0 ebp=b6d4fbf0 iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010286
LAST_CONTROL_TRANSFER: from b6d4fc08 to a21c64e4
POSSIBLE_INVALID_CONTROL_TRANSFER: from b6d4fc03 to 9ef46eb0
STACK_TEXT:
栈帧 返回地址 参数1~3
WARNING: Stack unwind information not available. Following frames may be wrong.
b6d4fbec b6d4fc08 83c88747 e81f72a8 88b39180 hips+0x14e4
b6d4fbf0 83c88747 e81f72a8 88b39180 e8193f80 0xb6d4fc08
b6d4fc08 83ea9538 86fc5ac8 e8193f68 00000001 nt!IofCallDriver+0x63
b6d4fc48 83e70078 8ad32178 e8193f80 00000001 nt!IopCloseFile+0x2f3
b6d4fc94 83e92da2 8ad32178 b0c6d328 87beeae0 nt!ObpDecrementHandleCount+0x139
b6d4fcdc 83e945a2 b0c6d328 e56e41c0 8ad32178 nt!ObpCloseHandleTableEntry+0x203
b6d4fd0c 83e9471a 8ad32178 87beea01 0012f3ac nt!ObpCloseHandle+0x7f
b6d4fd28 83c8f6ea 000000e0 0012f3b0 77c56194 nt!NtClose+0x4e
b6d4fd28 77c56194 000000e0 0012f3b0 77c56194 nt!KiFastCallEntry+0x12a
能力值:
( LV12,RANK:210 )
6 楼
hips.sys的模块范围是
a21c5000 a21cc000 hips
出错地址是:
hips+14e4
a21c64e4 ?? ???
自己分析一下为什么出错了
能力值:
( LV9,RANK:380 )
7 楼
给个忠告,不会分析dmp就少碰驱动这种东西吧~~否则你会很郁闷的到处求人。
能力值:
( LV3,RANK:20 )
8 楼
难道你的DispatchClose跟DriverEntry一起,定义在了init节里?
能力值:
( LV2,RANK:10 )
9 楼
NTSTATUS c2pDispatchGeneral(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{ KdPrint(("Other Diapatch!"));
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(((PC2P_DEV_EXT)
DeviceObject->DeviceExtension)->LowerDeviceObject, Irp);
}
难道是这里错了?……我这里是直接copy……
估计是DeviceExtension这里已经无效了……晕死
能力值:
( LV12,RANK:210 )
10 楼
晕,这还能猜?
不能装个windbg打开你的dump看一看?楼上已经有人说了,不会分析dump就别碰驱动。google一下怎么分析dump,也就是顶多几分钟的事。
能力值:
( LV2,RANK:10 )
11 楼
不懂别在这吵,问题位置我已经找到了,只是想问下处理方法而已
能力值:
( LV3,RANK:20 )
12 楼
估计应该是处理了不正确的irp
比如.. 自己的irp被pass到错误的do
看看你的MJ_close 有分辨self device object 还是filter object的地方么
另外, 没见过你这么牛B来问东西的~
另外的另外. 你的基础太差了.趁早别写filter
能力值:
( LV2,RANK:10 )
13 楼
问题早修复了
最重要的是这不是文件系统过滤驱动……
足以说明您是专门来浪费时间喷人的……
如果您不想回答问题可以
但是不要用这种方式来舒缓你自己的压力