我可以在 Windows 中创建只读符号链接吗?

我可以在 Windows 中创建只读符号链接吗?

我在允许插件的游戏中拥有两个游戏帐户。插件将其数据保存到文件中。每当游戏关闭时(手动关闭、断开连接、崩溃等),游戏都会写入特定帐户的数据文件。因此,对于任何给定的插件,每个帐户都有一个单独的数据文件。

我想要实现的是,在两个帐户之间共享数据,同时只允许其中一个帐户将数据写入文件。虽然我可以故意按特定顺序注销它们,以确保正确的帐户是实际写入文件的帐户,但在服务器或客户端崩溃时,我并不总是能够控制注销。

假设数据文件的排列方式如下:

C:\Games\GameTitle\Data\PrimaryAccount\addonDataFile.txt C:\Games\GameTitle\Data\SecondaryAccount\addonDataFile.txt

我希望第一个文件在读取时像第二个文件一样处理,但在尝试写入第二个文件时拒绝任何写入。据我所知,Windows 中的符号链接仅满足第一个条件。

有没有办法创建文件的只读符号链接,以防止通过符号链接进行写入?

答案1

恐怕目前还没有很好的解决方案来解决这个问题,因为文件权限与 NTFS 中的文件对象本身相关(在 MFT$),因此任何给定文件都只有一组权限,即使指向该文件有多个链接。链接权限非常有限,并应用于链接/连接点本身,而不是目标对象,但有一个例外:拒绝连接点上的文件列表将阻止用户看到连接点内的任何文件。

相反,我建议在启动游戏时动态切换权限或只读位,具体取决于您打算使用哪个帐户。您可以通过创建两个批处理文件来做到这一点,将文件设置为可写或只读,然后启动游戏。

最简单的方法是使用只读位:

批次 #1

#Readonly user
attrib +R c:\path\to\file.ext
c:\path\to\game.exe

批次 #2

#ReadWrite user
attrib -R c:\path\to\file.ext
c:\path\to\game.exe

如果某些可执行文件无法写入所需文件,它们可能会尝试关闭只读位,因此,如果这些批处理文件不够用,请尝试使用以下方法拒绝 Windows 用户写入访问权限:权限控制命令。它将会是这样的:

批次 #1

#Readonly user
CACLS c:\path\to\file.ext /E /P "Username":R
c:\path\to\game.exe

批次 #2

#ReadWrite user
CACLS c:\path\to\file.ext /E /P "Username":F
c:\path\to\game.exe

最后,为了使其更易于使用,只需为每个帐户创建游戏快捷方式,并将它们指向相应的批处理文件。

正如我所说的,不幸的是,这个问题没有干净的解决方案,但这是一个非常边缘的情况,而且这项技术从来没有设计成按照你希望的方式工作。希望这种有点黑客的方法对你有用。

相关内容