Whenever a handle is passed to another thread, use the DuplicateHandle API
to create a duplicate handle to the same object and pass this duplicated
handle to the thread. That way, Thread A can use the original handle and Thread
B can use the duplicated handle without worrying about each other.
The following code will create a duplicate handle dupHandle for hHandle. When both handles are closed, the object is destroyed.
HANDLE hHandle = CreateFile(...); //used by Thread A
HANDLE dupHandle; //used by thread B
DulplicateHandle(GetCurrentProcess(),hHandle, GetCurrentProcess(),
&dupHandle, 0, FALSE, DUPLICATE_SAME_ACCESS);