El código del define es este #define obj2bin(obj) execobj2bin(&#obj, sizeof(#obj)) Lo que pasa es que, por alguna razón, la etiqueta code suma caracteres de más.
Lo principal es conocer muy bien C para saber toda su sintaxis. Después creas un programa normal y trabajas a partir de él transformando las senten ias simples en un grupo equivalente que hagan lo mismo. Este último punto lo repites hasta que quedes satisfe o mientras sigas sin liarte.
Las primera comprobación es larga porqué debe preveer todas las distintas formas en que las APIs definen código para Windows y que no formen parte de Cygwin que recrea un entorno Linux dentro de windows.
El WIN32_WINNT es un símbolo para que las APIs activen, en durante la compilación condicional, ciertas funciones y tipos de datos.
Sobre la ruta que marcas sí, es una ruta *nix y no, no funciona con windows (pero sí bajo cygwin)
Lo último es la compilación condicional que compilará una cosa si está definido el símbolo win32 o el otro si no lo está (por ser otro S.O.)