次の方法で共有


Windows XP、Windows Vista、Windows 7 でのゲーム ソフトウェアの修正プログラムの適用

Windows Vista と Windows 7 には、オペレーティング システムの安全性を高める機能が多数用意されています。 セキュリティが強化されたということは、ソフトウェアへのパッチの適用が以前ほど簡単ではないことを意味します。 この記事では、Windows Vista と Windows 7、および Windows XP で適切に動作する修正プログラムの適用方法をいくつか説明します。

パッチを必要とするゲームには、次の 2 つのメインカテゴリがあります。

  • ほとんどのオフライン ゲームなど、不定期のパッチのみを必要とするゲーム。
  • ほとんどのオンライン ゲームなど、頻繁なパッチを必要とするゲーム。

この記事では、ユーザー アカウント制御 (UAC) について簡単に説明し、開発者が Windows Vista および Windows 7 でユーザーに与える権利に関する背景として機能します。

ユーザー アカウント制御

Windows Vista と Windows 7 には、Standard User と Administrator という 2 つの主な種類のユーザー アカウントがあります。 Standard ユーザー アカウントには、いくつかのアクセス制限があります。たとえば、%SystemDrive%\Program Files のファイル システムや、HKEY_LOCAL_MACHINEのレジストリにデータを書き込むことはできません。 これは、ゲームが読み取り専用の場所にインストールされている場合に、ゲームにパッチを適用する場合に影響します。 Windows XP とは異なり、Windows Vista と Windows 7 では Standard ユーザー アカウントの方がはるかに一般的です。 標準ユーザー アカウントは、ペアレンタル コントロールなどのオペレーティング システムの重要な機能にも必要です。 ペアレンタル コントロールでは、子アカウントを Standard ユーザーにする必要があります。このようなアカウントを管理者に昇格すると、1 つのゲームでもペアレンタル コントロールが他のすべてのゲームと連携できなくなります。 そのため、ゲームは Standard User 用に設計することが重要です。

Windows Vista と Windows 7 には、ユーザーが意図または承認しない操作を実行しようとするプログラムをユーザーが実行できないようにするための、ユーザー権限の新しいモデルがあります。 そのため、ユーザー アカウント制御 (旧称:最小特権ユーザー アカウントまたは LUA) を使用すると、ユーザーは、必要に応じて、より高いレベルの権限を必要とするアプリケーションを簡単に実行しながら、ほとんどの場合、低レベルの権限でコンピューターを操作できます。 つまり、Standard ユーザー アカウントと管理者アカウントはどちらも Standard ユーザー権限を持つアプリケーションを実行しますが、管理者アカウントのみがアプリケーションに昇格された権限を付与できます。 オペレーティング システムは、管理者特権を持つアプリケーションを実行する前に、管理者アカウントを持つユーザーに明示的な同意を求め、管理者権限を必要とするプログラムが Standard ユーザー アカウントで実行されている場合は、管理者の承認を求められます。

不定期パッチのみを必要とするゲーム

一部のゲームでは、ライフサイクル全体でいくつかのパッチのみが必要です。 この修正プログラムの頻度に使用できる 2 つの方法は、一般的に管理者権限を必要としない Windows インストーラー パッケージとしてパッチを配布するか、ゲーム ファイルを直接変更する他の種類の配布を使用することです。

注意

ゲームに頻繁にパッチを適用する必要があるかどうかに関係なく、通常、アプリケーションには管理者権限をインストールまたは削除する必要があります。

 

方法 1: 不定期の修正プログラムに Windows インストーラーを使用する

この方法では、Windows インストーラーを使用してパッケージ (.msi ファイル) をインストールし、Windows インストーラーパッチ (.msp ファイル) を配布してパッチをインストールします。 パッケージには MsiPatchCertificate テーブルが必要であり、パッチはテーブル内の証明書によってデジタル署名されている必要があります。 デジタル署名の詳細については、「 Authenticode Signing for Game Developers」を参照してください。

