Исправление игрового программного обеспечения в Windows XP, Windows Vista и Windows 7
Windows Vista и Windows 7 имеют ряд функций, которые делают операционную систему более безопасной. Добавленная безопасность означает, что применение исправлений к программному обеспечению не так просто, как в прошлом. В этой статье рассматриваются некоторые методы установки исправлений, которые хорошо работают в Windows Vista и Windows 7, а также в Windows XP.
Существует две main категории игр, для которых требуются исправления:
- Игры, требующие только случайных исправлений, например большинство автономных игр.
- Игры, требующие частых исправлений, например, большинство онлайн-игр.
В этой статье также содержится краткое представление о контроле учетных записей (UAC), которое служит фоном о правах, которые разработчики могут ожидать от пользователей в Windows Vista и Windows 7.
- Контроль учетных записей пользователей
- Игры, требующие только случайных исправлений
- Игры, требующие частых исправлений
- Сводка
контроль учетных записей
Windows Vista и Windows 7 имеют два основных типа учетных записей пользователей: обычный пользователь и администратор. Учетная запись обычного пользователя имеет несколько ограничений доступа; например, он не может записывать данные в файловую систему в %SystemDrive%\Program Files или в реестр в HKEY_LOCAL_MACHINE. Это влияет на применение исправлений к игре, если она установлена в расположении только для чтения. В отличие от Windows XP, в Windows Vista и Windows 7 гораздо чаще используется учетная запись обычного пользователя. Учетные записи стандартных пользователей также требуются для важных функций операционной системы, таких как родительский контроль. Родительский контроль требует, чтобы учетная запись ребенка была обычным пользователем, а повышение уровня такой учетной записи до уровня администратора даже для одной игры не позволит родительскому контролю работать со всеми другими играми. Таким образом, важно, чтобы игры были разработаны для обычного пользователя.
Windows Vista и Windows 7 имеют более новую модель для прав пользователя, чтобы предотвратить запуск программ, которые пытаются выполнять операции, которые пользователь не планирует или не авторизует. С этой целью контроль учетных записей пользователей (прежнее название — учетная запись пользователя с наименьшими привилегиями или LUA) позволяет пользователям работать с компьютером с низкоуровневыми правами большую часть времени, при этом при необходимости легко запускать приложения, требующие прав более высокого уровня. Это означает, что учетные записи обычных пользователей и администраторы запускают приложения с правами обычного пользователя, но только учетные записи администратора могут предоставлять приложениям повышенные права. Операционная система запрашивает явное согласие пользователей с учетными записями администратора перед запуском приложения с повышенными правами, и если программа, требующая прав администратора, запускается в учетной записи обычного пользователя, система запрашивает утверждение администратора.
Игры, требующие только случайных исправлений
В некоторых играх требуется только несколько исправлений на протяжении всего жизненного цикла. Для такой частоты установки исправлений можно использовать два метода: распространение исправлений в виде пакетов установщика Windows, которые обычно не требуют прав администратора, или использование другого типа распространения, непосредственно изменяющего игровые файлы.
Примечание
Независимо от того, требуется ли для игры частое исправление, приложения обычно требуют прав администратора для установки или удаления.
Способ 1. Использование установщика Windows для случайных исправлений
В этом методе установщик Windows используется для установки пакета (.msi файла), а исправление установщика Windows (MSP-файл) распространяется для установки исправлений. Пакет должен иметь таблицу MsiPatchCertificate, а исправление должно быть цифровой подписью сертификата в таблице. Дополнительные сведения о цифровой подписи см. в статье Подпись Authenticode для разработчиков игр.
Дополнительные сведения и требования для использования этого метода исправления см. в документации установщика Windows:
Недостаток этого метода заключается в том, что если игра не была установлена со съемного носителя в Windows XP, то для установки исправлений требуются права администратора. Однако это, скорее всего, не будет слишком строгим, так как большинство пользователей администраторы в Windows XP, а ограничения на программное обеспечение, установленное со съемных носителей, отсутствуют в Windows Vista.
Преимущество этого метода main заключается в том, что исправления могут применяться учетной записью обычного пользователя без запроса и проверки подлинности для повышенных прав. Это улучшает взаимодействие с пользователем, так как для игры пользователю с учетной записью обычного пользователя не требуется запрашивать у пользователя с учетной записью администратора установку исправления или предоставление учетной записи обычного пользователя постоянных прав администратора.
Возможно, этот метод работает для игр, требующих частых исправлений, но накладные расходы на использование пакетов установщика Windows с точки зрения интеграции сборки и поддержки большого количества файлов могут сделать этот метод менее желательным, чем другие.
Метод 2. Требование прав администратора для применения исправлений
В этом методе исполняемый файл, который применяет исправление, требует прав администратора для запуска. С правами администратора исполняемый файл исправлений может напрямую изменять игровые файлы, расположенные в папке %SystemDrive%\Program Files.
Преимуществом этого метода является его простота. Однако этот метод не подходит, если игра нуждается в частых исправлениях, так как если пользователь с учетной записью обычного пользователя хочет играть в игру, требующую частых исправлений, например в массовой многопользовательской онлайн-игре, этот пользователь имеет два варианта:
- Получите администратора для входа в игру и исправления, что может быть неудобно для обеих сторон.
- Иметь постоянное повышение прав администратора для своей учетной записи.
Примечание
Последнее решение не только ослабляет безопасность системы в целом, но и предотвращает работу важных функций, таких как родительский контроль.
При реализации этого метода исполняемый файл, в который применяется исправление, должен отличаться от исполняемого файла игры. Манифест исполняемого файла исправления должен указывать requireAdministrator для requestedExecutionLevel, чтобы обозначить его как приложение, требующее прав администратора. Дополнительные сведения о том, как это сделать, см. в статье Рекомендации и рекомендации для разработчиков для приложений в среде с минимальными привилегиями в разделе Схема манифеста приложения.
При использовании этого метода даже с параметрами в манифесте исполняемый файл может по-прежнему запускаться без прав администратора в двух случаях:
- Если используется операционная система Windows XP, а учетная запись пользователя является пользователем с ограниченным доступом.
- Если используется операционная система Windows Vista или Windows 7, учетная запись пользователя является обычным пользователем, а контроль учетных записей отключен.
Оба этих сценария являются редкими потребительскими сценариями. Тем не менее, средство исправления должно иметь манифест, требуя прав администратора, и оно должно вызывать IsUserAnAdmin; Если эта функция возвращает значение FALSE, отображается сообщение об ошибке "Требуются права администратора".
В целом, метод 1 предпочтительнее для игр, которым требуется всего несколько исправлений в течение их жизни.
Игры, требующие частых исправлений
Многие интернет-игры постоянно совершенствуются и обычно требуют регулярных исправлений. Для этих игр исправления могут применяться для каждого пользователя или компьютера, как описано в следующих разделах. Другие возможные решения включают изменение ACL, защищающего %SystemDrive%\Program Files, или создание пользовательской службы.
Способ 3. Установка Per-User
Один из рекомендуемых и простых способов — установить всю игру во вложенную папку данных локального приложения, которую можно найти, вызвав SHGetFolderPath с CSIDL_LOCAL_APPDATA. Пример пути: C:\Documents and Settings\user name\Local Settings\Application Data\ExampleGame. Такое расположение позволяет приложению, работающему с правами обычного пользователя, напрямую изменять игровые файлы.
Однако этот подход имеет недостаток, когда на компьютере есть несколько пользователей: у каждого пользователя установлена копия игры, а исправления должны быть загружены и применены каждым пользователем. Это приводит не только к трате времени и дискового пространства пользователей, но и к увеличению использования пропускной способности сети на сервере, который предоставляет исправления. Кроме того, поскольку любое приложение с правами обычного пользователя может изменять игру, исполняемые файлы игры менее защищены; это до производителя игры, чтобы решить, является ли это приемлемым или нет.
Способ 4. Установка в общее расположение Per-Computer
Другой способ — установить неисполняемые игровые данные в подкаталог пути, заданного shGetFolderPath CSIDL_COMMON_APPDATA; Пример пути: C:\Documents and Settings\All Users\Application Data\ExampleGame. Это общее расположение для всех пользователей, которое может быть изменено приложениями, работающими с правами обычного пользователя. Этот метод позволяет свести к минимуму необходимость повторного применения больших исправлений при воспроизведении игры с нескольких учетных записей. Исполняемые файлы для игры должны храниться в папке %SystemDrive%\Programs Files, чтобы свести к минимуму риск для других учетных записей в системе. Исполняемые файлы должны проверять целостность нового содержимого в общем каталоге, так как это расположение может быть изменено программой или пользователем с правами обычного пользователя; рассмотрите возможность использования MapFileAndCheckSum для вычисления контрольной суммы файлов.
Преимущество этого метода заключается в том, что он одинаково хорошо работает как в Windows XP, так и в Windows Vista, и для него не требуются права администратора.
Другие возможности
Помимо уже рассмотренных методов, другой возможностью является изменение списка управления доступом %SystemDrive%\Program Files\Game Folder\ при установке игры, чтобы средство установки исправлений пользовалось возможностью записи непосредственно в файлы игры даже при запуске с правами обычного пользователя. Хотя это не сложно, она обходит защиту безопасности, которую система предлагает к файлам игры, и предоставляет возможность вредоносным программам изменять содержимое каталога. Это не рекомендуется, и настоятельно рекомендуется использовать вместо него альтернативу.
Последняя возможность заключается в написании пользовательской службы. Как правило, создание пользовательской службы для исправлений игр не является хорошей идеей, так как это сложно и подвержено ошибкам. Рекомендуется устанавливать исправления с помощью других методов, описанных в этой статье. Однако пользовательская служба может потребоваться в сочетании с решениями для защиты от обмана или борьбы с пиратами. Такая служба должна поддерживать большое количество игр и быть разработана таким образом, чтобы она только скачивать файлы исправлений и записывать только в каталог установки для целевой игры. Важно, чтобы служба была небольшой, иметь минимальную площадь поверхности, уязвимую для атак, и использовать как можно меньше системных ресурсов, когда игра не запущена.
Сводка
В конечном счете, вы сами решаете, какой метод следует реализовать. Вы должны взвесить факторы, которые важны для вас. Безопасность, частота установки исправлений, простота использования клиентом, рабочая нагрузка, необходимая для реализации, сложность решения и соответствие функций платформы — это факторы, которые каждый разработчик должен учитывать, прежде чем принимать решение о конкретном методе.
Дополнительные сведения о защите учетных записей пользователей см. в статье Требования к разработке приложений Windows Vista для контроля учетных записей (UAC).