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)
The **FAR** construct dates back to the days of the *8086/8088 CPU* and the segmented memory modals that it used. In those day you could have **NEAR** and **FAR** pointers to memory.

The **LP** (long pointer) is just a hangover from the *Microsoft Hungarian Notation* from those earlier days.

These days the Win32 memory model is flat so **NEAR** and **FAR** pointers are basically the same. But while a *near pointer* is now the same as a *far poitner* that does not mean a pointer is the same as a handle.