2

У меня есть две игровые учетные записи в игре, которая позволяет дополнения. Аддоны сохраняют свои данные в файлы. Всякий раз, когда игра закрывается (из-за ручного закрытия, отключения, сбоя и т.д.), Игра записывает данные в файл данных конкретной учетной записи. Таким образом, для каждого данного дополнения каждая учетная запись имеет отдельный файл данных.

Чего я хотел бы добиться, так это обмениваться данными между обеими учетными записями, позволяя только одной из учетных записей записывать данные в файл. Несмотря на то, что я мог намеренно отключить их в определенном порядке, чтобы убедиться, что именно учетная запись действительно записывает данные в файл, я не всегда могу контролировать выходы из системы в случае сбоя сервера или клиента.

Допустим, файлы данных расположены следующим образом:

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

Я хотел бы, чтобы первый файл обрабатывался как второй файл во время чтения, но чтобы запретить любые записи во второй файл, когда делается попытка записи в него. Насколько я знаю, символическая ссылка в Windows соответствует только первым критериям.

Есть ли способ сделать символическую ссылку только для чтения на файл, предотвращая запись по символической ссылке?

1 ответ1

2

Я боюсь, что не существует хорошего решения этого вопроса в том виде, в каком оно представлено, в том смысле, что права доступа к файлу привязаны к самому объекту файла в NTFS (в MFT $), поэтому любой данный файл имеет только один набор разрешений, даже если их несколько. ссылки на это. Разрешения для ссылок очень ограничены и применяются к самой ссылке / соединению, а не к целевому объекту, за одним исключением: отказ в перечислении файлов на соединении не позволит пользователю видеть какой-либо файл в соединении.

Вместо этого я рекомендую динамически переключать права доступа или бит readonly при запуске игры, в зависимости от того, какую учетную запись вы собираетесь использовать. Вы можете сделать это, создав два пакетных файла, которые установят файл на запись или только для чтения, а затем запустят игру.

самый простой подход - использовать бит readonly:

Партия № 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, используя команду cacls . это было бы что-то вроде:

Партия № 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

Затем, наконец, чтобы все было проще в использовании, просто создайте ярлыки игры для каждой учетной записи и укажите им соответствующий пакетный файл.

Как я уже сказал, досадно, что нет ясного решения этой проблемы, но это довольно незначительный случай, и технология просто никогда не была разработана, чтобы работать так, как вам хотелось бы. надеюсь, этот несколько хакерский подход будет работать для вас, хотя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .