Spielen mit Least-Privileged Benutzerkonten

In diesem Artikel wird beschrieben, wie Spieleentwickler Microsoft Windows-Spiele erstellen können, die mit Benutzerkonten mit den geringsten Berechtigungen (auch als Konten mit eingeschränkten Benutzern bezeichnet) funktionieren.

Einführung

Windows verwaltet seine Benutzer mit Konten. Heute teilen sich mehr als achtzig Prozent der Computerbenutzer zu Hause ihren Computer mit anderen Familienmitgliedern. Wenn mehrere Benutzer einen Windows-Computer gemeinsam nutzen, werden mehrere Benutzerkonten erstellt, und jeder Benutzer meldet sich mit einem einzelnen Konto an, um auf den Computer zuzugreifen. Mit dem zunehmenden Sicherheitsbewusstsein betreiben mehr Menschen ihre Computer mit Benutzerkonten mit den geringsten Berechtigungen, die auch als Eingeschränkte Benutzerkonten bezeichnet werden, die nicht die vollständige Kontrolle über das System haben. Administratorkonten haben in der Regel uneingeschränkten Zugriff auf jeden Teil des Computers. Dies kann sich auf die Funktionsweise von Windows-basierten Spielen auswirken.

Es gibt zusätzliche Vorteile für Spieleentwickler, die ihre Spiele schreiben, um mit Benutzerkonten mit den geringsten Berechtigungen zu arbeiten. In Windows Vista und höher werden Benutzerkonten mit den geringsten Berechtigungen erzwungen, was bedeutet, dass jedes Konto auf dem System, mit Ausnahme des lokalen Administrators, ein Benutzerkonto mit den geringsten Berechtigungen ist. Dies wirkt sich darauf aus, wie Spiele, die nicht der Richtlinie entsprechen (Legacyanwendungen), unter Windows Vista und höher ausgeführt werden. Wenn instance eine Anwendung versucht, in einen Ordner oder Registrierungswert zu schreiben, für den sie nicht berechtigt ist, wird der Dateischreibvorgang an einen virtuellen Dateispeicher für den Benutzer umgeleitet. Dieser virtuelle Dateispeicher befindet sich in einem Ordner, auf den der Benutzer Schreibzugriff hat. Dieses Verhalten mag nicht so katastrophal erscheinen, wie ein völliges Scheitern des Schreibversuchs; Anwendungen, die virtualisierte Dateien erstellen, können jedoch Benutzer verwirren, da Dateien nicht an den Speicherort geschrieben werden, den Benutzer erwarten. Für instance werden diese Dateien von Spielen, die Hochwertige Dateien in denselben Ordner wie der ausführbare Ordner schreiben, stattdessen in einen virtualisierten Ordner geschrieben. Folglich kann ein Benutzer die hohe Bewertung eines anderen Benutzers nicht sehen, da jeder Benutzer über einen separaten virtualisierten Dateispeicher verfügt.

Spiele, die den Richtlinien in diesem Artikel folgen, werden mit Benutzerkonten mit den geringsten Berechtigungen ausgeführt und bleiben daher mit Windows Vista und höher kompatibel.

Dateizugriff für Least-Privileged Benutzerkonten

Windows unterstützt zwei Dateisysteme: FAT32 und NTFS. FAT32 ist ein Legacy-Dateisystem, das nur aus Gründen der Abwärtskompatibilität unterstützt wird. NTFS unterstützt leistungsfähigere und robustere Dateiberechtigungen. Die Verwendung von NTFS wird immer größer, da Einzelhändler neue Computer mit vorinstalliertem Windows auf einer NTFS-partitionierten Festplatte versenden. Auf einem NTFS-basierten Windows XP-System haben Benutzer mit Benutzerkonten mit den geringsten Berechtigungen nur eingeschränkten Zugriff auf mehrere Ordner. Sie hätten jedoch vollständigen Zugriff auf ein FAT32-basiertes Windows XP-System.

In der folgenden Tabelle sind der Standardspeicherort dieser Ordner und deren Berechtigungen aufgeführt.

Pfad Ordnerinhalt Lesen Schreiben Erstellen/Löschen
<Laufwerk>:\Windows Das Windows-Betriebssystem X
<Laufwerk>:\Programme Ausführbare Anwendungsdateien X
<Laufwerk>:\Dokumente und Einstellungen\Benutzername* Dateien jedes Benutzers X X X
<Laufwerk>:\Dokumente und Einstellungen\Alle Benutzer Alle Benutzerdateien X X X

 

* Benutzername ist der Anmeldename des Benutzers.

In einem Benutzerkonto mit den geringsten Rechten können Sie Dateien in beiden Ordnern lesen, schreiben, erstellen und löschen: Dokumente und Einstellungen\Benutzername oder Dokumente und Einstellungen\Alle Benutzer.