この修正方法を使用するための詳細と要件については、Windows インストーラーのドキュメントを参照してください。

この方法の欠点は、ゲームが Windows XP のリムーバブル メディアからインストールされていない場合、修正プログラムを適用するには管理者権限が必要です。 ただし、Windows XP のほとんどのユーザー管理者と、リムーバブル メディアからインストールされたソフトウェアに対する制限が Windows Vista に存在しないため、これはあまり制限が厳しくない可能性があります。

この方法のメイン利点は、昇格された権限のプロンプトと認証を必要とせずに、Standard ユーザー アカウントでパッチを適用できることです。 これにより、ゲームをプレイするために、Standard ユーザー アカウントを持つユーザーは、管理者アカウントを持つユーザーにパッチのインストールや、永続的な管理者権限を持つ Standard ユーザー アカウントの提供を依頼する必要がないため、ユーザー エクスペリエンスが向上します。

この方法は、頻繁な修正プログラムを必要とするゲームで動作する可能性がありますが、ビルド統合と多数のファイルのサポートの観点から、Windows インストーラー パッケージを使用するオーバーヘッドにより、この方法は他の方法よりも望ましくない場合があります。

方法 2: 修正プログラムを適用するために管理者権限を要求する

このメソッドでは、パッチを適用する実行可能ファイルを実行するには管理者権限が必要です。 管理者権限を使用すると、修正プログラムを適用する実行可能ファイルは、%SystemDrive%\Program Files にあるゲーム ファイルを直接変更できます。

この方法の利点は、そのシンプルさです。 ただし、この方法は、ゲームに頻繁なパッチが必要な場合は不適切です。これは、Standard ユーザー アカウントを持つユーザーが、非常に多くのマルチプレーヤー オンライン ゲームのような頻繁なパッチを必要とするゲームをプレイする場合、そのユーザーには次の 2 つの選択肢があるためです。

  • 管理者にログオンしてゲームにパッチを適用してもらう。これは、両当事者にとって不便な場合があります。
  • 管理者権限でアカウントを完全に昇格させます。

注意

後者のソリューションは、システム全体のセキュリティを弱めるだけでなく、親のコントロールなどの重要な機能が機能するのを防ぎます。

 

このメソッドを実装する場合、パッチを適用する実行可能ファイルは、ゲームの実行可能ファイルとは異なる必要があります。 修正プログラムを適用する実行可能ファイルのマニフェストでは、管理者権限を必要とするアプリケーションとして示すために、requestedExecutionLevel に requireAdministrator を指定する必要があります。 これを行う方法の詳細については、「アプリケーション マニフェスト スキーマ」の「 最小特権環境でのアプリケーションの開発者のベスト プラクティスとガイドライン」を参照してください。

このメソッドを使用する場合、マニフェストの設定でも、次の 2 つの場合に管理者権限なしで実行可能ファイルが起動される可能性があります。

  • オペレーティング システムが Windows XP で、ユーザーのアカウントが制限付きユーザーの場合。
  • オペレーティング システムが Windows Vista または Windows 7 の場合、ユーザーのアカウントは Standard ユーザーであり、UAC は無効になっています。

これらはどちらもまれなコンシューマー シナリオです。 ただし、パッチャーには管理者権限が必要なマニフェストが必要であり、 IsUserAnAdmin を呼び出す必要があります。この関数が FALSE を返す場合は、"管理者権限が必要です" というエラー メッセージが表示されます。

全体的に、メソッド 1 は、有効期間中に数個のパッチを必要とするゲームに適しています。

頻繁なパッチが必要なゲーム

多くのインターネットベースのゲームは継続的に改善されており、通常は定期的なパッチが必要です。 これらのゲームでは、次のトピックで説明するように、ユーザーごとまたはコンピューターごとにパッチを適用できます。 その他の解決策としては、%SystemDrive%\Program Files を保護する ACL の変更やカスタム サービスの作成などがあります。

方法 3: Per-Userをインストールする

