Named Objects

Named objects provide an easy way for processes to share object handles. The name specified by the creating process is limited to RTX64_MAX_PATH characters, and can include any character except the backslash path-separator character (\). Once a process has created a named event, mutex, semaphore, or shared memory object, other processes can use the name to call the appropriate function (RtOpenEvent, RtOpenMutex, RtOpenSemaphore, or RtOpenSharedMemory) to open a handle to the object. Name comparison is case-sensitive.

The names of event, mutex, semaphore, and shared-memory objects share the same RTSS name space. If you specify a name that is in use by an object of another type when creating an object, the function succeeds, but GetLastError returns ERROR_ALREADY_EXISTS. Therefore, when creating named objects, use unique names and be sure to check function return values for duplicate-name errors.

For example, if the name specified in a call to RtCreateMutex matches the name of an existing mutex object, the function returns a handle of the existing object. In this case, the call to RtCreateMutex is equivalent to a call to RtOpenMutex. Having multiple processes use RtCreateMutex for the same mutex is therefore equivalent to having one process that calls RtCreateMutex while the other processes call RtOpenMutex, except that it eliminates the need to ensure that the creating process is started first. When using this technique for mutex objects, however, none of the calling processes should request immediate ownership of the mutex. If multiple processes do request immediate ownership, it can be difficult to predict which process actually gets the initial ownership.

Types of Named Objects

Named Objects include: