Sdílet prostřednictvím


Názvy objektů

Pojmenované objekty poskytují snadný způsob, jak procesy sdílet popisovače objektů. Po vytvoření pojmenované události, mutex, semaphore nebo objektu časovače mohou jiné procesy použít název k volání příslušné funkce (OpenEvent, OpenMutex, OpenSemaphorenebo OpenWaitableTimer) a otevřít popisovač objektu. V porovnání názvů se rozlišují malá a velká písmena.

Názvy událostí, semaphore, mutex, čekaný časovač, mapování souborů a objektů úloh sdílejí stejný obor názvů. Pokud se pokusíte vytvořit objekt pomocí názvu, který je používán objektem jiného typu, funkce selže a GetLastError vrátí ERROR_INVALID_HANDLE. Proto při vytváření pojmenovaných objektů použijte jedinečné názvy a nezapomeňte zkontrolovat, zda funkce vrací hodnoty pro chyby duplicitního názvu.

Pokud se pokusíte vytvořit objekt pomocí názvu používaného objektem stejného typu, funkce bude úspěšná, vrátí popisovač existujícímu objektu a GetLastError vrátí ERROR_ALREADY_EXISTS. Pokud například název zadaný ve volání CreateMutex funkce odpovídá názvu existujícího objektu mutex, vrátí funkce popisovač existujícího objektu. V tomto případě je volání CreateMutex ekvivalentní volání funkce OpenMutex. Použití více procesů CreateMutex pro stejný mutex je proto ekvivalentní tomu, že jeden proces, který volá CreateMutex zatímco ostatní procesy volají OpenMutex, s tím rozdílem, že eliminuje nutnost zajistit, aby se proces vytváření spustil jako první. Při použití této techniky pro objekty mutex by však žádný z volajících procesů neměl požadovat okamžité vlastnictví mutex. Pokud několik procesů vyžaduje okamžité vlastnictví, může být obtížné předpovědět, který proces skutečně získá počáteční vlastnictví.

Prostředí Terminálové služby má globální obor názvů pro události, semaphores, mutexy, čekací časovače, objekty mapování souborů a objekty úloh. Kromě toho má každá klientská relace Terminálové služby vlastní samostatný obor názvů pro tyto objekty. Klientské procesy terminálové služby můžou použít názvy objektů s předponou "Global\" nebo "Local\" k explicitnímu vytvoření objektu v globálním oboru názvů nebo oboru názvů relace. Další informace naleznete v tématu Obory názvů objektů jádra. Rychlé přepínání uživatelů se implementuje pomocí relací Terminálové služby (každý uživatel se přihlásí k jiné relaci). Názvy objektů jádra musí dodržovat pokyny uvedené pro Terminálové služby, aby aplikace mohly podporovat více uživatelů.

Synchronizační objekty lze vytvořit v privátním oboru názvů. Další informace naleznete v tématu Obory názvů objektů.

použití pojmenovaných objektů