My understanding of using extern is;
1) It used as a declaration without being defined;
2) Any new declarion with definition of the same name will be treated as being the same as the extern declaration. For example.

In Module1.c
Code:
extern HANDLE hMutex;

dwWaitResult = WaitForSingleObject(hMutex, 20);
now, this is where the confusion lies...

in Module2.C

Code:
extern HANDLE hMutex;  // does this take the value from within Module1.c?

// so that I can then do the following...
ReleaseMutex(hMutex);
Regards