Sfilter之Windows2000动态加载经验分享
来源:互联网 发布:大数据采集 编辑:程序博客网 时间:2024/05/12 08:41
前提
安装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所有功能
至于动态卸载好像还不行,如果那位大虾知道请贡献一下
- Sfilter之Windows2000动态加载经验分享
- Sfilter在Win2000下动态加载的实现
- Sfilter在Win2000下动态加载的实现
- ajax数据加载经验分享
- sfilter
- sfilter
- sfilter动态加解密吐血总结
- sfilter动态加解密吐血总结
- sfilter动态加解密吐血总结
- Android-高效加载图片经验分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 动态加载APK原理分享
- 初入rails的折腾
- c语言可变参数函数
- 获取服务器证书
- 《关于利用经营分析数据支持抗震救灾工作的紧急通知》
- 回去学校答辩
- Sfilter之Windows2000动态加载经验分享
- 算法与C程序设计初步
- 五种提高 SQL 性能的方法
- 工作了4天,压力确实不小呢
- HTML 点击弹出窗口
- DIV 设置背景图片
- 动态代码的使用(反射和动态生成类)
- 高质量设计的特征
- iBATIS之父:iBATIS框架的成功蜕变