A MS define INVALID_HANDLE_VALUE
o seguinte (Windows SDK, handleapi.h):
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
Por que eles fazem isso com uma conversão dupla - primeiro para LONG_PTR
(alias __int64
alias long long
em 64 bits ou long
em 32 bits) e segundo HANDLE
(alias void*
), por que não apenas:
#define INVALID_HANDLE_VALUE ((HANDLE)-1)
Eu assumo um significado, mas não o vejo.