Udostępnij za pośrednictwem


Nazwy obiektów

Obiekty nazwane umożliwiają łatwe udostępnianie dojść obiektów przez procesy. Po utworzeniu nazwanego zdarzenia, mutexu, semafora lub obiektu czasomierza inne procesy mogą używać nazwy do wywoływania odpowiedniej funkcji ( OpenEvent, OpenMutex, OpenSemaphorelub OpenWaitableTimer) w celu otwarcia uchwytu do obiektu. W przypadku porównania nazw jest rozróżniana wielkość liter.

Nazwy zdarzeń, semaforów, mutex, czasomierz oczekiwania, mapowanie plików i obiekty zadań współużytkują tę samą przestrzeń nazw. Jeśli spróbujesz utworzyć obiekt przy użyciu nazwy, która jest używana przez obiekt innego typu, funkcja zakończy się niepowodzeniem i GetLastError zwraca ERROR_INVALID_HANDLE. W związku z tym podczas tworzenia nazwanych obiektów należy użyć unikatowych nazw i sprawdzić wartości zwracane przez funkcję pod kątem błędów zduplikowanych nazw.

Jeśli spróbujesz utworzyć obiekt przy użyciu nazwy używanej przez obiekt tego samego typu, funkcja zakończy się pomyślnie, zwróci uchwyt do istniejącego obiektu, a GetLastError zwraca wartość ERROR_ALREADY_EXISTS. Jeśli na przykład nazwa określona w wywołaniu funkcji CreateMutex jest zgodna z nazwą istniejącego obiektu mutex, funkcja zwraca uchwyt do istniejącego obiektu. W takim przypadku wywołanie metody CreateMutex jest równoważne wywołaniu funkcji OpenMutex. Posiadanie wielu procesów używa CreateMutex dla tego samego mutexu jest zatem równoważne z jednym procesem, który wywołuje CreateMutex podczas gdy inne procesy wywołają OpenMutex, z tą różnicą, że eliminuje konieczność uprzedniego uruchomienia procesu tworzenia. Jednak w przypadku używania tej techniki dla obiektów mutex żaden z procesów wywołujących nie powinien żądać natychmiastowej własności mutexu. Jeśli wiele procesów żąda natychmiastowej własności, może być trudno przewidzieć, który proces rzeczywiście pobiera własność początkową.

Środowisko usług terminalowych ma globalną przestrzeń nazw dla zdarzeń, semaforów, mutexes, czasomierzy oczekiwania, obiektów mapowania plików i obiektów zadań. Ponadto każda sesja klienta usług terminalowych ma własną oddzielną przestrzeń nazw dla tych obiektów. Procesy klienckie usług terminalowych mogą używać nazw obiektów z prefiksem "Global\" lub "Local\", aby jawnie utworzyć obiekt w przestrzeni nazw globalnej lub sesji. Aby uzyskać więcej informacji, zobacz Przestrzenie nazw obiektów jądra. Szybkie przełączanie użytkowników jest implementowane przy użyciu sesji usług terminalowych (każdy użytkownik loguje się do innej sesji). Nazwy obiektów jądra muszą być zgodne z wytycznymi opisanymi dla usług terminalowych, aby aplikacje mogły obsługiwać wielu użytkowników.

Obiekty synchronizacji można utworzyć w prywatnej przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Przestrzenie nazw obiektów.

przy użyciu nazwanych obiektów