Benutzerkonten und schneller Benutzerwechsel

Veröffentlicht: 09. Dez 2001 | Aktualisiert: 15. Jun 2004

Von Chris Evans und Piero Sierra

In diesem Artikel werden einige Features von Microsoft Windows XP erläutert, u.a. mehrere Benutzerkonten, schneller Benutzerwechsel und der Remotedesktop.

Einführung

Gleichgültig, ob Sie Anwendungen für die Microsoft ® Windows ® XP Home Edition oder die Windows XP Professional Edition schreiben, sollten Sie beachten, dass Windows XP (der Codename für die Betaform lautet "Whistler") ein persönliches System ist. Dies bedeutet, dass jeder Benutzer des Computers ein eigenes Windows XP-Konto erhält. In einem Geschäftsszenario können mehrere Benutzer über einen Computer auf die jeweils eigene E-Mail zugreifen. Dazu gehört auch der vollständige Zugriff auf die eigenen Dokumente und Einstellungen. Wenn eine Familie die Home Edition verwendet, erhält jedes Familienmitglied ein eigenes Konto. Dies ist ein Fortschritt gegenüber Microsoft Windows 95 und Windows 98, wo alle Benutzer in einem Haushalt i.d.R. ein gemeinsames Konto teilten.

Den Benutzern wird während des Setups die Möglichkeit gegeben, diese Konten zu erstellen. Die Konten können jedoch auch später über die Systemsteuerung erstellt werden. Diese Konten basieren auf Windows 2000-Profilen – die Daten der einzelnen Benutzer werden also getrennt. Die Konten sind standardmäßig nicht durch ein Kennwort geschützt, ein Benutzer kann jedoch für sein Konto ein Kennwort einrichten.

Wenn für den Computer mehrere Konten bestehen, wird ein Willkommen-Bildschirm angezeigt. In diesem Fenster wird für jeden Benutzer eine Grafik angezeigt. Durch Klicken auf diese Grafik meldet sich der Benutzer beim Computer an.

 

Schneller Benutzerwechsel

Windows XP führt das Feature zum schnellen Benutzerwechsel ein. In Windows XP muss sich ein Benutzer nicht vom Computer abmelden, wenn ein anderer Benutzer auf sein Konto zugreifen möchte. Stattdessen ist das Konto des Benutzers immer angemeldet, und die Benutzer können schnell zwischen allen geöffneten Konten wechseln. Auf einem Computer können viele Konten gleichzeitig geöffnet sein.

Beispiel: Der Vater kommt nach Hause und beginnt, am Computer zu arbeiten. Er öffnet Microsoft ® PowerPoint ® und beginnt mit der Arbeit an einem Dokument. Der Sohn Kevin fragt, ob er den Computer benutzen darf. Kevin wechselt zum Willkommen-Bildschirm, klickt auf die Grafik für Kevin und beginnt ein Computerspiel. Der Vater ist jedoch noch angemeldet. Wenn er es möchte, kann der Vater zu seinem geöffneten Konto wechseln, ohne dass Kevin sich abmelden muss. Seine PowerPoint-Präsentation bleibt weiterhin geöffnet, und seine Internetverbindung bleibt bestehen.

Auf der Arbeitsstelle kann der Vater über den schnellen Benutzerwechsel den Computer mit einem Kollegen gemeinsam nutzen, der zu anderen Zeiten arbeitet, selbst wenn sich die Arbeitszeiten überschneiden.

 

Remotedesktop

Ein weiteres Feature von Windows XP ist Remotedesktop. Dank dieses Features kann ein Benutzer über andere Computer auf eigene Daten und Anwendungen zugreifen. Windows XP ermöglicht Benutzern bei geschäftlich genutzten Workstations, von Remotecomputern aus auf den eigenen Desktop zuzugreifen.

So kann z.B. die Mutter ihre Workstation im Büro sperren, nach Hause gehen und sich mit ihrer Workstation im Büro verbinden. Der private Computer kann die auf der Workstation im Büro ausgeführten Anwendungen remote steuern. Wenn die Mutter wieder im Büro ist, kann sie ihren Desktop entsperren und dort weiterarbeiten, wo sie zu Hause aufgehört hat.

Ein weiteres Beispiel: Sie sind unterwegs und arbeiten an zahlreichen Vertriebskonten. Sie möchten den Text eines Vertrags überprüfen, den Sie im Büro auf dem Computer im Ordner Eigene Dateien gespeichert haben. Sie fahren zur nächsten Niederlassung und benutzen dort einen Computer. Sie können Ihr Konto mit allen Ihren Dokumenten und Einstellungen sowie den Vertrag öffnen, ohne dabei den aktuellen Benutzer des Computers abmelden zu müssen.

 

