您的位置:首页 > 其它

Sfilter之Windows2000动态加载经验分享

2008-05-15 22:56 1086 查看
前提
安装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所有功能

至于动态卸载好像还不行,如果那位大虾知道请贡献一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: