Question: While browsing some code I found a call to [OpenPrinter()](http://msdn.microsoft.com/en-us/library/dd162751.aspx). The code compiles and works fine. But, we are passing a `HANDLE` instead of `LPHANDLE` (as specified in MSDN). I found out that in `windef.h` the following declaration exists:

```
typedef HANDLE FAR          *LPHANDLE;

```

What does LP stand for? Should I use a `LPHANDLE`, or keep `HANDLE`?

Answer: 
"LP" stands for Long Pointer.

HANDLE != LPHANDLE, just as DWORD != DWORD\* (or LPDWORD)
And just to give you a little background long pointers also called far pointers were different than normal 16 bit pointers in 16 bit windows. The OS used a segmented memory model where you would offset from a segment or have a segment + offset which was a long pointer. The hungarian notation LP was used for these long pointers and is still littered throughout the windows api for these legacy reasons. 

Of course in the 32 bit and 64 bit windows OSs a flat memory model is used and there is no distinction to be made between pointers in these OSs (though PAE adds something conceptually similar).