/*++ Copyright (c) 1997 Microsoft Corporation Module Name: savecfg.c Abstract: This source file implements code to save the Win9x environment to a settings file. It writes a copy of all screen saver settings on a per-user basis. Author: Jim Schmidt (jimschm) 11-Apr-1997 Revision History: --*/ #include "pch.h" BOOL SaveDatFileKeyAndVal ( IN LPCSTR Key, IN LPCSTR Val ) { // // This function is a wrapper to simplify writing to our settings file // return WritePrivateProfileString (g_User, Key, Val, g_SettingsFile); } BOOL CopyRegValueToDatFile ( IN HKEY RegKey, IN LPCSTR ValueName ) { LPCSTR DataPtr; DWORD rc; // // Obtain registry value data and copy it to our settings file // DataPtr = GetRegValueString (RegKey, ValueName); if (DataPtr) { return SaveDatFileKeyAndVal (ValueName, DataPtr); } // If not found or wrong data type, don't sweat it rc = GetLastError(); return rc == ERROR_FILE_NOT_FOUND || rc == ERROR_SUCCESS; } #define WIN9X_MAX_SECTION 32768 BOOL SaveControlIniSection ( IN LPCSTR ControlIniSection, IN LPCSTR ScreenSaverName ) { LPSTR Buffer; LPSTR p; CHAR NewKey[MAX_PATH]; BOOL b = TRUE; CHAR DataBuf[MAX_PATH]; // // This function copies an entire section in control.ini to our // settings file. It may not be necessary because control.ini will // still be around, but this guarantees if someone modifies // control.ini later, our migration will not break. // // // Allocate a generous buffer to hold all key names // Buffer = HeapAlloc (g_hHeap, 0, WIN9X_MAX_SECTION); if (!Buffer) { return FALSE; } // // Retrieve the key names // GetPrivateProfileString ( ControlIniSection, NULL, S_EMPTY, Buffer, WIN9X_MAX_SECTION, S_CONTROL_INI ); // // For each key name, copy it to our settings file // p = Buffer; while (*p) { if (CreateScreenSaverParamKey (ScreenSaverName, p, NewKey)) { GetPrivateProfileString ( ControlIniSection, p, S_EMPTY, DataBuf, MAX_PATH, S_CONTROL_INI ); if (!SaveDatFileKeyAndVal (NewKey, DataBuf)) { b = FALSE; break; } } p = _mbschr (p, 0); p++; } // // Cleanup // HeapFree (g_hHeap, 0, Buffer); return b; }