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 AHANDLE dupHandle; //used by thread BDulplicateHandle(GetCurrentProcess(),hHandle, GetCurrentProcess(),&dupHandle, 0, FALSE, DUPLICATE_SAME_ACCESS);