Delen via


Naamruimten van kernelobjecten

Windows heeft meerdere naamruimten voor de volgende benoemde kernelobjecten: gebeurtenissen, semaphores, mutexes, wachttijden, bestandstoewijzingsobjecten, taakobjecten en symbolische koppelingsobjecten. Er is een globale naamruimte die voornamelijk wordt gebruikt door services in client-/servertoepassingen. Daarnaast heeft elke sessie een afzonderlijke naamruimte voor deze objecten.

Met de afzonderlijke sessienaamruimten kunnen meerdere clients dezelfde toepassingen uitvoeren zonder elkaar te verstoren. Voor processen die zijn gestart onder een clientsessie, gebruikt het systeem standaard de naamruimte van de clientsessie. Deze processen kunnen echter de globale naamruimte gebruiken door het voorvoegsel Global\toe te passen op de objectnaam. De volgende code roept bijvoorbeeld CreateEvent- aan en maakt een gebeurtenisobject met de naam CSAPP in de globale naamruimte:

CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );

Servicetoepassingen gebruiken standaard de globale naamruimte.

Notitie

De globale naamruimte is niet beschikbaar voor Windows Store-apps.

Sessie nul wordt alleen gebruikt voor het hosten van services en er is geen consolesessie, in tegenstelling tot versies van Windows vóór Windows Vista.

Met de globale naamruimte kunnen processen op meerdere clientsessies communiceren met een servicetoepassing. Een client-/servertoepassing kan bijvoorbeeld een mutex-object gebruiken voor synchronisatie. De servermodule kan het mutex-object maken in de globale naamruimte. Vervolgens kan een clientsessie het voorvoegsel Global\gebruiken om het mutex-object te openen.

Een ander gebruik van de globale naamruimte is voor toepassingen die benoemde objecten gebruiken om te detecteren dat er al een exemplaar is van de toepassing die in het systeem wordt uitgevoerd in alle sessies. Dit benoemde object moet worden gemaakt of geopend in de globale naamruimte in plaats van de naamruimte per sessie. Het meest voorkomende geval van het uitvoeren van de toepassing eenmaal per sessie wordt standaard ondersteund omdat het benoemde object wordt gemaakt in een naamruimte per sessie.

Naast het voorvoegsel 'Global\' kunnen clientprocessen het voorvoegsel 'Local\' gebruiken om expliciet een object te maken in hun sessienaamruimte. Deze trefwoorden zijn hoofdlettergevoelig.

Het voorvoegsel 'Sessie\' is gereserveerd voor systeemgebruik en u mag het niet gebruiken in namen van kernelobjecten.

Snel schakelen tussen gebruikers wordt geïmplementeerd met behulp van sessies. De eerste gebruiker die zich aanmeldt, maakt gebruik van sessie één, de volgende gebruiker die zich aanmeldt, maakt gebruik van sessie twee, enzovoort. Namen van kernelobjecten moeten voldoen aan de richtlijnen voor Extern bureaublad-services, zodat toepassingen meerdere gebruikers kunnen ondersteunen.

Het maken van een object voor bestandstoewijzing of symbolische koppelingsobject in de globale naamruimte, zoals met behulp van CreateFileMapping, is een bevoegde bewerking vanaf een andere sessie dan sessie nul. Daarom moet een toepassing SeCreateGlobalPrivilege ingeschakeld om een bestandstoewijzingsobject of symbolisch koppelingsobject te maken in de globale naamruimte. De bevoegdheidscontrole is beperkt tot het maken van deze objecten en is niet van toepassing op het openen van bestaande objecten. Als een service of het systeem bijvoorbeeld een bestandstoewijzingsobject maakt in de globale naamruimte, heeft elk proces dat in elke sessie wordt uitgevoerd, toegang tot dat object voor bestandstoewijzing, mits het proces de benodigde toegang heeft.