143 lines
2.6 KiB
C
143 lines
2.6 KiB
C
|
/*++
|
||
|
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|