Dela via


Kernel-objektnamnområden

Windows har flera namnrymder för följande namngivna kernelobjekt: händelser, semaphores, mutexes, väntetidstimers, filmappningsobjekt, jobbobjekt och symboliska länkobjekt. Det finns ett globalt namnområde som främst används av tjänster i klient-/serverprogram. Dessutom har varje session ett separat namnområde för dessa objekt.

Med de separata sessionsnamnrymderna kan flera klienter köra samma program utan att störa varandra. För processer som startas under en klientsession använder systemet klientsessionens namnområde som standard. Dessa processer kan dock använda det globala namnområdet genom att föregå prefixet "Global\" till objektnamnet. Följande kod anropar till exempel CreateEvent och skapar ett händelseobjekt med namnet CSAPP i det globala namnområdet:

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

Tjänstprogram använder det globala namnområdet som standard.

Not

Det globala namnområdet är inte tillgängligt för Windows Store-appar.

Sessionsnoll används endast för värdtjänster och det finns ingen konsolsession, till skillnad från versioner av Windows före Windows Vista.

Det globala namnområdet gör det möjligt för processer på flera klientsessioner att kommunicera med ett tjänstprogram. Till exempel kan ett klient-/serverprogram använda ett mutex-objekt för synkronisering. Servermodulen kan skapa mutex-objektet i det globala namnområdet. Sedan kan en klientsession använda prefixet "Global\" för att öppna mutex-objektet.

En annan användning av det globala namnområdet är för program som använder namngivna objekt för att identifiera att det redan finns en instans av programmet som körs i systemet under alla sessioner. Det här namngivna objektet måste skapas eller öppnas i det globala namnområdet i stället för namnområdet per session. Det vanligare fallet med att köra programmet en gång per session stöds som standard eftersom det namngivna objektet skapas i ett namnområde per session.

Förutom prefixet "Global\" kan klientprocesserna använda prefixet "Local\" för att explicit skapa ett objekt i sessionsnamnområdet. Dessa nyckelord är skiftlägeskänsliga.

Prefixet "Session\" är reserverat för systemanvändning och du bör inte använda det i namn på kernelobjekt.

Snabb användarväxling implementeras med hjälp av sessioner. Den första användaren som loggar in använder session ett, nästa användare som ska logga in använder session två och så vidare. Kernelobjektnamn måste följa riktlinjerna som beskrivs för Fjärrskrivbordstjänster så att program kan stödja flera användare.

Att skapa ett filmappningsobjekt eller symboliskt länkobjekt i det globala namnområdet, till exempel genom att använda CreateFileMapping, från en annan session än sessionsnoll är en privilegierad åtgärd. Därför måste ett program ha SeCreateGlobalPrivilege aktiverat för att kunna skapa ett filmappningsobjekt eller ett symboliskt länkobjekt i det globala namnområdet. Behörighetskontrollen är begränsad till att skapa dessa objekt och gäller inte för att öppna befintliga objekt. Om en tjänst eller ett system till exempel skapar ett filmappningsobjekt i det globala namnområdet kan alla processer som körs i en session komma åt det filmappningsobjektet förutsatt att processen har nödvändig åtkomst.