Objektnamn
Namngivna objekt är ett enkelt sätt för processer att dela objekthandtag. När en process har skapat en namngiven händelse, mutex, semafor eller ett timerobjekt kan andra processer använda namnet för att anropa lämplig funktion ( OpenEvent, OpenMutex, OpenSemaphoreeller OpenWaitableTimer) för att öppna en referens till objektet. Namnjämförelse är skiftlägeskänsligt.
Namnen på händelse-, semafor-, mutex-, väntetidstimer-, filmappnings- och jobbobjekt delar samma namnrymd. Om du försöker skapa ett objekt med ett namn som används av ett objekt av en annan typ misslyckas funktionen och GetLastError- returnerar ERROR_INVALID_HANDLE. När du skapar namngivna objekt bör du därför använda unika namn och kontrollera funktionens returvärden för duplicerade namnfel.
Om du försöker skapa ett objekt med ett namn som används av ett objekt av samma typ lyckas funktionen, returnerar ett handtag till det befintliga objektet och GetLastError- returnerar ERROR_ALREADY_EXISTS. Om namnet som anges i ett anrop till funktionen CreateMutex matchar namnet på ett befintligt mutex-objekt returnerar funktionen ett handtag till det befintliga objektet. I det här fallet motsvarar anropet till CreateMutex ett anrop till funktionen OpenMutex. Att ha flera processer som använder CreateMutex för samma mutex motsvarar därför att ha en process som anropar CreateMutex medan de andra processerna anropar OpenMutex, förutom att det eliminerar behovet av att säkerställa att skapandeprocessen startas först. När du använder den här tekniken för mutex-objekt bör dock ingen av de anropande processerna begära omedelbart ägarskap för mutex. Om flera processer begär omedelbart ägarskap kan det vara svårt att förutsäga vilken process som faktiskt får det ursprungliga ägarskapet.
En Terminal Services-miljö har ett globalt namnområde för händelser, semaphores, mutexes, väntetidstimers, filmappningsobjekt och jobbobjekt. Dessutom har varje Terminal Services-klientsession ett eget separat namnområde för dessa objekt. Terminal Services-klientprocesser kan använda objektnamn med prefixet "Global\" eller "Local\" för att explicit skapa ett objekt i det globala namnområdet eller sessionsnamnområdet. Mer information finns i Kernel Object Namespaces. Snabb användarväxling implementeras med hjälp av Terminal Services-sessioner (varje användare loggar in i en annan session). Kernelobjektnamn måste följa riktlinjerna som beskrivs för Terminal Services så att program kan stödja flera användare.
Synkroniseringsobjekt kan skapas i ett privat namnområde. Mer information finns i objektnamnområden.
Relaterade ämnen