This document explains the distinction between local and global handles.
This is the issue of Kernel side object visibility.
Handles are said to be local or global.
A handle is local, if the Kernel object which that handle represents is only visible to the thread that created it; no other thread can open a handle to the same Kernel object.
Typically, code constructs the appropriate RHandleBase
derived
object, e.g. an RMutex
, and calls its Create()
, CreateLocal()
or
equivalent function to create the corresponding Kernel object.
A handle is global, if the Kernel object which that handle represents is visible to all threads across all processes; any thread in any process can open a handle to that same Kernel object. Typically, such a Kernel object is intended for sharing.
For a global handle. the corresponding Kernel object is assigned a name.
The name gives that Kernel object an identity and is the key property which
allows other threads to open a handle onto that same object. It is usual to
use a TFindHandleBase
derived class to locate a global
Kernel object. The following diagram shows the general idea.
See also:
Names and fullnames in reference counting objects.