阅读:2398回复:5
Sfilter之Windows2000动态加载经验分享
前提
安装Windows 2000 Service Pack 4 安装Update Rollup for Windows 2000 Service Pack 4 即这个补丁Windows2000-KB891861-v2-x86-CHS.EXE 这个前提要求应该不过分 1.将原来只会在XP以上因为动态加载才会使用的gSfDynamicFunctions从条件编译中提取出来 _SF_DYNAMIC_FUNCTION_POINTERS 中 PSF_ENUMERATE_DEVICE_OBJECT_LIST EnumerateDeviceObjectList; PSF_GET_LOWER_DEVICE_OBJECT GetLowerDeviceObject; PSF_GET_DEVICE_ATTACHMENT_BASE_REF GetDeviceAttachmentBaseRef; PSF_GET_DISK_DEVICE_OBJECT GetDiskDeviceObject; PSF_GET_ATTACHED_DEVICE_REFERENCE GetAttachedDeviceReference; 也提取出来,另外还要增加 PSF_REGISTER_FSREGISTRATION_CHANGE_EX RegisterFsRegistrationChangeEx; 另外包括SfEnumerateFileSystemVolumes,SfLoadDynamicFunctions等方法 如果还有哪些地方需要从XP条件编译中提取的而上面遗漏了导致无法编译的,请自行提取 2.在driverentry中原来只为XP编译的SfLoadDynamicFunctions变成全部编译 同时SfLoadDynamicFunctions方法中有针对的编译合适的加载方法 3.在driverentry中原来IoRegisterFsRegistrationChange的地方是只为XP而编译的,增加 #if WINVER < 0x0501 if(gSfDynamicFunctions.RegisterFsRegistrationChangeEx!=NULL) { status = (gSfDynamicFunctions.RegisterFsRegistrationChangeEx)( DriverObject, SfFsNotification ); } #endif 这是从MSDN中得到的帮助,如果在2000中使用RegisterFsRegistrationChange而不使用RegisterFsRegistrationChangeEx,我测试的结果是不会把已经激活的FileSystem自动枚举一遍 4.在SfAttachToFileSystemDevice中原来只为XP编译并且执行的SfEnumerateFileSystemVolumes 代码段修改成2000中也可以执行,只要那些判断用的动态方法可以加载成功,即 if(NULL != gSfDynamicFunctions.EnumerateDeviceObjectList && NULL != gSfDynamicFunctions.GetDiskDeviceObject && NULL != gSfDynamicFunctions.GetDeviceAttachmentBaseRef && NULL != gSfDynamicFunctions.GetLowerDeviceObject) 经过以上修改即可实现在windows2000 sp4+rollup1上实现动态加载,并且动态绑定一定激活的文件系统和卷,从而实现Sfilter所有功能 至于动态卸载好像还不行,如果那位大虾知道请贡献一下 |
|
最新喜欢:diyfan... |