Condividi tramite


Nomi di oggetti

Gli oggetti denominati consentono ai processi di condividere gli handle di oggetti in modo semplice. Dopo che un processo ha creato un evento denominato, mutex, semaforo o oggetto timer, altri processi possono usare il nome per chiamare la funzione appropriata ( OpenEvent, OpenMutex, OpenSemaphore o OpenWaitableTimer) per aprire un handle all'oggetto. Il confronto tra nomi fa distinzione tra maiuscole e minuscole.

I nomi degli oggetti evento, semaforo, mutex, timer waitable, mapping di file e processi condividono lo stesso spazio dei nomi. Se si tenta di creare un oggetto usando un nome in uso da un oggetto di un altro tipo, la funzione ha esito negativo e GetLastError restituisce ERROR_INVALID_HANDLE. Pertanto, quando si creano oggetti denominati, usare nomi univoci e assicurarsi di controllare i valori restituiti dalla funzione per gli errori di nome duplicato.

Se si tenta di creare un oggetto usando un nome in uso da un oggetto dello stesso tipo, la funzione ha esito positivo, restituendo un handle all'oggetto esistente e GetLastError restituisce ERROR_ALREADY_EXISTS. Ad esempio, se il nome specificato in una chiamata alla funzione CreateMutex corrisponde al nome di un oggetto mutex esistente, la funzione restituisce un handle all'oggetto esistente. In questo caso, la chiamata a CreateMutex equivale a una chiamata alla funzione OpenMutex . La presenza di più processi usa CreateMutex per lo stesso mutex equivale quindi ad avere un processo che chiama CreateMutex mentre gli altri processi chiamano OpenMutex, ad eccezione del fatto che elimina la necessità di assicurarsi che il processo di creazione venga avviato per primo. Quando si usa questa tecnica per gli oggetti mutex, tuttavia, nessuno dei processi chiamante deve richiedere la proprietà immediata del mutex. Se più processi richiedono la proprietà immediata, può essere difficile prevedere quale processo ottiene effettivamente la proprietà iniziale.

Un ambiente di Servizi terminal ha uno spazio dei nomi globale per eventi, semafori, mutex, timer waitable, oggetti di mapping dei file e oggetti processo. Inoltre, ogni sessione client di Servizi terminal ha uno spazio dei nomi separato per questi oggetti. I processi client di Servizi terminal possono usare nomi di oggetto con un prefisso "Global\" o "Local\" per creare in modo esplicito un oggetto nello spazio dei nomi globale o sessione. Per altre informazioni, vedere Spazi dei nomi degli oggetti kernel. Il passaggio rapido degli utenti viene implementato usando le sessioni di Servizi terminal (ogni utente accede a una sessione diversa). I nomi degli oggetti kernel devono seguire le linee guida descritte per Servizi terminal in modo che le applicazioni possano supportare più utenti.

Gli oggetti di sincronizzazione possono essere creati in uno spazio dei nomi privato. Per altre informazioni, vedere Spazi dei nomi degli oggetti.

Utilizzo di oggetti denominati