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.
Because kernel object handles are process-relative, performing these tasks is difficult. However, Microsoft had several good reasons ...