Condividi tramite


Patching Game Software in Windows XP, Windows Vista e Windows 7

Windows Vista e Windows 7 hanno numerose funzionalità per rendere il sistema operativo più sicuro. La sicurezza aggiunta significa che l'applicazione di patch al software non è semplice come in passato. Questo articolo esamina alcuni metodi di patch che funzioneranno bene in Windows Vista e Windows 7, oltre a Windows XP.

Esistono due categorie principali di giochi che richiedono patch:

  • Giochi che richiedono solo patch occasionali, ad esempio la maggior parte dei giochi offline.
  • Giochi che richiedono patch frequenti, ad esempio la maggior parte dei giochi online.

Questo articolo offre anche una breve introduzione al controllo account utente (UAC) per fungere da background sui diritti che gli sviluppatori possono prevedere che gli utenti abbiano in Windows Vista e Windows 7.

Controllo dell'account utente

Windows Vista e Windows 7 hanno due tipi principali di account utente: Utente standard e amministratore. Un account utente standard ha diverse restrizioni di accesso; ad esempio, non può scrivere dati nel file system in %SystemDrive%\Programmi o nel Registro di sistema nel HKEY_LOCAL_MACHINE. Ciò ha implicazioni per l'applicazione di patch a un gioco se è installato in una posizione di sola lettura. A differenza di Windows XP, l'account utente standard è molto più comune in Windows Vista e Windows 7. Gli account utente standard sono necessari anche per funzionalità importanti del sistema operativo, ad esempio i controlli genitori. I controlli genitori richiedono che l'account figlio sia l'utente standard e l'elevazione di tale account all'amministratore per anche un gioco impedisce ai controlli genitori di lavorare con tutti gli altri giochi. Quindi, è importante che i giochi siano progettati per l'utente standard.

Windows Vista e Windows 7 hanno un modello più recente per i diritti utente, per impedire agli utenti di eseguire programmi che tentano di eseguire operazioni che l'utente non intende o autorizza. A tale scopo, Controllo account utente (in precedenza denominato Account utente con privilegi minimi o LUA) consente agli utenti di operare il computer con diritti di basso livello nella maggior parte del tempo, pur essendo in grado di eseguire facilmente applicazioni che richiedono diritti di livello superiore, se necessario. Ciò significa che gli account utente standard e gli account amministratore eseguono entrambe le applicazioni con diritti utente standard, ma solo gli account amministratore hanno la possibilità di concedere diritti elevati alle applicazioni. Il sistema operativo chiede agli utenti con account amministratore il consenso esplicito prima di eseguire un'applicazione con diritti elevati e se un programma che richiede diritti di amministratore viene eseguito in un account utente standard, il sistema richiede l'approvazione dell'amministratore.

Giochi che richiedono solo patch occasionali

Alcuni giochi richiedono solo alcune patch durante il ciclo di vita. Due metodi che è possibile usare per questa frequenza di patch sono distribuire patch come pacchetti di Windows Installer, che in genere non richiedono diritti di amministratore o per usare un altro tipo di distribuzione che modifica direttamente i file di gioco.

Nota

Indipendentemente dal fatto che un gioco richieda patch frequenti, le applicazioni richiedono in genere diritti di amministratore da installare o rimuovere.

 

Metodo 1: Usare Windows Installer per patch occasionali

In questo metodo viene usato un Windows Installer per installare un pacchetto (.msi file) e viene distribuita una patch di Windows Installer (file msp) per installare le patch. Il pacchetto deve avere una tabella MsiPatchCertificate e la patch deve essere firmata digitalmente da un certificato nella tabella. Altre informazioni sulla firma digitale sono disponibili in Authenticode Signing for Game Developers.

Altre informazioni e requisiti per l'uso di questo metodo di patch sono disponibili nella documentazione di Windows Installer:

Lo svantaggio di questo metodo è che se il gioco non è stato installato da supporti rimovibili in Windows XP, l'applicazione di patch richiede diritti di amministratore. Tuttavia, questo non sarà troppo restrittivo, perché la maggior parte degli utenti in Windows XP e la restrizione al software installato da supporti rimovibili non è presente in Windows Vista.

Il vantaggio principale di questo metodo è che le patch possono essere applicate da un account utente standard senza richiedere un prompt e un'autenticazione per i diritti elevati. Ciò offre un'esperienza utente migliore, perché per giocare a un gioco, un utente con un account utente standard non deve chiedere a un utente con un account amministratore di installare la patch o fornire all'account utente standard diritti di amministratore permanenti.

È possibile che questo metodo funzioni per i giochi che richiedono patch frequenti, ma il sovraccarico dell'uso dei pacchetti di Windows Installer, in termini di integrazione della compilazione e supporto di un numero elevato di file, potrebbe rendere questo metodo meno auspicabile di altri.

Metodo 2: Richiedere diritti di amministratore per applicare patch

In questo metodo il file eseguibile che applica la patch richiede diritti di amministratore per l'esecuzione. Con i diritti di amministratore, l'eseguibile di patch può modificare direttamente i file di gioco presenti in %SystemDrive%\Programmi.

Il vantaggio di questo metodo è la sua semplicità. Tuttavia, questo metodo non è adatto se il gioco necessita di patch frequenti, perché se un utente con un account utente standard vuole giocare a un gioco che richiede patch frequenti, come un gioco online con più giocatori di grandi dimensioni, quindi l'utente ha due scelte:

  • Ottenere un amministratore per accedere e applicare patch al gioco, che potrebbe essere scomodo per entrambe le parti.
  • Avere il proprio account con privilegi di amministratore in modo permanente.

Nota

Quest'ultima soluzione non solo indebolisce la sicurezza del sistema nel suo complesso, ma impedisce funzionalità importanti, come i controlli genitori, di lavorare.

 

