Frequently, threads running in different processes need to share kernel objects. Here are some of the reasons why:
File-mapping objects allow you to share blocks of data between two processes running on a single machine.
Mailslots and named pipes allow applications to send blocks of data between processes running on different machines connected to the network.
Mutexes, semaphores, and events allow threads in different processes to synchronize their continued execution, as in the case of an application that needs to notify another application when it has completed some task.
There are three different mechanisms that allow processes to share kernel objects:
1. Using object handle inheritance.
Object handle inheritance can be used only when processes have a parent-child relationship.
2. Naming objects.
Named objects are commonly used to prevent multiple instances of an application from running.
3. Duplicating object handles.