阅读:1818回复:2
请教双核下TDI-Hook蓝屏问题
代码是找的一段tdi-hook框架,自己改了下,准备拦截 IRP_MJ_CREATE的分派函数。
在单核机器上没问题,但是在双核机器上总是能遇到奇怪现象: 正在收发数据的应用程序变得非常卡,貌似快要失去响应一样。过几秒钟就蓝屏重启。 恢复unhook操作也一样会出现问题。 自己先搜了一下,看到说多核下hook不能这么简单替换,需要用到分发DPC、开关中断等处理。 请问用 TDI-filter 过滤方式是否能在多核下安全呢(不需特殊处理)? 虽然有可能临时试不出来,但还是希望在理论上有个求证。 本人是驱动菜鸟,各位如能详细解答,非常感激。 NTSTATUS HookTDI(void) { NTSTATUS Status; UNICODE_STRING usDriverName; PDRIVER_OBJECT DriverObjectToHookPtr; RtlInitUnicodeString(&usDriverName,L"\\Driver\\Tcpip"); Status = ObReferenceObjectByName(&usDriverName,OBJ_CASE_INSENSITIVE,NULL,0,*IoDriverObjectType,KernelMode,NULL,&DriverObjectToHookPtr); if(Status != STATUS_SUCCESS) { return Status; } /* RealTDIDriverObject.MajorFunction[IRP_MJ_CREATE] = DriverObjectToHookPtr->MajorFunction[IRP_MJ_CREATE]; DriverObjectToHookPtr->MajorFunction[IRP_MJ_CREATE] = TDIDeviceDispatch; */ gOrgDispatch = (PDRIVER_DISPATCH) InterlockedExchange( (PLONG)&DriverObjectToHookPtr->MajorFunction[IRP_MJ_CREATE], (LONG)&TDIDeviceDispatch); ObDereferenceObject(DriverObjectToHookPtr); //DbgPrint("HookTDI ok\n"); return STATUS_SUCCESS; } |
|
沙发#
发布于:2010-05-20 01:08
发现了自己 UnHook() 函数里的一个笔误,把函数指针的地址赋过去了,不蓝就怪了
改正以后,InterlockedExchange 已经能保证不出蓝屏。 |
|
板凳#
发布于:2010-05-20 01:12
多核下hook安全,是否只是针对 inline hook?
|
|