Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met Windows XP-gebruikersaccounts kunnen meerdere gebruikers tegelijk worden aangemeld, elk met zijn of haar eigen instellingen en elk met zijn of haar eigen toepassingen. Omdat één gebruiker zich niet hoeft af te melden om toegang tot een andere gebruiker toe te staan, is het bureaublad van elke gebruiker eenvoudig toegankelijk via de functie snel schakelen tussen gebruikers. Gebruikersaccounts bevatten ook de functie Personal Terminal Server, of Remote Desktop, waarmee gebruikers toegang kunnen krijgen tot hun bureaubladaccount vanaf externe systemen.
De volgende onderwerpen worden besproken.
- vereisten voor infrastructuurgebruik
- compatibiliteit met bestaande toepassingen
- Registreren voor sessiewisselingsmeldingen
- ervoor zorgen dat slechts één exemplaar van uw toepassing wordt uitgevoerd
- Uw toepassing afsluiten in alle sessies
- Interactie met System Services-
- Extern Bureaublad en Bandbreedte
Vereisten voor infrastructuurgebruik
De onderliggende infrastructuur die is overgenomen van Windows 2000 ondersteunt statusscheiding van gebruikersgegevens, gebruikersinstellingen en computerinstellingen. Als u gebruikmaakt van deze infrastructuur, zijn de volgende vereisten vereist om uw toepassing uit te voeren onder Windows XP.
- Standaard ingesteld op de map Mijn documenten voor de opslag van door de gebruiker gemaakte gegevens.
- Toepassingsgegevens correct classificeren en opslaan.
- Degradeer probleemloos bij berichten met 'Toegang geweigerd'.
Tijdelijke bestanden, geheugengekoppelde bestanden en documenten moeten allemaal worden opgeslagen in de juiste submap binnen de profielmap van de gebruiker. Gebruik SHGetFolderLocation of SHGetFolderPath om de juiste opslaglocatie voor deze bestanden te bepalen. Als u de vlag CSIDL_APPDATA doorgeeft aan deze functies, wordt het pad van een bestandssysteemmap geretourneerd die fungeert als een algemene opslagplaats voor toepassingsspecifieke gegevens. Gebruik de vlag CSIDL_LOCAL_APPDATA in plaats van CSIDL_APPDATA voor gegevens die moeten worden gewijzigd wanneer de gebruiker verandert, zoals tijdelijke bestanden.
De bovenstaande vereisten zijn een subset van de vereisten in het Microsoft Certification-programma. Zie de pagina certificeringsvereisten voor Windows-bureaublad-apps voor meer informatie.
Compatibiliteit met bestaande toepassingen
Zowel snelle gebruikerswisseling als Personal Terminal Server maken gebruik van Terminal Services-technologie en zijn daarom compatibel met de meeste eerdere Microsoft Win32-toepassingen. Als een toepassing compatibel is met het Windows 2000-logo en de implementatie van basisfuncties voor profielscheiding en energiebeheer, moet die toepassing correct worden uitgevoerd onder afzonderlijke Windows XP-gebruikersaccounts.
Registreren voor melding over sessiewisseling
Normaal gesproken hoeft een toepassing geen melding te ontvangen wanneer er een desktopswitch plaatsvindt. Toepassingen die moeten worden gewaarschuwd wanneer het account waarop ze draaien het huidige bureaublad wordt, zoals toepassingen die toegang hebben tot de seriële poort of andere gedeelde bronnen, kunnen zich registreren om een melding te ontvangen bij een desktopwissel. Als u zich wilt registreren voor een melding, gebruikt u de functie WTSRegisterSessionNotification.
Zodra deze functie is aangeroepen, wordt het venster met ingang hWnd geregistreerd om een WM_WTSSESSION_CHANGE bericht te ontvangen via de WndProc- functie. De sessie-id wordt verzonden in de parameter lParam en een code die aangeeft welke gebeurtenis het bericht heeft gegenereerd, wordt verzonden in wParam- als een van de volgende vlaggen.
- WTS_CONSOLE_CONNECT
- WTS_CONSOLE_DISCONNECT
- WTS_REMOTE_CONNECT
- WTS_REMOTE_DISCONNECT
- WTS_SESSIE_AFMELDEN
- WTS_SESSION_LOGON
Toepassingen kunnen dit bericht gebruiken om hun status bij te houden en om consolespecifieke resources vrij te geven en te verkrijgen. Gebruikersdesktops kunnen dynamisch worden geschakeld tussen externe en consolebesturing. Toepassingen moeten het WM_WTSSESSION_CHANGE bericht gebruiken om te synchroniseren met de status van de externe of lokale verbinding.
Wanneer uw proces deze meldingen niet meer nodig heeft of wordt beëindigd, moet deze WTSUnRegisterSessionNotification aanroepen om de registratie van de melding ongedaan te maken.
Belangrijk
De hWnd waarden die zijn doorgegeven aan WTSRegisterSessionNotification worden meegeteld. Daarom moet u een gelijk aantal aanroepen uitvoeren naar WTSUnRegisterSessionNotification om ervoor te zorgen dat alle toegewezen resources worden uitgebracht.
Ervoor zorgen dat slechts één exemplaar van uw toepassing wordt uitgevoerd
Veel toepassingen moeten ervoor zorgen dat er slechts één exemplaar wordt uitgevoerd. Er zijn verschillende manieren om dit te doen in Windows XP. Onder hen zijn het volgende:
- Gebruik FindWindow of FindWindowEx om te zoeken naar een bekend venster dat uw toepassing opent. Als dat venster al is geopend, kunt u dit gebruiken als indicatie dat de toepassing al wordt uitgevoerd.
- Maak een mutex- of semaphore-object wanneer uw toepassing wordt geopend en sluit dat object wanneer de toepassing wordt beëindigd. De globale objectnaamruimte wordt voor elk bureaublad gescheiden, waardoor er voor elk bureaublad een unieke lijst met mutex- enemaforeobjecten wordt toegestaan.
Uw toepassing afsluiten voor alle sessies
Een toepassing moet zichzelf mogelijk afsluiten voor alle sessies. Een toepassing die in twee of meer sessies tegelijk wordt uitgevoerd, kan bijvoorbeeld een nieuw bestand downloaden van het web. Vervolgens moet deze mogelijk zichzelf sluiten en opnieuw opstarten met de bijgewerkte bits. Uiteraard moet dit gedaan worden in alle actieve sessies. Uw toepassing moet zo worden geschreven dat deze volledig wordt afgesloten wanneer er een melding wordt ontvangen.
Interactie met Systeemservices
Vanuit programmatisch oogpunt moeten de volgende gevallen worden aangepakt.
Het serverproces ontvangt een directe aanvraag van een clientproces.
In dit geval wordt het bericht waarschijnlijk verzonden met behulp van een lokale procedure-aanroep (LPC) of een externe procedure-aanroep (RPC). Er zijn API's voor LPC of RPC die het ophalen van het clienttoken mogelijk maken. Zodra het clienttoken is verkregen, kan de server dit gebruiken in een aanroep naar CreateProcessAsUser. Hiermee wordt het proces weergegeven op het juiste vensterstation, ervan uitgaande dat het token van de clientgebruiker een sessietag heeft, wat het zou moeten hebben.
Notitie
CreateProcessAsUser ondersteunt momenteel geen overerving van handles tussen sessies.
Het serverproces ontvangt een melding en moet de gebruikersinterface weergeven, maar de weergave hoeft zich niet in de context van de huidige gebruiker te bevinden.
In dit geval kan het serverproces het primaire procestoken dupliceren en de betreffende sessie-id wijzigen zodat deze overeenkomt met de huidige sessie-id. De huidige sessie-id kan worden verkregen met behulp van de WTSGetActiveConsoleSessionId functie.
Notitie
Als u de sessie-id van het token wilt instellen, hebt u de SE_TCB_PRIVILEGEnodig. U hebt dit alleen als een service die wordt uitgevoerd in NT AUTHORITY\SYSTEM.
Extern bureaublad en bandbreedte
Met de toevoeging van de functie Extern bureaublad aan Windows XP moeten toepassingen moeite doen om niet meer bandbreedte te gebruiken dan nodig is, waardoor uitgebreide schermtekeningen en animatie-effecten worden vermeden als het bureaublad extern is verbonden. Als u wilt bepalen of de huidige sessie extern is, kunt u GetSystemMetrics- aanroepen met SM_REMOTESESSION. Houd er echter rekening mee dat deze oproep geen onderscheid maakt tussen op afstand en verbroken.