推奨される簡単な方法の 1 つは、ローカル アプリケーション データ フォルダーのユーザーごとのサブフォルダーにゲーム全体をインストールすることです。これは、CSIDL_LOCAL_APPDATAを使用して SHGetFolderPath を呼び出すことで確認できます。 パスの例は、C:\Documents and Settings\user name\Local Settings\Application Data\ExampleGame です。 このような場所では、Standard User 権限で実行されているアプリケーションがゲーム ファイルを直接変更できます。

ただし、コンピューターに複数のユーザーがいる場合、この方法には欠点があります。各ユーザーにはゲームのコピーがインストールされており、各ユーザーがパッチをダウンロードして適用する必要があります。 これにより、ユーザーの時間とディスク領域が無駄になりますが、パッチを提供するサーバーへのネットワーク帯域幅の使用も増えます。 また、標準的なユーザー権限を持つアプリケーションはゲームを変更できるため、ゲームの実行可能ファイルの保護が低下します。これが許容されるかどうかを判断するのはゲームメーカー次第です。

方法 4: 共通のPer-Computerの場所にインストールする

もう 1 つの方法は、非実行可能なゲーム データを 、SHGetFolderPath CSIDL_COMMON_APPDATAで指定されたパスのサブディレクトリにインストールすることです。パスの例は C:\Documents and Settings\All Users\Application Data\ExampleGame です。 これはすべてのユーザーの共有場所であり、Standard User 権限で実行されるアプリケーションによって変更できます。 この方法では、複数のアカウントからゲームをプレイするときに、大きなパッチを再適用する必要が最小限に抑えられます。 ゲームの実行可能ファイルは、システム上の他のアカウントに対するリスクを最小限に抑えるために、%SystemDrive%\Programs Files に保持する必要があります。 実行可能ファイルは、共有ディレクトリ内の新しいコンテンツの整合性を確認する必要があります。その場所は、標準ユーザー権限を持つプログラムまたはユーザーによって変更される可能性があるためです。 MapFileAndCheckSum を使用してファイルのチェックサムを計算することを検討してください。

この方法には、Windows XP と Windows Vista の両方で同様に機能する利点があり、管理者権限は必要ありません。

その他の可能性

既に説明した方法以外では、ゲームのインストール時に %SystemDrive%\Program Files\Game Folder\ の ACL を変更して、標準ユーザー権限を使用して実行した場合でも修正プログラムツールがゲームのファイルに直接書き込むことができるようにすることもできます。 これは困難ではありませんが、システムがゲームのファイルに提供するセキュリティ保護をバイパスし、悪意のあるプログラムがディレクトリの内容を変更する機会を提供します。 これはお勧めできません。代わりに代替手段を使用することを強くお勧めします。

最後の可能性の 1 つは、カスタム サービスを記述することです。 一般に、パッチ ゲームにカスタム サービスを記述することは、複雑でエラーが発生しやすいため、良い考えではありません。 修正プログラムの適用は、この記事で説明されている他の方法を使用して行うことをお勧めします。 ただし、チート対策または著作権侵害対策ソリューションと組み合わせる場合は、カスタム サービスが必要になる場合があります。 このようなサービスは、多数のゲームをサポートし、パッチ ファイルのみをダウンロードし、ターゲット ゲームのインストール ディレクトリにのみ書き込むことができるように設計する必要があります。 サービスが小さく、攻撃に対して脆弱な最小限の表面積を持ち、ゲームが実行されていないときに可能な限り少ないシステム リソースを使用することが重要です。

まとめ

最終的には、実装する方法を決める必要があります。 重要な要因を検討する必要があります。 セキュリティ、パッチ適用の頻度、お客様による使いやすさ、実装に必要なワークロード、ソリューションの複雑さ、プラットフォーム機能のコンプライアンスは、特定の方法を決定する前に各開発者が考慮する必要がある要因です。

ユーザー アカウント保護の詳細については、「 Windows Vista Application Development Requirements for User Account Control (UAC)」を参照してください。