Anforderungen und Infrastruktur

Sowohl der schnelle Benutzerwechsel als auch der Remotedesktop verwenden die Terminaldiensttechnologie und funktionieren mit den meisten vorher veröffentlichten Microsoft ® Win32 ® -Anwendungen, ohne dass Änderungen erforderlich sind. Für den Benutzerwechsel ist kein neuer Code erforderlich, sondern gut geschriebener Code für Windows XP. Wenn Ihre Anwendung für das Windows 2000-Anwendungszertifizierungsprogramm zertifiziert ist und Sie grundlegende Funktionen für die Profiltrennung und Leistungsverwaltung implementieren, wird Ihre Anwendung in Windows XP ordnungsgemäß ausgeführt.

Anmerkung Sie können einige neue Meldungen nutzen, damit Ihre Anwendung auf Windows XP-Systemen noch besser läuft. Diese Meldungen werden weiter unten beschrieben.

Windows 2000 stellt die zugrunde liegende Infrastruktur bereit, die in alle Versionen von Windows XP (auch die Professional- und Home-Clientversionen) eingebunden wurde. Diese Infrastruktur unterstützt die Statustrennung von Benutzerdaten, Benutzereinstellungen und Computereinstellungen. Anwendungen, die die Infrastruktur ordnungsgemäß verwenden, haben die folgenden Vorteile:

  • Ein Benutzer kann einfach Sicherungskopien von persönlichen Dokumenten und Einstellungen erstellen, ohne Anwendungs- und Betriebssystemdateien sichern zu müssen.

  • Wie oben gezeigt, können mehrere Benutzer einen Computer gemeinsam nutzen, wobei die Einstellungen der einzelnen Benutzer beibehalten werden.

  • Außerdem kann ein Benutzer an mehreren Computern arbeiten und die Dokumente und Einstellungen von einem anderen Computer aus verwalten.

Die Anforderungen sind einfach:

  • Verwenden Sie standardmäßig den Ordner Eigene Dateien zum Speichern von Daten, die von Benutzern erstellt werden.

  • Anwendungsdaten müssen korrekt klassifiziert und gespeichert werden.

  • Führen Sie bei "Zugriff verweigert"-Meldungen elegante Wiederherstellungen durch.

 

Neue Meldung für Sitzungswechsel

In der Regel muss eine Anwendung nicht benachrichtigt werden, wenn die Sitzung gewechselt wird. Wenn der Anwendung jedoch mitgeteilt werden muss, wann ihr Desktop aktuell ist, kann sie für Sitzungwechselbenachrichtigungen registriert werden. Anwendungen, die auf den seriellen Anschluss oder eine andere gemeinsam genutzte Ressource auf dem Computer zugreifen, sollten diese Funktion verwenden. Verwenden Sie die folgende Funktion aus Wtsapi32.h, um eine Anwendung für eine Benachrichtigung registrieren zu lassen:

BOOL WINAPI 
WTSRegisterConsoleNotification( 
    HWND hWnd,         // Fensterhandle 
    DWORD dwFlags         // Flags 
    ); 

Der registrierte HWND empfängt die Meldung WM_WTSSESSION_CHANGE.

Unter dwFlags können Sie Folgendes angeben:

NOTIFY_FOR_THIS_SESSION – Das Fenster wird nur bei Sitzungswechselereignissen informiert, die die Sitzung betreffen, zu der das Fenster gehört.

NOTIFY_FOR_ALL_SESSIONS – Das Fenster wird bei allen Sitzungswechselereignissen benachrichtigt.

Die in dieser Sitzung auftretende Aktion befindet sich in wParam-Code, der ggf. eines der folgenden Flags enthält.

WTS_CONSOLE_CONNECT, WTS_CONSOLE_DISCONNECT, WTS_REMOTE_CONNECT WTS_REMOTE_DISCONNECT

lParam enthält die Sitzungs-ID für die entsprechende Sitzung.

Wenn für Ihren Prozess diese Benachrichtigungen nicht mehr erforderlich sind oder der Prozess beendet wird, sollte der folgende Aufruf ausgeführt werden, um die Benachrichtigungsregistrierung aufzuheben.

BOOL WINAPI 
WTSUnRegisterConsoleNotification( 
    HWND hWnd      // Fensterhandle. 
    ); 

