windows平台xFsRedir目录重定向程序2019年更新

                                                                           by fanxiushu 2019-08-12 转载或引用请注明原始作者。


使用过xFsRedir程序的人大概都知道这个程序是做什么用的。
它把各种服务端的文件夹也就是目录,映射到本地某个文件夹中,而且操作这个被重定向的文件夹就跟本地文件系统一样。
它支持FTP,SMB,  NFS,SFTP等10来种通用的文件传输协议,从而能把各种异构的文件夹平台集中到一起来访问。
xFsRedir核心部分就是从文件夹到文件夹的映射。
而本次的更新是让xFsRedir支持更多的功能,支持从镜像文件到磁盘的映射。

xFsRedir核心部分文件夹映射文件夹的原理介绍可从CSDN上的文中查阅。为了方便本文再次罗列出相关链接:
https://blog.csdn.net/fanxiushu/article/details/43636575     (文件过滤驱动实现目录重定向(一))
https://blog.csdn.net/fanxiushu/article/details/43845699     (文件过滤驱动实现目录重定向 (二))
https://blog.csdn.net/fanxiushu/article/details/44737171     (文件过滤驱动实现目录重定向 (三))
https://blog.csdn.net/fanxiushu/article/details/52681705     (linux平台用VFS驱动实现目录重定向(文件驱动实现目录重定向 四))

其中第四部分是在linux平台开发VFS驱动来实现目录重定向,其他三篇则是在windows平台的实现原理。
windows平台利用文件过滤驱动实现目录重定向是非常复杂的,
这可以从 文件过滤驱动实现目录重定向 (三) 这篇文章中定义的最早期数据结构声明可以看出,
声明的数据结构挺复杂,更别说内部的实现了。因此也花费了我不少时间来开发这样的驱动。

xFsRedir开发当初,只关注文件夹的重定向,并没认真去考虑虚拟磁盘,
只是后来想到有人可能并不想在原有的分区盘符中对某个目录做重定向,而是希望开辟一个新盘符,再对新盘符的某个文件夹做重定向。
因此这个时候就得开发对应的虚拟磁盘驱动。为了省事本打算使用系统自带的接口比如 subst命令来创建一个盘符,
但是这样创建的盘符不是真正的分区卷,无法挂载文件过滤驱动。因此只能在驱动内部实现虚拟磁盘驱动。

xFsRedir项目,是我在研究底层的StorPort和ScSIPort模型的磁盘驱动之后,萌生的一个想法。
虽然当时玩storport虚拟磁盘驱动玩的很顺,并且还从头开发了各个程序,
比如实模式下的BOOT引导PXE程序,storport引导盘驱动等等,实现了无盘启动的功能。
记得当初成功无盘启动了winxp系统,只是随着云桌面的新起,
无盘启动又牵涉到很多底层技术,而且局限很大,限制也多,我想现在主要除了网吧,其他地方应该比较少使用无盘吧。
因此也没再花更多的时间去研究,尤其是PXE引导,现在除了实模式引导,还包括EFI引导。iPXE开源项目集成了大部分这种功能。

折腾storport模型的虚拟磁盘驱动,都是从一个物理镜像文件映射到虚拟磁盘,也就是都是从单一的文件映射成分区盘符。
而平时接触到更多的是各种目录,各种文件夹,包括各种平台的,linux的,嵌入式openwrt的,windows的,macOS的等等。
当时很想把各种文件夹映射成本地文件系统。于是xFsRedir项目孕育而生。

当时需要在xFsRedir驱动中实现虚拟磁盘驱动功能的时候,
并没把storport虚拟磁盘驱动框架集成到xFsRedir驱动中,主要是基于以下原因考虑,
storport框架或者自己实现ScSIDisk驱动,都是基于PNP即插即用的,需要INF安装文件来安装。
而文件过滤驱动是NT驱动,安装卸载相当方便,若两者集成到一起,虽然没什么问题,但是会显得喧宾夺主,主次不分。
因此选择了尽量简单的虚拟磁盘驱动模式,也就是 filedisk。
这种框架简单到何种程度呢?
只需要在需要的时候,IoCreateDevice创建一个 FILE_DEVICE_DISK类型的设备,
在 IRP_MJ_DEVICE_CONTROL 派遣函数中处理跟磁盘相关的一些参数和属性。
然后 IRP_MJ_READ,IRP_MJ_WRITE派遣函数中就是直接读写扇区数据了。
在应用层调用 DefineDosDevice函数来挂载这个设备,就能生成一个新分区卷,
然后可以把新分区卷格式化为NTFS文件系统,并可以在上面挂载文件过滤驱动。
有兴趣可以参阅很早前写的博客 (其中只有第一章简单介绍了filedisk驱动):
https://blog.csdn.net/fanxiushu/article/details/9903123    (磁盘驱动与虚拟磁盘Miniport驱动一)
https://blog.csdn.net/fanxiushu/article/details/11713357  ; (磁盘驱动与虚拟磁盘Miniport驱动二)

