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所有功能
至于动态卸载好像还不行,如果那位大虾知道请贡献一下
安装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所有功能
至于动态卸载好像还不行,如果那位大虾知道请贡献一下
相关文章推荐
- 经验分享之ASP动态网页制作技术vbscript函数
- Android-高效加载图片经验分享
- 动态加载APK原理分享(dexmaker)
- 动态加载APK原理分享
- 8086汇编语言自学经验分享 用debug加载程序后,可以使用u命令查看源代码
- JQ获取动态加载的图片大小的正确方法分享
- 动态加载APK原理分享
- python动态加载变量示例分享
- 分享:Jython动态加载Jar
- 动态加载APK原理分享
- 动态加载APK原理分享
- ASP动态网页制作技术经验分享
- S2JH经验分享:控制jdbc:initialize-database与其他bean加载顺序
- 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
- ajax数据加载经验分享
- 【经验分享】datagrid锁定列后重新加载时出现错位问题的解决
- python动态加载变量示例分享
- 动态加载APK原理分享
- ajax数据加载经验分享