1. Le stringhe literal wide nel codice vanno specificate premettendo una L alle virgolette. Per cui, sarà:
2. Nonostante sia la versione Unicode di RegSetValueEx, il quinto parametro resta un BYTE* (dato che la RegSetValueEx viene usata per memorizzare dati di ogni tipo, non solo stringhe). Per questo motivo, devi fare un cast del buffer a BYTE*.codice:WCHAR RegValue[] = L"ossecurity";
3. Le dimensioni da specificare nell'ultimo parametro non sono quelle dell'intero buffer (che non è detto sia pieno), ma solo quelle dei dati validi, compreso il terminatore NUL, specificate in byte. Per questo motivo, passaci (wcslen(ProgramPath) +1)*sizeof(WCHAR).