RegSetValueExW was including the comparison in the size param and therefore not writing the wallpaper path to the registry.  The wallpaper now stays after a reboot.
Modified: trunk/reactos/lib/user32/misc/desktop.c

Modified: trunk/reactos/lib/user32/misc/desktop.c
--- trunk/reactos/lib/user32/misc/desktop.c	2005-11-23 00:09:17 UTC (rev 19472)
+++ trunk/reactos/lib/user32/misc/desktop.c	2005-11-23 00:15:45 UTC (rev 19473)
@@ -293,8 +293,8 @@
                          L"Control Panel\\Desktop",
                          0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
         {
-          Ret = RegSetValueExW(hKey, L"Wallpaper", 0, REG_SZ, (lpWallpaper != NULL ? (LPBYTE)lpWallpaper : (LPBYTE)L""),
-                               (lpWallpaper != NULL ? (lstrlenW(lpWallpaper) + 1) * sizeof(WCHAR) : sizeof(WCHAR)) == ERROR_SUCCESS);
+          Ret = (RegSetValueExW(hKey, L"Wallpaper", 0, REG_SZ, (lpWallpaper != NULL ? (LPBYTE)lpWallpaper : (LPBYTE)L""),
+                               (lpWallpaper != NULL ? (lstrlenW(lpWallpaper) + 1) * sizeof(WCHAR) : sizeof(WCHAR))) == ERROR_SUCCESS);
           RegCloseKey(hKey);
         }
       }