Quando si implementa questo metodo, il file eseguibile che applica la patch deve essere diverso dal file eseguibile del gioco. Il manifesto dell'eseguibile di patch deve specificare richiedeAdministrator per richiedereExecutionLevel di denotarlo come applicazione che richiede diritti di amministratore. Altre informazioni su come eseguire questa operazione sono disponibili in Procedure consigliate per sviluppatori e linee guida per le applicazioni in un ambiente con privilegi minimi, in "Schema manifesto applicazione".

Quando questo metodo viene usato, anche con le impostazioni nel manifesto, il file eseguibile potrebbe comunque essere avviato senza diritti di amministratore in due casi:

  • Se il sistema operativo è Windows XP e l'account dell'utente è un utente con restrizioni.
  • Se il sistema operativo è Windows Vista o Windows 7, l'account dell'utente è un utente standard e l'interfaccia utente è disabilitata.

Entrambi questi sono rari scenari di consumo. Tuttavia, il patcher deve avere i diritti di amministratore e deve chiamare IsUserAnAdmin; se questa funzione restituisce FALSE, viene visualizzato il messaggio di errore "I diritti di amministratore sono necessari".

Nel complesso, il metodo 1 è preferibile per i giochi che necessitano solo di alcune patch durante la loro vita.

Giochi che richiedono patch frequenti

Molti giochi basati su Internet sono stati migliorati continuamente e in genere richiedono patch regolari. Per questi giochi, le patch possono essere applicate per utente o per computer, come illustrato negli argomenti seguenti. Altre possibili soluzioni includono la modifica dell'elenco di controllo di accesso che protegge %SystemDrive%\Programmi o la creazione di un servizio personalizzato.

Metodo 3: Installare Per-User

Un approccio consigliato e semplice consiste nell'installare l'intero gioco in una sottocartella per utente della cartella dati dell'applicazione locale, che è possibile trovare chiamando SHGetFolderPath con CSIDL_LOCAL_APPDATA. Un percorso di esempio è C:\Documents and Settings\user name\Local Settings\Application Data\ExampleGame. Tale posizione consente a un'applicazione in esecuzione con diritti utente standard di modificare direttamente i file di gioco.

Tuttavia, c'è uno svantaggio per questo approccio quando un computer ha più utenti: ogni utente ha una copia del gioco installato e le patch devono essere scaricate e applicate da ogni utente. Questo spreco non solo tempo e spazio su disco degli utenti, ma aumenta anche l'uso della larghezza di banda di rete per il server che fornisce patch. Inoltre, poiché qualsiasi applicazione con diritti utente standard può modificare il gioco, i file eseguibili del gioco sono meno protetti; è il produttore del gioco a decidere se è accettabile o meno.

Metodo 4: Installare in un percorso di Per-Computer comune

Un altro metodo consiste nell'installare i dati del gioco non eseguibili in una sottodirectory del percorso specificato da SHGetFolderPath CSIDL_COMMON_APPDATA; un percorso di esempio è C:\Documents e Settings\All Users\Application Data\ExampleGame. Si tratta di un percorso condiviso per tutti gli utenti e può essere modificato dalle applicazioni eseguite con diritti utente standard. Questo metodo riduce al minimo la necessità di riapplicare patch di grandi dimensioni quando il gioco viene giocato da più di un account. I file eseguibili per il gioco devono essere conservati in %SystemDrive%\Programmi per ridurre al minimo il rischio per altri account nel sistema. I file eseguibili devono verificare l'integrità del nuovo contenuto nella directory condivisa, poiché tale posizione può essere modificata da un programma o da una persona con diritti utente standard; prendere in considerazione l'uso di MapFileAndCheckSum per calcolare un checksum dei file.

Questo metodo ha il vantaggio di funzionare altrettanto bene sia in Windows XP che in Windows Vista e non richiede diritti di amministratore.

Altre possibilità

Al di fuori dei metodi già illustrati, un'altra possibilità consiste nel modificare l'ACL di %SystemDrive%\Program Files\Game Folder\ quando si installa il gioco in modo che uno strumento di patch possa scrivere direttamente nei file del gioco anche quando viene eseguito con diritti utente standard. Anche se questo non è difficile, ignora la protezione di sicurezza che il sistema offre ai file del gioco e offre un'opportunità per i programmi dannosi per modificare il contenuto della directory. Questo non è consigliabile e si consiglia vivamente di usare un'alternativa.

Una possibilità finale consiste nel scrivere un servizio personalizzato. In generale, la scrittura di un servizio personalizzato per i giochi di patch non è una buona idea, perché questa operazione è complicata e soggetta a errori. È consigliabile eseguire l'applicazione di patch usando altri metodi descritti in questo articolo. Tuttavia, un servizio personalizzato potrebbe essere necessario quando si combinano con soluzioni anti-pirateria o anti-pirateria. Tale servizio deve supportare un numero elevato di giochi e essere progettato in modo che possa scaricare solo i file di patch e scrivere solo nella directory di installazione per il gioco di destinazione. È importante che il servizio sia piccolo, avere un'area minima di superficie che è vulnerabile agli attacchi e usare le risorse di sistema il più possibile quando il gioco non è in esecuzione.

Riepilogo

In definitiva, è necessario decidere quale metodo implementare. Devi pesare i fattori che sono importanti per te. Sicurezza, frequenza di patch, facilità d'uso da parte del cliente, carico di lavoro necessario per implementare, complessità della soluzione e conformità delle funzionalità della piattaforma sono i fattori che ogni sviluppatore deve prendere in considerazione prima di decidere su un determinato metodo.

Per altre informazioni sulla protezione degli account utente, vedere Requisiti di sviluppo delle applicazioni windows Vista per controllo account utente.