这样的磁盘驱动也是有限制的:
1,首先,操作系统并没把他当成真正的磁盘,不会出现在磁盘管理器中,它只能以单个分区卷方式挂载。
2,它不能作为系统启动盘来远程启动系统,也就是无法作为无盘工作站的启动盘。当然要实现一个无盘启动,需牵涉到很多底层技术。
然而,只要我们不关心系统启动部分,只在系统正常运行中使用此类虚拟磁盘。这样的情况下,依然能胜任绝大部分需求。

在最早的xFsRedir驱动中就已经集成了这样的虚拟磁盘,但是当时无暇考虑过多,
只简单实现了用稀释文件方式创建了一个镜像文件来生成一个新分区卷,然后在新分区卷挂载文件过滤驱动,实现目录重定向的功能。
然后到了2018年,改进了虚拟磁盘的镜像文件的存储方式,并且创建了内存磁盘来给内存目录提供基础。
修改日志可查阅:
https://blog.csdn.net/fanxiushu/article/details/80289261
2018年的修改依然只是把虚拟磁盘功能作为一个隐身部分。

而这次的升级,则是把虚拟磁盘功能从幕后变身到前台,扩大了实际使用的功能。
这其实得益于CSDN上一位网友的提醒:想要httpdisk功能,也就是通过HTTP协议传输iso镜像文件来模拟光驱。
于是查阅了filedisk,httpdisk,imdisk,winvblock等等这些磁盘提供的大致功能,把他们的功能集中到xFsRedir来实现,
并且提供了多种访问镜像的方式,不单单是HTTP,还包括HTTPS,FTP,SMB,NFS,SFTP等等,还提供了整个物理磁盘分区的远程映射。
就是xFsRedir的目录重定向的文件传输协议也提供给了虚拟磁盘的镜像文件传输。

要支持这么多的传输协议,如果只是在驱动内部处理数据传输,对某些协议是非常艰难的,比如HTTPS,SFTP等。
因为这样的话,需要在驱动里要实现SSL加密代码。
做这种吃力不讨好的事,还不如直接把驱动的数据读写请求转发到应用层来,
然后在应用层有一大堆的现成的各种支持HTTPS,SFTP等传输协议的开源库可以使用。
这也是xFsRedir的目录重定向这个核心功能实现的基本准则,文件过滤驱动的对文件的各种请求,都是转发到应用层来处理。
这样的处理方式,才会让xFsRedir很轻松的支持各种网络文件传输协议。
当然这样会让性能有些耗损,并且疯狂传输文件的时候,可能会让CPU占有率有些高。

具体点,对于虚拟磁盘驱动来说,其实真正要处理的读写请求,就是IRP_MJ_READ,IRP_MJ_WRITE,且只是读写扇区数据。
比起非常复杂的文件过滤驱动要处理各种请求类型,处理虚拟磁盘驱动的读写请求简直是太轻松了。
当然,为了给这种轻松增加点复杂度,又把它分成两种情况来处理。
如果是对本地镜像文件或者对 \\Server\ 共享文件的读写,直接在驱动里以打开文件方式来传输数据。
当然内存磁盘肯定也是在驱动内部处理数据的传输。
其他传输协议的磁盘,则是把IRP_MJ_READ/WRITE 读写请求转发到应用层,然后应用层利用现成的开源库,直接连接到服务器读写数据。
当然,PRIVATE私有协议除外,这个只有我自己的实现的代码,同时本次更新中,PRIVATE协议的服务端增加了映射物理分区的功能。

如下图,展现了最新版本的xFsRedir的虚拟磁盘效果图:


图中的A部分展示了目前支持的所有文件传输协议,其中 private://server/$:D ,这样的URL意思是把服务端的整个物理D盘分区映射过来。
映射物理分区只支持私有协议。其他协议均指定一个镜像文件,这个镜像文件可以是磁盘分区镜像文件,也可以是光驱ISO文件。
如果设置的是磁盘分区镜像文件,在非只读情况下,并且镜像文件不存在,
程序会根据设置的虚拟磁盘大小新创建一个镜像文件,并且自动格式化为NTFS系统。
图中C部分表示创建的虚拟磁盘类型,通常分为两类,一个是普通镜像磁盘,也就是通过文件传输协议实时的与远程镜像文件交换数据。
另一个是内存磁盘,可以创建一个空白内存磁盘,也可以预先从本地镜像文件加载到内存磁盘中。
图中,除了 C,D,E是我电脑真实的物理磁盘分区,其他的H,K,L,M,O 五个全是xFsRedir创建的虚拟磁盘分区。
其中M分区是直接映射的另一台机器的物理分区,足有4T大小的分区。H分区也是映射的另一台机器的物理分区。
如果觉得映射整个物理分区还不过瘾,还可以在M分区内的某些文件夹设置重定向,
比如图中的B部分,把 CentOS 目录重定向到linux系统的文件夹下面。
挺热闹吧,至此,xFsRedir 已经成为了一个大杂烩。

