我开发了将数据写入文件系统上的文件的 Windows 应用程序。
我有两种方式可以访问文件系统:
- 物理路径:C:\Folder\Myfile.txt
- UNC 路径(配置的 RWX MyShare):\MyShare\Myfile.txt
使用物理路径时,我们在处理文件时永远不会出错。
使用 UNC 时,有时在处理文件时,我们会收到“发生意外网络错误”的消息。
我想知道 UNC 和物理路径是否在操作系统内部使用不同的驱动程序/内核模块/安全层?
在 Linux 上,当您使用 File.Open 或 File.Read 时,这取决于文件系统类型,每个文件系统都有不同的实现,您将经过不同的安全层。在 Windows 上也是一样吗?
问题:
- 当使用 UNC / 物理路径时,我们是否通过不同的驱动程序 / 安全层?
- 使用 UNC 时,可能是端点保护/防火墙/防病毒软件可能会添加额外的安全层?
答案1
Windows 使用完全不同的方法来处理本地和远程路径。这显然是由臭名昭著您收到的错误消息。
Windows 将使用内核文件系统 API 和驱动程序来寻址本地连接的磁盘,而 unc 路径使用 SMB 协议来解析系统名称、连接到共享并执行文件 IO 等操作。SMB 提供位于文件系统之上的语义,因此 Windows 应用程序不知道或不关心正在使用哪种文件系统。例如,即使 Windows 不知道如何使用 Ext4 文件系统,也可以从 Windows 访问 Linux 系统上的 Samba 共享。SMB 完成从实际磁盘、分区、卷和文件到通用接口的所有转换工作。
Linux 通常采用不同的方法来处理网络数据。它不执行临时连接,而是将网络文件系统协议驱动程序置于挂载之下,这样从应用程序的角度来看,所有挂载位置都可以平等访问。但以下情况除外:保险丝,用户空间进程不知道给定的挂载点实际上指向哪里。这样做的缺点当然是您需要在应用程序加载之前提前配置操作系统以挂载网络位置,这使得应用程序很难创建自己的与远程文件系统的网络连接。