A RegSetValueEx y RegCloseKey les tenes que pasar el HANDLE y no un puntero al mismo. El ultimo parametro de RegSetValueEx es "The size of the information pointed to by the lpData parameter, in bytes." y le estas pasando 1, pasale el tamaño de un DWORD (4 bytes). El anterior es el buffer, donde tenes que poner el DWORD que queres escribir ... no tiene que ser un valor indefinido.
Otra cosa, RegOpenKeyEx:
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
ERROR_SUCCESS es 0 asi que estas haciendo la comparacion mal.
PD. Son claves del registro no carpetas.