Dies bedeutet, dass Sie Gespeicherte Spiele nicht in \Programme platzieren sollten, sondern in einem Unterordner in \Meine Dokumente. Außerdem sollten Sie temporäre Anwendungsdaten nicht in \Programme oder \Eigene Dokumente ablegen, sondern im Ordner Anwendungsdaten (CSIDL_LOCAL_APPDATA).

Genauer gesagt gibt es zwei Szenarien, die jedes Spiel behandeln sollte:

Szenario 1: Dateien, die von Benutzern nicht angezeigt oder geändert werden müssen

Ein typisches Beispiel wären die Konfigurationsdatei des Spiels, temporäre Dateien und Spielecachedateien. Diese Dateien werden in der Regel im Ordner Anwendungsdaten aufbewahrt. Um diesen Ordnerpfad abzurufen, rufen Sie die SHGetFolderPath-Funktion mit CSIDL_APPDATA oder CSIDL_LOCAL_APPDATA auf, wie im folgenden Codebeispiel gezeigt.

#include <shlobj.h>
#include <strsafe.h>

#define APPNAME L"MyApp"

WCHAR wszPath[MAX_PATH];

// Local Application Data
SHGetFolderPath( hWnd, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wszPath );
StringCchCatW( wszPath, MAX_PATH, L"\\" );
StringCchCatW( wszPath, MAX_PATH, APPNAME );

// Create the folder wszPath
// Then create files in wszPath
// Roaming Application Data
SHGetFolderPath( hWnd, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, wszPath );
StringCchCatW( wszPath, MAX_PATH, L"\\" );
StringCchCatW( wszPath, MAX_PATH, APPNAME );

// Create the folder wszPath
// Then create files in wszPath

Der Unterschied zwischen lokalen Ordnern und Roamingordnern für Anwendungsdaten besteht darin, dass unter Windows 2000 und Windows XP Roaminginhalte während des Anmelde-/Abmeldeprozesses auf und vom Server kopiert werden, während lokale Inhalte nicht. Für die meisten Spiele sind lokale Anwendungsdaten ausreichend.

Szenario 2: Dateien, die von Benutzern angezeigt oder geändert werden müssen

Ein typisches Beispiel wären die gespeicherten Spieldateien eines Benutzers. Speichern Sie die Dateien im Dokumentordner des Benutzers, damit sie für den Benutzer leicht sichtbar sind. Eine Anwendung ruft den Dokumentordnerpfad des Benutzers ab, indem SHGetFolderPath mit CSIDL_PERSONAL aufgerufen wird, wie das folgende Codebeispiel zeigt:

#include <shlobj.h>
#include <strsafe.h>

#define APPNAME L"MyApp"

WCHAR wszPath[MAX_PATH];

SHGetFolderPath( hWnd, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, wszPath );
StringCchCatW( wszPath, MAX_PATH, L"\\" );
StringCchCatW( wszPath, MAX_PATH, APPNAME );

// Create the folder wszPath
// Then create files in wszPath

Manchmal muss ein Spiel möglicherweise Dateien speichern, die alle Benutzer anzeigen und verwenden sollen. Ein Beispiel ist der Highscore-Datensatz, bei dem alle Benutzer in dieselbe Datensatzdatei schreiben, sodass Highscores systemweit beibehalten werden, anstatt eine separate Hohe Bewertung für jeden Benutzer. Weitere Beispiele sind heruntergeladene Karten, Missionen und Spieländerungen. Wenn diese freigegeben werden, muss nur ein Benutzer sie anstelle jedes Benutzers herunterladen. Verwenden Sie in diesem Szenario den Dokumentordner unter dem Freigegebenen Profilordner, wie im folgenden Code veranschaulicht.

#include <shlobj.h>
#include <strsafe.h>

#define APPNAME L"MyApp"

WCHAR wszPath[MAX_PATH];

SHGetFolderPath( hWnd, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP_TYPE_CURRENT, wszPath );
StringCchCatW( wszPath, MAX_PATH, L"\\" );
StringCchCatW( wszPath, MAX_PATH, APPNAME );

// Create the folder wszPath
// Then create files in wszPath

Registrierungszugriff für Least-Privileged Benutzerkonten

Es ist üblich, dass Anwendungen die Windows-Registrierung zum Speichern von Informationen verwenden. Ähnlich wie beim Dateizugriff verfügen Administratorkonten und Benutzerkonten mit den geringsten Berechtigungen nicht über dieselbe Berechtigung für die Registrierung. Bei Benutzerkonten mit den geringsten Berechtigungen ist der gesamte knoten HKEY_LOCAL_MACHINE schreibgeschützt. Für instance kann ein Spiel die Standardkonfigurationsinformationen lesen, aber keine neuen Informationen auf diesen Knoten schreiben. Folglich müssen Spiele, die im Modus der am wenigsten privilegierten Benutzer ausgeführt werden und in die Registrierung schreiben müssen, den knoten HKEY_CURRENT_USER verwenden, um Benutzerinformationen zu speichern, wie im folgenden Code veranschaulicht.

#define APP_REGISTRY_KEY_PATH L"Software\\MyCompany\\MyApp"

