|
|
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
lodctr.c
Abstract:
Program to read the contents of the file specified in the command line and update the registry accordingly
Author:
Bob Watson (a-robw) 10 Feb 93
Revision History:
a-robw 25-Feb-93 revised calls to make it compile as a UNICODE or an ANSI app.
a-robw 10-Nov-95 revised to use DLL functions for all the dirty work
// command line arguments supported:
/C:<filename> upgrade counter text strings using <filename> /H:<filename> upgrade help text strings using <filename> /L:<LangID> /C and /H params are for language <LangID>
/S:<filename> save current perf registry strings & info to <filname> /R:<filename> restore perf registry strings & info using <filname>
/T:<service> set <service> to be Trusted using current DLL
--*/ #define UNICODE 1
#define _UNICODE 1
//
// Windows Include files
//
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#include <loadperf.h>
#include "..\common\common.h"
static CHAR szFileNameBuffer[MAX_PATH*2];
static LPCSTR GetTrustedServiceName ( LPCSTR szArg1 ) { LPSTR szReturn = NULL;
if ((szArg1[0] == '-') || (szArg1[0] == '/')) { //it's a switch command
if ((szArg1[1] == 't') || (szArg1[1] == 'T')) { // the command is to Save the configuration to a file
if (szArg1[2] == ':') { // then the rest of the string is the name of the trusted service
szReturn = (LPSTR)&szArg1[3]; } } } return (LPCSTR)szReturn; } static BOOL GetUpgradeFileNames ( LPCSTR *szArgs, LPSTR *szCounterFile, LPSTR *szHelpFile, LPSTR *szLangId ) { DWORD dwArgIdx = 1; DWORD dwMask = 0;
do { // check first arg, function assumes there are 2 args or more
if ((szArgs[dwArgIdx][0] == '-') || (szArgs[dwArgIdx][0] == '/')) { //it's a switch command
if ((szArgs[dwArgIdx][1] == 'c') || (szArgs[dwArgIdx ][1] == 'C')) { // the command is to load a service
if (szArgs[dwArgIdx ][2] == ':') { // then the rest of the string is the service name
*szCounterFile = (LPSTR)&szArgs[dwArgIdx ][3]; dwMask |= 1; } } else if ((szArgs[dwArgIdx][1] == 'h') || (szArgs[dwArgIdx ][1] == 'H')) { // the command is to load a service
if (szArgs[dwArgIdx][2] == ':') { // then the rest of the string is the service name
*szHelpFile = (LPSTR)&szArgs[dwArgIdx ][3]; dwMask |= 2; } } else if ((szArgs[dwArgIdx][1] == 'l') || (szArgs[dwArgIdx ][1] == 'L')) { // the command is to load a service
if (szArgs[dwArgIdx][2] == ':') { // then the rest of the string is the service name
*szLangId = (LPSTR)&szArgs[dwArgIdx ][3]; dwMask |= 4; } } } dwArgIdx++; } while (dwArgIdx <= 3);
if (dwMask == 7) { // all names found
return TRUE; } else { return FALSE; } }
static LPCSTR GetSaveFileName ( LPCSTR szArg1 ) { LPSTR szReturn = NULL; DWORD dwSize;
if ((szArg1[0] == '-') || (szArg1[0] == '/')) { //it's a switch command
if ((szArg1[1] == 's') || (szArg1[1] == 'S')) { // the command is to Save the configuration to a file
if (szArg1[2] == ':') { // then the rest of the string is the input file name
dwSize = SearchPathA (NULL, (LPSTR)&szArg1[3], NULL, sizeof(szFileNameBuffer)/sizeof(szFileNameBuffer[0]), szFileNameBuffer, NULL); if (dwSize == 0) { //unable to find file in path so use it as is
szReturn = (LPSTR)&szArg1[3]; } else { // else return the expanded file name
szReturn = szFileNameBuffer; } } } } return (LPCSTR)szReturn; } static LPCSTR GetRestoreFileName ( LPCSTR szArg1 ) { LPSTR szReturn = NULL; DWORD dwSize;
if ((szArg1[0] == '-') || (szArg1[0] == '/')) { //it's a switch command
if ((szArg1[1] == 'r') || (szArg1[1] == 'R')) { // the command is to Save the configuration to a file
if (szArg1[2] == ':') { // then the rest of the string is the input file name
dwSize = SearchPathA (NULL, (LPSTR)&szArg1[3], NULL, sizeof(szFileNameBuffer)/sizeof(szFileNameBuffer[0]), szFileNameBuffer, NULL); if (dwSize == 0) { //unable to find file in path so use it as is
szReturn = (LPSTR)&szArg1[3]; } else { // else return the expanded file name
szReturn = szFileNameBuffer; } } } } return (LPCSTR)szReturn; }
int __cdecl main( int argc, char *argv[] ) /*++
main
Arguments
ReturnValue
0 (ERROR_SUCCESS) if command was processed Non-Zero if command error was detected.
--*/ { LPTSTR lpCommandLine; LPSTR szCmdArgFileName; LPWSTR wszFileName; DWORD dwFileNameLen; int nReturn;
lpCommandLine = GetCommandLine(); // get command line
// check for a service name in the command line
if (argc >= 2) { if (argc >= 4) { BOOL bDoUpdate; LPSTR szCounterFile = NULL; LPSTR szHelpFile = NULL; LPSTR szLanguageID = NULL;
bDoUpdate = GetUpgradeFileNames ( argv, &szCounterFile, &szHelpFile, &szLanguageID);
if (bDoUpdate) { return (int) UpdatePerfNameFilesA ( szCounterFile, szHelpFile, szLanguageID, 0);
} } else { // then there's a param to check
szCmdArgFileName = (LPSTR)GetSaveFileName (argv[1]); if (szCmdArgFileName != NULL) { dwFileNameLen = lstrlenA(szCmdArgFileName) + 1; wszFileName = HeapAlloc (GetProcessHeap(), 0, (dwFileNameLen) * sizeof (WCHAR)); if (wszFileName != NULL) { mbstowcs (wszFileName, szCmdArgFileName, dwFileNameLen); nReturn = (int)BackupPerfRegistryToFileW ( (LPCWSTR)wszFileName, (LPCWSTR)L""); HeapFree (GetProcessHeap(), 0, wszFileName); return nReturn; } }
// try Restore file name
szCmdArgFileName = (LPSTR)GetRestoreFileName (argv[1]); if (szCmdArgFileName != NULL) { dwFileNameLen = lstrlenA(szCmdArgFileName) + 1; wszFileName = HeapAlloc (GetProcessHeap(), 0, (dwFileNameLen) * sizeof (WCHAR)); if (wszFileName != NULL) { mbstowcs (wszFileName, szCmdArgFileName, dwFileNameLen); nReturn = (int)RestorePerfRegistryFromFileW( (LPCWSTR) wszFileName, NULL); HeapFree (GetProcessHeap(), 0, wszFileName); return nReturn; } }
// try Trusted service name
szCmdArgFileName = (LPSTR)GetTrustedServiceName (argv[1]); if (szCmdArgFileName != NULL) { dwFileNameLen = lstrlenA(szCmdArgFileName) + 1; wszFileName = HeapAlloc (GetProcessHeap(), 0, (dwFileNameLen) * sizeof (WCHAR)); if (wszFileName != NULL) { mbstowcs (wszFileName, szCmdArgFileName, dwFileNameLen); nReturn = (int)SetServiceAsTrusted (NULL, (LPCWSTR)wszFileName); // filename is really the service name
HeapFree (GetProcessHeap(), 0, wszFileName); return nReturn; } } } } // if here then load the registry from an ini file
return (int) LoadPerfCounterTextStrings ( lpCommandLine, FALSE); // show text strings to console
}
|