are intentionally opaque representations that provide encapsulation and abstraction from internal Win32 resources. This way, the Win32 APIs could potentially change the underlying type behind a HANDLE, without it impacting user code in any way (at least that's
handles in these example are really just a new, presumably friendlier, name for void
*, which is exactly what a HANDLE is
in the Win32 API (look it up at
MSDN). It provides an opaque wall between the user code and the Win32 library's internal representations that increases
portability, between versions of Windows, of code that uses the Win32 API.