Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Konta użytkowników systemu Windows XP umożliwiają jednoczesne logowanie wielu użytkowników, z których każdy ma swoje ustawienia i uruchamia swoje aplikacje. Ponieważ jeden użytkownik nie musi wylogować się, aby zezwolić na dostęp do innego użytkownika, pulpit każdego użytkownika jest łatwo dostępny przy użyciu funkcji szybkiego przełączania użytkowników. Konta użytkowników obejmują również funkcję osobistego serwera terminali lub pulpitu zdalnego, która umożliwia użytkownikom dostęp do konta pulpitu z systemów zdalnych.
Omówiono następujące tematy.
- wymagania dotyczące użycia infrastruktury
- zgodność z istniejącymi aplikacjami
- rejestracja do otrzymywania powiadomień o przełączaniu sesji
- Upewnienie się, że działa tylko jedno wystąpienie Twojej aplikacji
- Zamykanie Twojej aplikacji we wszystkich sesjach
- interakcja z usługami systemowymi
- Pulpit zdalny i przepustowość
Wymagania dotyczące użycia infrastruktury
Podstawowa infrastruktura dziedziczona z systemu Windows 2000 obsługuje separację stanu danych użytkownika, ustawień użytkownika i ustawień komputera. Korzystając z tej infrastruktury, następujące elementy są wymagane do pomyślnego uruchomienia aplikacji w systemie Windows XP.
- Domyślnie używaj folderu Moje dokumenty do przechowywania danych utworzonych przez użytkownika.
- Poprawnie klasyfikuj i przechowuj dane aplikacji.
- Płynnie radź sobie z komunikatami "Odmowa dostępu".
Pliki tymczasowe, pliki mapowane w pamięci i dokumenty powinny być przechowywane w odpowiednim podkatalogu katalogu profilu użytkownika. Użyj SHGetFolderLocation lub SHGetFolderPath, aby określić odpowiednią lokalizację przechowywania tych plików. Przekazanie flagi CSIDL_APPDATA do tych funkcji zwraca ścieżkę katalogu systemu plików, który służy jako wspólne repozytorium dla danych specyficznych dla aplikacji. Użyj flagi CSIDL_LOCAL_APPDATA zamiast CSIDL_APPDATA dla danych, które powinny ulec zmianie, gdy użytkownik ulegnie zmianie, na przykład plików tymczasowych.
Wymagania wymienione powyżej są podzbiorem tych w programie certyfikacji firmy Microsoft. Aby uzyskać więcej informacji, zobacz stronę Certification requirements for Windows Desktop Apps (Wymagania dotyczące certyfikacji aplikacji klasycznych systemu Windows).
Zgodność z istniejącymi aplikacjami
Zarówno szybkie przełączanie użytkowników, jak i osobisty serwer terminalowy korzystają z technologii usług terminalowych i dlatego są zgodne z większością wcześniejszych aplikacji Platformy Microsoft Win32. Jeśli aplikacja posiada certyfikat zgodności Windows 2000 Logo i implementuje podstawowe funkcje separacji profilów oraz zarządzania energią, powinna działać prawidłowo na poszczególnych kontach użytkowników systemu Windows XP.
Rejestrowanie w celu powiadomienia o przełączaniu sesji
Zazwyczaj aplikacja nie musi być powiadamiana, gdy następuje przełączanie pulpitu. Jednak aplikacje, które muszą być powiadamiane, gdy konto, na którym są uruchomione, stanowi bieżący pulpit, takie jak aplikacje uzyskujące dostęp do portu szeregowego lub innych udostępnionych zasobów, mogą zarejestrować się, aby uzyskać powiadomienie o przełączeniu pulpitu. Aby zarejestrować się w celu uzyskania powiadomienia, użyj funkcji WTSRegisterSessionNotification.
Po wywołaniu tej funkcji okno z uchwytem hWnd jest rejestrowane w celu odbierania komunikatu WM_WTSSESSION_CHANGE za pośrednictwem funkcji WndProc. Identyfikator sesji jest wysyłany w parametrze lParam oraz kod wskazujący zdarzenie, które wygenerowało komunikat, jest wysyłane w wParam jako jeden z następujących flag.
- WTS_KONSOLA_POŁĄCZ
- WTS_CONSOLE_DISCONNECT
- WTS_REMOTE_CONNECT
- WTS_ODŁĄCZENIE_ZDALNE
- WTS_SESJA_WYLOGOWANIE
- WTS_SESSION_LOGON
Aplikacje mogą używać tego komunikatu do śledzenia ich stanu, a także do wydawania i uzyskiwania zasobów specyficznych dla konsoli. Pulpity użytkownika można dynamicznie przełączać między zdalnym i konsolowym sterowaniem. Aplikacje powinny używać komunikatu WM_WTSSESSION_CHANGE do synchronizacji ze stanem połączenia zdalnego lub lokalnego.
Jeśli twój proces nie wymaga już tych powiadomień lub się kończy, powinien wywołać metodę WTSUnRegisterSessionNotification, aby wyrejestrować swoje powiadomienia.
Ważny
Wartości hWnd przekazane do WTSRegisterSessionNotification są zliczane, więc musisz wykonać równą liczbę wywołań do WTSUnRegisterSessionNotification, aby zapewnić zwolnienie wszystkich przydzielonych zasobów.
Zapewnianie, że uruchomiona jest tylko jedna instancja aplikacji
Wiele aplikacji musi zadbać o to, aby miała uruchomioną tylko jedną instancję. Istnieje kilka sposobów, aby to zrobić w systemie Windows XP. Wśród nich znajdują się następujące elementy:
- Użyj FindWindow lub FindWindowEx, aby wyszukać znane okno, które zostanie otwarte przez aplikację. Jeśli to okno jest już otwarte, możesz użyć go jako wskazania, że aplikacja jest już uruchomiona.
- Utwórz obiekt mutex lub semaphore po otwarciu aplikacji i zamknij ten obiekt po zakończeniu działania aplikacji. Globalna przestrzeń nazw obiektów jest oddzielona dla każdego pulpitu, umożliwiając unikatową listę obiektów mutex i semaphore dla każdego z nich.
Zamykanie aplikacji we wszystkich sesjach
Aplikacja może być zmuszona do zamknięcia się we wszystkich sesjach. Na przykład aplikacja uruchomiona w co najmniej dwóch sesjach jednocześnie może pobrać nowy plik z sieci Web. Następnie może być konieczne zamknięcie samego siebie i ponowne uruchomienie przy użyciu zaktualizowanych bitów. Oczywiście należy to zrobić we wszystkich uruchomionych sesjach. Aplikacja powinna być zapisana tak, aby zamknęła się poprawnie po odebraniu powiadomienia.
Interakcja z usługami systemowymi
Z punktu widzenia programowego należy rozwiązać następujące przypadki.
Proces serwera odbiera bezpośrednie żądanie od procesu klienta.
W takim przypadku komunikat jest prawdopodobnie przesyłany przy użyciu lokalnego wywołania procedury (LPC) lub zdalnego wywołania procedury (RPC). Istnieją interfejsy API dla LPC lub RPC, które umożliwiają pobieranie tokenu klienta. Po uzyskaniu tokenu klienta serwer może go użyć w wywołaniu metody CreateProcessAsUser. Spowoduje to wyświetlenie procesu na właściwej stacji okien przy założeniu, że token użytkownika klienta ma tag sesji, który powinien.
Notatka
CreateProcessAsUser nie obsługuje dziedziczenia między sesjami w tej chwili.
Proces serwera odbiera powiadomienie i musi wyświetlić interfejs użytkownika, ale wyświetlacz nie musi znajdować się w kontekście bieżącego użytkownika.
W takim przypadku proces serwera może zduplikować swój podstawowy token procesu i zmienić identyfikator sesji, aby był zgodny z bieżącym identyfikatorem sesji. Bieżący identyfikator sesji można uzyskać przy użyciu funkcji WTSGetActiveConsoleSessionId.
Uwaga
Aby ustawić identyfikator sesji tokenu, potrzebujesz SE_TCB_PRIVILEGE. Będzie to dostępne tylko jako usługa uruchomiona w NT AUTHORITY\SYSTEM.
Zdalny pulpit i przepustowość
Dzięki dodaniu funkcji pulpitu zdalnego do systemu Windows XP aplikacje powinny starać się nie korzystać z większej przepustowości niż jest to konieczne, unikając rozbudowanych rysunków ekranu i efektów animacji, jeśli pulpit jest połączony zdalnie. Aby określić, czy bieżąca sesja jest zdalna, możesz wywołać GetSystemMetrics za pomocą SM_REMOTESESSION. Należy jednak pamiętać, że to wywołanie nie rozróżnia połączenia zdalnego i rozłączonego.