|
|
/*******************************************************************************
* * (C) COPYRIGHT MICROSOFT CORP., 1997 * * TITLE: MAKEINI.C * * VERSION: 2.0 * * AUTHOR: ReedB * * DATE: 1 Jan, 1997 * * DESCRIPTION: * Main code for the default power schemes ini file generator, MAKEINI.EXE. * Generates a registry specification file which can be read by REGINI.EXE. * *******************************************************************************/
#include "parse.h"
#define SRC_NAME "..\\DEFAULTS.CSV"
VOID GetPolicyInf(void) { return; }
/*******************************************************************************
* * WriteRegBinary * * DESCRIPTION: * Write binary data out to the registry specification file. * * PARAMETERS: * *******************************************************************************/
VOID WriteRegBinary(FILE *fIni, PVOID pv, UINT uiSize, char *pszIndent) { PDWORD pdw = pv; DWORD dw; PBYTE pb; UINT uiRow = 2; UINT uiNumDWords, uiNumBytes;
fprintf(fIni, "REG_BINARY 0x%08X ", uiSize);
uiNumDWords = uiSize / sizeof(DWORD); uiNumBytes = uiSize % sizeof(DWORD); while (uiNumDWords) { fprintf(fIni, "0x%08X ", *pdw++); uiNumDWords--; if (uiRow++ == 3) { uiRow = 0; fprintf(fIni, "\\\n%s", pszIndent); } }
if (uiNumBytes) { pb = (PBYTE)pdw; dw = (DWORD)*pb++;
if (uiNumBytes >= 2) { dw |= ((DWORD)*pb++ << 8); }
if (uiNumBytes == 3) { dw |= ((DWORD)*pb << 16); } } }
/*******************************************************************************
* * WriteRegSpec * * DESCRIPTION: * Write out the registry specification file in REGINI format. * * PARAMETERS: * *******************************************************************************/
BOOLEAN WriteRegSpec(FILE *fIni, char **pszName, char **pszDesc, UINT uiCount) { UINT i;
// PowerCfg sound events
fprintf(fIni, "USER:\\AppEvents\n"); fprintf(fIni, " EventLabels\n"); fprintf(fIni, " LowBatteryAlarm\n"); fprintf(fIni, " = Low Battery Alarm\n"); fprintf(fIni, " CriticalBatteryAlarm\n"); fprintf(fIni, " = Critical Battery Alarm\n\n"); fprintf(fIni, "USER:\\AppEvents\n"); fprintf(fIni, " Schemes\n"); fprintf(fIni, " Apps\n"); fprintf(fIni, " PowerCfg\n"); fprintf(fIni, " = Power Management\n"); fprintf(fIni, " LowBatteryAlarm\n"); fprintf(fIni, " .Current\n"); fprintf(fIni, " = ding.wav\n"); fprintf(fIni, " .Default\n"); fprintf(fIni, " =\n"); fprintf(fIni, " CriticalBatteryAlarm\n"); fprintf(fIni, " .Current\n"); fprintf(fIni, " = ding.wav\n"); fprintf(fIni, " .Default\n"); fprintf(fIni, " =\n\n");
// User misc.
fprintf(fIni, "USER:\\Control Panel\\PowerCfg\n"); fprintf(fIni, " CurrentPowerPolicy = 0\n");
// User global policies.
fprintf(fIni, " GlobalPowerPolicy\n"); fprintf(fIni, " Policies = "); WriteRegBinary(fIni, &g_gupp, sizeof(GLOBAL_USER_POWER_POLICY), " "); fprintf(fIni, "\n\n");
// User power schemes.
fprintf(fIni, " PowerPolicies\n"); for (i = 0; i < uiCount; i++) { fprintf(fIni, " %d\n", i); fprintf(fIni, " Name = %s\n", pszName[i]); fprintf(fIni, " Description = %s\n", pszDesc[i]); fprintf(fIni, " Policies = "); WriteRegBinary(fIni, g_pupp[i], sizeof(USER_POWER_POLICY), " "); fprintf(fIni, "\n\n"); }
// Machine misc.
fprintf(fIni, "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Controls Folder\\PowerCfg\n"); fprintf(fIni, " DiskSpinDownMax = 3600\n"); fprintf(fIni, " DiskSpinDownMin = 3\n");
fprintf(fIni, " LastID = %d\n", uiCount - 1);
fprintf(fIni, " GlobalPowerPolicy\n"); fprintf(fIni, " Policies = "); WriteRegBinary(fIni, &g_gmpp, sizeof(GLOBAL_MACHINE_POWER_POLICY), " "); fprintf(fIni, "\n\n"); fprintf(fIni, " PowerPolicies\n"); for (i = 0; i < uiCount; i++) { fprintf(fIni, " %d\n", i); fprintf(fIni, " Policies = "); WriteRegBinary(fIni, g_pmpp[i], sizeof(MACHINE_POWER_POLICY), " "); fprintf(fIni, "\n\n"); }
fprintf(fIni, "\n\n"); fprintf(fIni, " ProcessorPolicies\n"); for (i = 0; i < uiCount; i++) { fprintf(fIni, " %d\n", i); fprintf(fIni, " Policies = "); WriteRegBinary(fIni, g_ppmpp[i], sizeof(MACHINE_PROCESSOR_POWER_POLICY), " "); fprintf(fIni, "\n\n"); }
return TRUE; }
/*******************************************************************************
* * main * * DESCRIPTION: * * PARAMETERS: * *******************************************************************************/
void __cdecl main (int argc, char **argv) { DWORD dwSize; char *psz; FILE *fIni; UINT uiNameCount, uiDescCount; char *pszName[MAX_PROFILES]; char *pszDesc[MAX_PROFILES];
printf("Processing: %s\n", SRC_NAME);
printf("Building name and description arrays...\n"); ReadSource(); BuildLineArray();
if ((fIni = fopen(INI_NAME, "w+")) != NULL) { printf("Writing registry specification file: %s\n", INI_NAME); } else { DefFatalExit(TRUE, "Error opening registry specification file: %s for output\n", INI_NAME); }
printf(" Parsing names."); GetCheckLabelToken(NAME_LINE, "Name", 0); uiNameCount = GetTokens(NULL, REGSTR_MAX_VALUE_LENGTH, pszName, MAX_PROFILES, DELIMITERS); if (uiNameCount) { printf(" Parsed %d names successfully.\n", uiNameCount); printf(" Parsing descriptions."); GetCheckLabelToken(DESCRIPTION_LINE, "Description", 0); uiDescCount = GetTokens(NULL, MAX_DESC_LEN, pszDesc, MAX_PROFILES, DELIMITERS); if (uiDescCount == uiNameCount) { printf(" Parsed %d descriptions successfully.\n", uiDescCount); g_uiPoliciesCount[0] = uiNameCount;
// Get the power policies, schemes
GetPolicies();
// Get the global power policies
GetGlobalPolicies();
// Write the registry specification file.
WriteRegSpec(fIni, pszName, pszDesc, g_uiPoliciesCount[0]);
printf("Registry specification file: %s, written sucessfully \n", INI_NAME); fclose(fIni); printf("\n\nDefault Processing Success. Output file is valid.\n"); exit(0); } else { printf(" Name count: %d != description count: %d.\n", uiNameCount, uiDescCount); } } else { printf(" Name parsing failure.\n"); }
printf("ProcessAndWrite failed, Last Error: %d\n", GetLastError()); exit(1); }
|