如果有兴趣,可关注GITHUB上的最新版本,稍后会把更新了的xFsRedir发布上去。
https://github.com/fanxiushu/xFsRedir
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
重定向系统各临时文件夹到另外盘符 首先要在“开始”——“运行”内输入“regedit”打开注册表编辑器,然后要在“文件”下拉菜单中的“导出”功能备份好注册表,以防万一,接着在左侧窗口依次打开: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 在右侧窗口里,你看到的“名称”就代表那些特殊的文件夹,“数据”就是它们所对应的默认存储路径。修改默认的路径就可以让你的桌面文件夹移动了,下面是所有的. 下面介绍一下各个“名称”所代表的文件夹 名称 含义 默认路径 AppData 应用程序数据目录 C:\Documents and Settings\User name\Application Data Cookies Cookies路径 C:\Documents and Settings\User name\Cookies Desktop 桌面路径 C:\Documents and Settings\User name\桌面 Favorites 收藏夹 C:\Documents and Settings\User name\Favorites NetHood NetHood路径 C:\Documents and Settings\User name\NetHood Personal 我的文档 C:\Documents and Settings\User name\My Documents PrintHood 打印 C:\Documents and Settings\User name\PrintHood Recent 文档项路径 C:\Documents and Settings\User name\Recent SendTo SendTo路径 C:\Documents and Settings\User name\SendTo Start Menu 开始菜单路径 C:\Documents and Settings\User name\「开始」菜单 Templates 新建文件目录 C:\Documents and Settings\User name\Templates Programs 程序菜单路径 C:\Documents and Settings\User name\「开始」菜单\程序 Startup 启动路径 C:\Documents and Settings\User name\「开始」菜单\程序\启动 History 网页历史记录 C:\Documents and Settings\ User name \Local Settings\History My Pictures 图片收藏 C:\Documents and Settings\User name\My Documents\My Pictures My Music 我的音乐 C:\Documents and Settings\User name\My Documents\My Music My Video 我的视频 C:\Documents and Settings\User name\My Documents\My Videos Cache Internet临时文件夹 C:\ Documents and Settings\User name \Temporary Internet Files 这些文件夹称为Shell文件夹 其中“User name”为当前用户的名称 了解了对应的文件夹,就可以根据自己的需要去更改对应的路径了。(千万不要在这儿改啊,那样可就瞎忙乎了,系统重起后它会恢复成原来的路径) 在同一层中你可以看到一个“User Shell Folders”的子键,即在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ User Shell Folders 这里包括了用户定制的所有Shell文件夹的值项。只要通过修改“数据”,就可以改变它们的存储路径。双击需要修改的名称,在弹出的“编辑字符串”的“数值数据”里填上你要更改的完整路径,按下“确定”就完成了。如果没有你需要的,可以在右边窗口单击鼠标右键,选择“新建”菜单中的“字符串值”命令,对应上表,添加一个用于Shell文件夹的字符串值。 在上面的文件夹中,并没有outlook的通讯簿和邮件存放路径,它们分别在 通讯簿路径: HKEY_CURRENT_USER\Software\Microsoft\WAB\WAB4\Wab File Name主键下,将
Windows驱动级网络重定向工具是一种在Windows操作系统下运行的网络重定向工具。它的主要功能是在网络层级进行重定向操作,可以实现将网络数据包从一个网络接口(如网卡)重定向到另一个网络接口,或者将网络数据包从一个网络协议栈重定向到另一个网络协议栈。 使用Windows驱动级网络重定向工具,可以实现一些网络管理或网络安全方面的功能,比如流量监控、流量过滤、流量篡改等。通过将网络数据包重定向到自定义的协议栈或应用程序中,可以对网络流量进行深度分析和处理,以满足特定的需求。 Windows驱动级网络重定向工具通常需要通过安装驱动程序来实现网络数据包的重定向驱动程序会在操作系统启动时加载,并在运行时拦截和处理网络数据包。这样,工具就可以直接与操作系统内核交互,实现对网络数据包的控制和处理。 Windows驱动级网络重定向工具有很多应用场景。例如,企业可以使用这样的工具来监控和过滤员工的网络流量,以确保网络安全和数据保护。网络管理员也可以使用该工具来监控和控制整个网络的流量,确保网络的稳定和高效。此外,安全研究人员还可以使用该工具进行网络安全漏洞的研究和测试,以提升网络安全性。 总而言之,Windows驱动级网络重定向工具是一种强大的网络管理工具,通过拦截和处理网络数据包,可以实现对网络流量的控制和处理,具有广泛的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值