LONG lRetVal;
HKEY hKey;

lRetVal = RegCreateKeyExW( HKEY_CURRENT_USER,
                           APP_REGISTRY_KEY_PATH,
                           0,
                           NULL,
                           REG_OPTION_NON_VOLATILE,
                           KEY_WRITE|KEY_READ,
                           NULL,
                           &hKey,
                           NULL );

if( ERROR_SUCCESS == lRetVal )
{
    // Store information in hKey
}

Es ist erwähnenswert, dass während der Installation Registrierungsinformationen in HKEY_LOCAL_MACHINE geschrieben werden sollten, nicht HKEY_CURRENT_USER. Dies liegt daran, dass die Person, die die Installation ausführt, in der Regel ein Administrator ist und möglicherweise nicht die einzige Person ist, die das Programm verwendet. In dieser Situation führt das Schreiben an HKEY_CURRENT_USER dazu, dass die Informationen für andere Benutzer nicht verfügbar sind. Dies ist normalerweise kein Problem, da die Informationen, die während der Installation in die Registrierung geschrieben werden, die Konfigurations- und Standardeinstellungen sind, die für jeden Benutzer des Programms gelten.

Beim Deinstallieren des Spiels ist zusätzlicher Aufwand erforderlich, um jeden Wert zu entfernen, den das Spiel in die Registrierung geschrieben hat. Da das Deinstallationsprogramm von einer Person ausgeführt wird, normalerweise vom Administrator, werden die relevanten Informationen in HKEY_LOCAL_MACHINE einfach gelöscht, und HKEY_CURRENT_USER werden keine Werte für andere Benutzer entfernt. Eine Möglichkeit zum Entfernen der Benutzerinformationen in der Registrierung besteht darin, den HKEY_USERS Registrierungsstrukturstamm aufzulisten. Jeder Unterschlüssel unter HKEY_USERS entspricht der HKEY_CURRENT_USER Struktur für einen bestimmten Benutzer im System. Durch Auflisten HKEY_USERS und Entfernen der spielspezifischen Informationen unter jedem Unterschlüssel kann das Deinstallationsprogramm sicherstellen, dass keine Informationen zurückbleiben.

Patchen mit Least-Privileged Benutzerkonten

Das Patchen eines Spiels beinhaltet das Aktualisieren der Dateien des Spiels. Daher ist in der Regel Schreibzugriff auf den Programmordner des Spiels erforderlich. Das Patchen eines Spiels ist ein einfacher Prozess, wenn es von einem Administrator durchgeführt wird, da er uneingeschränkten Zugriff auf den Programmordner des Spiels hat. Umgekehrt war es für einen Benutzer mit den geringsten Berechtigungen aufgrund der Zugriffsbeschränkung traditionell schwierig, wenn nicht gar unmöglich, Spiele zu patchen. Nun wurde Windows Installer erweitert, um das Patchen von Benutzerkonten mit den geringsten Berechtigungen zu ermöglichen. Um dieses Feature zu nutzen, sollten Spiele Windows Installer für die Installation und das Patchen verwenden.

Ab Windows Installer 3.0 können Anwendungspatches von Benutzern mit den geringsten Berechtigungen angewendet werden, wenn bestimmte Bedingungen erfüllt sind. Diese Bedingungen sind:

  • Die Anwendung wurde mit Windows Installer 3.0 installiert.
  • Die Anwendung wurde ursprünglich pro Computer installiert.
  • Die Anwendung wird von Wechselmedien wie cd-ROM oder digital video disc (DVD) installiert.
  • Die Patches werden digital von einem Zertifikat signiert, das durch das ursprüngliche Installationspaket (.msi Datei) identifiziert wird.
  • Die Patches können anhand der digitalen Signatur überprüft werden.
  • Das ursprüngliche Installationsprogrammpaket hat das Patchen von Benutzerkonten mit den geringsten Berechtigungen nicht deaktiviert.
  • Der Systemadministrator hat das Patchen von Benutzerkonten mit den geringsten Berechtigungen über die Systemrichtlinie nicht deaktiviert.

Normalerweise kann ein Benutzer mit den geringsten Berechtigungen die Programmdateien eines Spiels nicht ändern. Wenn die oben genannten Bedingungen erfüllt sind und das LUA-Patchen aktiviert ist, kann Windows Installer die Dateien des Spiels aktualisieren, sodass der Benutzer die neueste Version erhält.

Hinweis

Die in diesem Artikel enthaltenen Informationen beziehen sich auf vorab veröffentlichte Softwareprodukte, die vor dem ersten kommerziellen Release erheblich geändert werden können. Dementsprechend können die Informationen das Softwareprodukt bei der ersten kommerziellen Veröffentlichung möglicherweise nicht genau beschreiben oder widerspiegeln. Dieser Artikel dient nur zu Informationszwecken, und Microsoft übernimmt keine ausdrückliche oder implizite Gewährleistung in Bezug auf diesen Artikel oder die darin enthaltenen Informationen.