Aplicação de patch de software de jogo no Windows XP, Windows Vista e Windows 7
O Windows Vista e o Windows 7 têm vários recursos para tornar o sistema operacional mais seguro. A segurança adicionada significa que a aplicação de patches ao software não é tão simples quanto era no passado. Este artigo examina alguns métodos de aplicação de patch que funcionarão bem no Windows Vista e no Windows 7, bem como no Windows XP.
Há duas categorias main de jogos que exigem patches:
- Jogos que exigem apenas patches ocasionais, como a maioria dos jogos offline.
- Jogos que exigem patches frequentes, como a maioria dos jogos online.
Este artigo também oferece uma breve introdução ao UAC (Controle de Conta de Usuário) para servir como plano de fundo sobre os direitos que os desenvolvedores podem esperar que os usuários tenham no Windows Vista e no Windows 7.
- Controle de conta de usuário
- Jogos que exigem apenas patches ocasionais
- Jogos que exigem patches frequentes
- Resumo
Controle de Conta de Usuário
O Windows Vista e o Windows 7 têm dois tipos principais de contas de usuário: Usuário Padrão e Administrador. Uma conta de Usuário Padrão tem várias restrições de acesso; por exemplo, ele não pode gravar dados no sistema de arquivos em %SystemDrive%\Arquivos de Programas ou no Registro no HKEY_LOCAL_MACHINE. Isso terá implicações para aplicar patches a um jogo se ele estiver instalado em um local somente leitura. Ao contrário do Windows XP, a conta de Usuário Standard é muito mais comum no Windows Vista e no Windows 7. Contas de usuário padrão também são necessárias para recursos importantes do sistema operacional, como controles dos pais. Os controles dos pais exigem que a conta filho seja Usuário Padrão e elevar essa conta para Administrador para até mesmo um jogo impede que os controles dos pais trabalhem com todos os outros jogos. Portanto, é importante que os jogos sejam projetados para o Usuário Standard.
O Windows Vista e o Windows 7 têm um modelo mais recente para direitos de usuário, para ajudar a impedir que os usuários executem programas que tentam executar operações que o usuário não pretende ou autoriza. Para esse fim, o Controle de Conta de Usuário (anteriormente chamado de conta de usuário com privilégios mínimos ou LUA) permite que os usuários operem o computador com direitos de baixo nível na maioria das vezes, enquanto podem executar facilmente aplicativos que exigem direitos de nível superior, quando necessário. Isso significa que contas de usuário padrão e contas de administrador executam aplicativos com direitos de Usuário Standard, mas somente contas de administrador têm a capacidade de conceder direitos elevados aos aplicativos. O sistema operacional solicita aos usuários com contas de administrador o consentimento explícito antes de executar um aplicativo com direitos elevados e, se um programa que exige direitos de Administrador for executado em uma conta de Usuário Padrão, o sistema solicitará a aprovação do Administrador.
Jogos que exigem apenas patches ocasionais
Alguns jogos exigem apenas alguns patches durante todo o ciclo de vida. Dois métodos que você pode empregar para essa frequência de aplicação de patch são distribuir patches como pacotes do Windows Installer, que geralmente não exigem direitos de Administrador ou usar algum outro tipo de distribuição que modifique diretamente os arquivos de jogo.
Observação
Independentemente de um jogo exigir aplicação de patch frequente, os aplicativos normalmente exigem que os direitos de Administrador sejam instalados ou removidos.
Método 1: Usar o Windows Installer para patches ocasionais
Nesse método, um Windows Installer é usado para instalar um pacote (arquivo .msi) e um patch do Windows Installer (arquivo .msp) é distribuído para instalar patches. O pacote deve ter uma tabela MsiPatchCertificate e o patch deve ser assinado digitalmente por um certificado na tabela. Mais informações sobre assinatura digital podem ser encontradas em Autenticação para Desenvolvedores de Jogos.
Mais detalhes e requisitos para usar esse método de aplicação de patch podem ser encontrados na documentação do Windows Installer:
A desvantagem desse método é que, se o jogo não tiver sido instalado de mídia removível no Windows XP, a aplicação de patch exigirá direitos de Administrador. No entanto, isso provavelmente não será muito restritivo, pois a maioria dos administradores de usuários no Windows XP e a restrição ao software instalado de mídia removível não está presente no Windows Vista.
A vantagem main desse método é que os patches podem ser aplicados por uma conta de Usuário Padrão sem exigir um prompt e autenticação para direitos elevados. Isso proporciona uma melhor experiência do usuário, pois para jogar um jogo, um usuário com uma conta de Usuário Padrão não precisa pedir a alguém com uma conta de Administrador para instalar o patch ou para fornecer à conta de Usuário Padrão direitos permanentes de Administrador.
É possível que esse método funcione para jogos que exigem patches frequentes, mas a sobrecarga de usar pacotes do Windows Installer, em termos de integração de build e suporte a um grande número de arquivos, pode tornar esse método menos desejável do que outros.
Método 2: Exigir direitos de administrador para aplicar patches
Nesse método, o arquivo executável que aplica o patch requer direitos de Administrador para execução. Com os direitos de Administrador, o executável de aplicação de patch pode modificar diretamente os arquivos de jogo localizados em %SystemDrive%\Arquivos de Programas.
A vantagem desse método é sua simplicidade. No entanto, esse método será inadequado se o jogo precisar de patches frequentes, porque se um usuário com uma conta de Usuário Padrão quiser jogar um jogo que exija patches frequentes, como um jogo online de vários jogadores, esse usuário terá duas opções:
- Faça com que um Administrador faça logon e corrija o jogo, o que pode ser inconveniente para ambas as partes.
- Tenha sua conta permanentemente elevada com direitos de Administrador.
Observação
A última solução não apenas enfraquece a segurança do sistema como um todo, mas impede que recursos importantes, como os controles dos pais, funcionem.
Ao implementar esse método, o arquivo executável que aplica o patch deve ser diferente do executável do jogo. O manifesto do executável de aplicação de patch deve especificar requireAdministrator para requestedExecutionLevel para denotá-lo como um aplicativo que requer direitos de Administrador. Mais informações sobre como fazer isso podem ser encontradas em Práticas Recomendadas e Diretrizes para Aplicativos do Desenvolvedor em um ambiente com privilégios mínimos, em "Esquema de Manifesto do Aplicativo".
Quando esse método é usado, mesmo com as configurações no manifesto, o arquivo executável ainda pode ser iniciado sem direitos de Administrador em dois casos:
- Se o sistema operacional for Windows XP e a conta do usuário for um Usuário Restrito.
- Se o sistema operacional for Windows Vista ou Windows 7, a conta do usuário será um Usuário Padrão e o UAC será desabilitado.
Ambos são cenários de consumidor raros. No entanto, o patcher deve ter o manifesto exigir direitos de Administrador e deve chamar IsUserAnAdmin; se essa função retornar FALSE, a mensagem de erro "Direitos de administrador são necessários" será exibida.
No geral, o método 1 é preferível para jogos que precisam de apenas alguns patches ao longo de seus tempos de vida.
Jogos que exigem patches frequentes
Muitos jogos baseados na Internet estão sendo aprimorados continuamente e geralmente exigem patches regulares. Para esses jogos, os patches podem ser aplicados por usuário ou por computador, conforme discutido nos tópicos a seguir. Outras soluções possíveis incluem alterar a ACL que protege %SystemDrive%\Arquivos de Programas ou criar um serviço personalizado.
Método 3: Instalar Per-User
Uma abordagem recomendada e fácil é instalar todo o jogo em uma subpasta por usuário da pasta de dados do aplicativo local, que você pode encontrar chamando SHGetFolderPath com CSIDL_LOCAL_APPDATA. Um caminho de exemplo é C:\Documents and Settings\user name\Local Settings\Application Data\ExampleGame. Esse local permite que um aplicativo em execução com direitos de Usuário Standard modifique diretamente os arquivos de jogo.
No entanto, há uma desvantagem nessa abordagem quando um computador tem vários usuários: cada usuário tem uma cópia do jogo instalada e os patches devem ser baixados e aplicados por cada usuário. Isso desperdiça não apenas o tempo e o espaço em disco dos usuários, mas também aumenta o uso da largura de banda de rede para o servidor que fornece patches. Além disso, como qualquer aplicativo com direitos de usuário padrão pode modificar o jogo, os executáveis do jogo são menos protegidos; cabe ao fabricante do jogo decidir se isso é aceitável ou não.
Método 4: Instalar em um local de Per-Computer comum
Outro método é instalar os dados de jogo não executáveis em um subdiretório do caminho especificado por SHGetFolderPath CSIDL_COMMON_APPDATA; um caminho de exemplo é C:\Documents and Settings\All Users\Application Data\ExampleGame. Esse é um local compartilhado para todos os usuários e pode ser modificado por aplicativos executados com direitos de Usuário Padrão. Esse método minimiza a necessidade de reaplicar patches grandes quando o jogo é jogado de mais de uma conta. Os arquivos executáveis para o jogo devem ser mantidos em %SystemDrive%\Arquivos de Programas para minimizar o risco para outras contas no sistema. Os arquivos executáveis devem verificar a integridade do novo conteúdo no diretório compartilhado, pois esse local pode ser modificado por um programa ou por uma pessoa com direitos de Usuário Padrão; considere usar MapFileAndCheckSum para calcular uma soma de verificação dos arquivos.
Esse método tem a vantagem de trabalhar igualmente bem no Windows XP e no Windows Vista e não requer direitos de Administrador.
Outras possibilidades
Fora dos métodos já discutidos, outra possibilidade é alterar a ACL de %SystemDrive%\Program Files\Game Folder\ ao instalar o jogo para que uma ferramenta de aplicação de patch possa gravar diretamente nos arquivos do jogo mesmo quando executada com direitos de Usuário Padrão. Embora isso não seja difícil, ele ignora a proteção de segurança que o sistema oferece aos arquivos do jogo e oferece uma oportunidade para programas mal-intencionados alterarem o conteúdo do diretório. Isso não é aconselhável e é altamente recomendável que uma alternativa seja usada.
Uma última possibilidade é escrever um serviço personalizado. Em geral, escrever um serviço personalizado para corrigir jogos não é uma boa ideia, porque fazer isso é complicado e propenso a erros. É recomendável que a aplicação de patch seja feita usando outros métodos discutidos neste artigo. No entanto, um serviço personalizado pode ser necessário quando combinado com soluções anti-cheat ou antipirataria. Esse serviço deve dar suporte a um grande número de jogos e ser projetado para que ele só possa baixar os arquivos de patch e gravar somente no diretório de instalação do jogo de destino. É importante que o serviço seja pequeno, tenha uma área de superfície mínima vulnerável a ataques e use o menor número possível de recursos do sistema quando o jogo não estiver em execução.
Resumo
Por fim, cabe a você decidir qual método implementar. Você precisa pesar os fatores que são importantes para você. Segurança, frequência de aplicação de patch, facilidade de uso pelo cliente, carga de trabalho necessária para implementar, complexidade da solução e conformidade de recursos de plataforma são os fatores que cada desenvolvedor deve considerar antes de decidir sobre um método específico.
Você pode encontrar mais informações sobre a proteção da conta de usuário nos Requisitos de Desenvolvimento de Aplicativos do Windows Vista para UAC (Controle de Conta de Usuário).