-
-
帮忙测试下 磁盘卷设备过滤驱动加载方法,感谢感谢!
-
-
帮忙测试下 磁盘卷设备过滤驱动加载方法,感谢感谢!
要把磁盘卷过滤驱动加载到卷设备之上,书中是如此操作的:
把过滤驱动sys文件放入c:\windows\system32\drivers,使用osrloader加载其为boot型驱动(服务名为DP),并按图在注册表的upfilter项上添加注册的驱动名,图上看见在DP前面还有个Volsnap驱动在那
但我用windbg跟踪后发现,系统调用 DriverEntry()之后,调用的下一个函数居然是DPReinitializationRoutine(),其DPAddDevice根本就没得到调用.
怀疑原书加载方法的正确性,故求此类过滤驱动加载方法,感谢感谢,被这个搞懵了,有朋友说书上加载方法没错,
可我试了很多次,结果还是这样有没有朋友帮个忙测试下附件的代码,看看加载之后情况是不是和我一样,感谢感谢
源代码,osrloader,编译好的sys文件都在里面,只需要加载下windbg跟踪下就好~加载方法:
1)将过滤驱动DP.sys文件放入c:\windows\system32\drivers
2)使用osrloader加载其为boot型驱动(见附件图1)
3)修改注册表键值,在upperfilter上增加dp(见附件图2)
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
int i;
//KdBreakPoint();
for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
{
//初始化这个驱动所有的分发函数,默认值是初始化为DPDispatchAny
DriverObject->MajorFunction[i] = DPDispatchAny;
}
//下面将我们特殊关注的分发函数重新赋值为我们自己的处理函数
DriverObject->MajorFunction[IRP_MJ_POWER] = DPDispatchPower;
DriverObject->MajorFunction[IRP_MJ_PNP] = DPDispatchPnp;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DPDispatchDeviceControl;
DriverObject->MajorFunction[IRP_MJ_READ] = DPDispatchReadWrite;
DriverObject->MajorFunction[IRP_MJ_WRITE] = DPDispatchReadWrite;
//将这个驱动的AddDevice函数初始化为DpAddDevice函数
DriverObject->DriverExtension->AddDevice = DPAddDevice;
//将这个驱动的unload函数初始化为DpUnload函数
DriverObject->DriverUnload = DPUnload;
//注册一个boot驱动结束回调,这个回调函数会在所有的boot型驱动都运行完毕之后再去执行
IoRegisterBootDriverReinitialization(
DriverObject,
[COLOR="Red"]DPReinitializationRoutine[/COLOR],
NULL
);
//作为一个过滤驱动,无论如何都要返回成功
return STATUS_SUCCESS;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)