Die an WTSRegisterConsoleNotification übergebenen HWND-Werte werden nach der Anzahl der Verweise gezählt, weshalb Sie WTSUnRegisterConsoleNotification genauso oft wie WTSRegisterConsoleNotification aufrufen müssen.

Anwendungen können zum Verfolgen des Status die WM_WTSSESSION_CHANGE-Meldung verwenden sowie konsolenspezifische Ressourcen freigeben und erhalten.

 

Sicherstellen, dass eine Version Ihrer Anwendung ausgeführt wird

Bei vielen Anwendungen muss sichergestellt werden, dass nur eine Instanz der Anwendung ausgeführt wird. Dafür gibt es viele Möglichkeiten, die in Windows XP funktionieren.

  • Suchen Sie mit FindWindow oder FindWindowEx nach einem Fenster, das von Ihrer Anwendung geöffnet wird. Wenn bereits ein Fenster geöffnet ist, ermitteln Sie mit FindWindow oder FindWindowEx, ob die Anwendung bereits geöffnet ist.

  • Erstellen Sie ein Mutex oder Semaphor, wenn Ihre Anwendung geöffnet ist, und schließen Sie es, wenn die Anwendung vorhanden ist. Der globale Objektnamespace wird für jeden Desktop getrennt, wodurch eine eindeutige Liste von Mutexen und Semaphoren zugelassen wird.

 

Interaktion zwischen Systemdiensten

Vom Programmierstandpunkt aus müssen zwei Fälle berücksichtigt werden.

  • Der Serverprozess empfängt eine direkte Anforderung von einem Clientprozess. In diesem Fall wird die Meldung wahrscheinlich über LPC oder RPC übertragen. In beiden Fällen gibt es APIs zum Abrufen des Clienttokens. Sobald das Clienttoken abgerufen wurde, kann der Server advapi32!CreateProcessAsUser aufrufen. Dadurch wird der Prozess an der richtigen Windows-Station aufgerufen, vorausgesetzt, das Clientbenutzertoken verfügt über ein Sitzungstag, was der Fall sein sollte.
    Anmerkung advapi32!CreateProcessAsUser bietet derzeit keine sitzungsübergreifende Unterstützunghandlevererbung.

  • Der Serverprozess empfängt eine Benachrichtigung und muss die Benutzeroberfläche anzeigen. Dies muss jedoch nicht im Kontext des aktuellen Benutzers geschehen. In diesem Fall kann der Serverprozess sein primäres Prozesstoken duplizieren und den Sitzungsbezeichner in den aktuellen Sitzungsbezeichner ändern. Wenn Sie die Sitzungs-ID der derzeit auf der Konsole ausgeführten Sitzung aufrufen möchten, verwenden Sie die öffentliche API WTSGetActiveConsoleSessionID().
    Anmerkung Wenn Sie die Tokensitzungs-ID einstellen möchten, benötigen Sie SE_TCB_PRIVILEGE. Dies wird nur in NT AUTHORITY\SYSTEM als Dienst ausgeführt.

 

Andere Probleme

Erstellen Sie keine zugeordnete Datei an einem zentralen Ablageort, der nicht für das Benutzerprofil spezifisch ist (z.B. das Verzeichnis Windows). Temporäre Dateien, Speicherzuordnungsdateien und Dokumente sollten im entsprechenden Unterverzeichnis des Benutzerprofilverzeichnisses gespeichert werden. Mit SHGetFolderLocation oder SHGetFolderPath können Sie den geeigneten Speicherort für Dateien finden. Wenn Sie CSIDL_APPDATA an Ihre Anwendung übergeben, wird ein Dateisystemverzeichnis zurückgegeben, das als gemeinsames Repository für anwendungsspezifische Daten dient. CSIDL_LOCAL_APPDATA sollte für Daten verwendet werden, die bei einem Benutzerwechsel geändert werden, z.B. temporäre Dateien.

Da das Remotedesktopfeature hinzugefügt wurde, müssen Anwendungen keine größere Bandbreite als erforderlich verwenden. Anwendungen sollten möglichst wenig Bildschirmzeichnungen und Animationseffekte verwenden, wenn remote auf den Desktop zugegriffen wird. Benutzerdesktops können dynamisch zwischen Remote- und Konsolenbetrieb umgeschaltet werden. Anwendungen sollten für die Synchronisierung des Remote- mit dem lokalen Verbindungsstatus die oben beschriebene WM_WTSSESSION_CHANGE-Meldung verwenden.