You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1762 lines
64 KiB
1762 lines
64 KiB
|
|
#include "globals.h"
|
|
#include "cmdline.h"
|
|
#include "resource.h"
|
|
#include <regstr.h>
|
|
TCHAR g_WindowsDirectory[MAX_PATH];
|
|
BOOL g_WalkStartMenu;
|
|
#define NOT_CASE_SENSITIVE TRUE
|
|
#define CASE_SENSITIVE FALSE
|
|
typedef struct MYTIMESTRUCT
|
|
{
|
|
TCHAR szMonth[10];
|
|
TCHAR szDay[10];
|
|
TCHAR szYear[10];
|
|
TCHAR szHour[10];
|
|
TCHAR szMinute[10];
|
|
TCHAR szSecond[10];
|
|
TCHAR szMillisecond[10];
|
|
}MyTimeStruct;
|
|
|
|
PTCHAR GetUniqueFileName( void );
|
|
void FillMyTime(MYTIMESTRUCT *MyTime);
|
|
|
|
BOOL CLASS_GeneralInfo::Go(void)
|
|
{
|
|
BOOL ReturnValue;
|
|
HWND HandleToStatic;
|
|
TCHAR Status[MAX_PATH * 4];
|
|
CLASS_GeneralAppWalk AppWalk(LogProc, gHandleToMainWindow);
|
|
kCommandLine CommandLine;
|
|
HandleToStatic = GetDlgItem(gHandleToMainWindow, IDC_STATIC_STATUS);
|
|
wsprintf(Status, TEXT("Sysparse is now collecting information. During this process, it will not respond to mouse or keyboard commands, and may appear to be hung for up to 15 minutes."));
|
|
if(INVALID_HANDLE_VALUE != HandleToStatic)
|
|
SendMessage(HandleToStatic, WM_SETTEXT, 0, (LPARAM)Status);
|
|
HandleToStatic = GetDlgItem(gHandleToMainWindow, IDC_STATIC_HELP);
|
|
wsprintf(Status, TEXT(""));
|
|
if(INVALID_HANDLE_VALUE != HandleToStatic)
|
|
SendMessage(HandleToStatic, WM_SETTEXT, 0, (LPARAM)Status);
|
|
|
|
ReturnValue = DetermineArgumentValidity();
|
|
if (FALSE == ReturnValue)
|
|
return FALSE;
|
|
ReturnValue = InitLogFile();
|
|
if (FALSE == ReturnValue)
|
|
return FALSE;
|
|
//
|
|
// From this point forward we init'd the log file and will always write a section label and a value for each value request,
|
|
// whether that value is a default (usually "Unknown" or "Blank") or the actual value requested.
|
|
//
|
|
|
|
WriteVersions();
|
|
GetUUID();
|
|
WriteArguments();
|
|
WriteFreeDiskSpace();
|
|
WriteVolumeType();
|
|
WriteMemorySize();
|
|
WriteOSVersion();
|
|
|
|
|
|
switch (OSVersion)
|
|
{
|
|
case Win95:
|
|
{
|
|
TCHAR lWindir[MAX_PATH];
|
|
HANDLE File;
|
|
WIN32_FIND_DATA w32fd;
|
|
|
|
GetSystemDirectory(lWindir, MAX_PATH);
|
|
if ( '\\' == lWindir[lstrlen(lWindir)-1] )
|
|
{
|
|
lWindir[lstrlen(lWindir)-1]='\0';
|
|
}
|
|
lstrcat(lWindir, "\\cfgmgr32.dll");
|
|
File = FindFirstFile(lWindir, &w32fd);
|
|
if (INVALID_HANDLE_VALUE != File)
|
|
{
|
|
LogProc->LogString("\r\n,#Syspar32,,\r\n");
|
|
kNT5DevWalk MainNT5DevWalk(LogProc);
|
|
MainNT5DevWalk.Go();
|
|
}
|
|
else
|
|
{
|
|
LogProc->LogString("\r\n,#Syspar16,,\r\n");
|
|
kWin9xDevWalk MainWin9xDevWalk(LogProc);
|
|
MainWin9xDevWalk.Go();
|
|
}
|
|
break;
|
|
}
|
|
case NT4:
|
|
{
|
|
kNT4DevWalk MainNT4DevWalk(LogProc, gHandleToMainWindow);
|
|
if (MainNT4DevWalk.Begin())
|
|
MainNT4DevWalk.Walk();
|
|
break;
|
|
}
|
|
case Win2000:
|
|
case Whistler:
|
|
{
|
|
LogProc->LogString("\r\n,#Syspar32,,\r\n");
|
|
kNT5DevWalk MainNT5DevWalk(LogProc);
|
|
MainNT5DevWalk.Go();
|
|
kNT5NetWalk MainNT5NetWalk(LogProc, gHandleToMainWindow);
|
|
if (MainNT5NetWalk.Begin())
|
|
MainNT5NetWalk.Walk();
|
|
break;
|
|
}
|
|
case Win98:
|
|
{
|
|
LogProc->LogString("\r\n,#Syspar32,,\r\n");
|
|
kNT5DevWalk MainNT5DevWalk(LogProc);
|
|
|
|
MainNT5DevWalk.Go();
|
|
break;
|
|
}
|
|
}
|
|
|
|
WIN32_FIND_DATA *fd2 = (WIN32_FIND_DATA*)malloc(sizeof(WIN32_FIND_DATA));
|
|
WIN32_FIND_DATA *fd3 = (WIN32_FIND_DATA*)malloc(sizeof(WIN32_FIND_DATA));
|
|
if (!fd2)
|
|
return FALSE;
|
|
if(!fd3) {
|
|
free(fd2);
|
|
return FALSE;
|
|
}
|
|
|
|
FindFirstFile(LogProc->szFile, fd3);
|
|
TCHAR szAr[MAX_PATH * 4];
|
|
TCHAR szLogFilePath[MAX_PATH * 4];
|
|
TCHAR szCurDirectory[MAX_PATH];
|
|
|
|
//add specified file name
|
|
if (CommandLine.IsSpecified(TEXT("/n"),NOT_CASE_SENSITIVE))
|
|
lstrcpy(szAr,CommandLine.GetSwitchValue(TEXT("/n"),NOT_CASE_SENSITIVE));
|
|
else if (CommandLine.IsSpecified(TEXT("/u"),NOT_CASE_SENSITIVE))
|
|
// Whistler - Generate Unique filename (ComputerName+UserName+Time)
|
|
lstrcpy(szAr, GetUniqueFileName());
|
|
else
|
|
lstrcpy(szAr, Profile);
|
|
|
|
if (!(CommandLine.IsSpecified(TEXT("/x"),NOT_CASE_SENSITIVE)))
|
|
lstrcat(szAr, PlatformExtension);
|
|
|
|
szAr[8]='\0';
|
|
|
|
if(CommandLine.IsSpecified(TEXT("/w"),NOT_CASE_SENSITIVE))
|
|
lstrcpy(szLogFilePath, CommandLine.GetSwitchValue(TEXT("/w"),NOT_CASE_SENSITIVE));
|
|
else
|
|
lstrcpy(szLogFilePath, WindowsDirectory);
|
|
|
|
// if(GetCurrentDirectory(MAX_PATH, szCurDirectory))
|
|
// lstrcpy(szArp, szCurDirectory);
|
|
|
|
if(szLogFilePath[lstrlen(szLogFilePath) - 1] != '\\')
|
|
lstrcat(szLogFilePath, "\\");
|
|
|
|
lstrcat(szLogFilePath, szAr);
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/l"),NOT_CASE_SENSITIVE))
|
|
lstrcat(szLogFilePath, ".log");
|
|
else
|
|
lstrcat(szLogFilePath, ".csv");
|
|
|
|
if(CommandLine.IsSpecified(TEXT("/u"),NOT_CASE_SENSITIVE))
|
|
szLogFilePath[lstrlen(szLogFilePath) - (4 * sizeof(TCHAR))] = '\0';
|
|
|
|
if (FindFirstFile(szLogFilePath, fd2) != INVALID_HANDLE_VALUE)
|
|
{
|
|
if ( (lstrlen(fd3->cFileName) > 12) && (NT4 != OSVersion) && (Win2000 != OSVersion) )
|
|
{
|
|
FILE *fGetFile, *fPutFile;
|
|
DWORD dwRet = 0;
|
|
DWORD dwBytesWrit;
|
|
TCHAR szBuffer[50000];
|
|
fGetFile = fopen(szLogFilePath, "r");
|
|
fPutFile = fopen(LogProc->szFile, "a+");
|
|
if (fGetFile && fPutFile)
|
|
{
|
|
while (fgets(szBuffer, 50000, fGetFile))
|
|
{
|
|
fputs(szBuffer, fPutFile);
|
|
}
|
|
fclose(fPutFile);
|
|
fclose(fGetFile);
|
|
}
|
|
else
|
|
{
|
|
if (fPutFile)
|
|
fclose(fPutFile);
|
|
if (fGetFile)
|
|
fclose(fGetFile);
|
|
}
|
|
if (fPutFile)
|
|
fclose(fPutFile);
|
|
if (fGetFile)
|
|
fclose(fGetFile);
|
|
DeleteFile(szLogFilePath);
|
|
}
|
|
if(fd2)
|
|
free(fd2);
|
|
if(fd3)
|
|
free(fd3);
|
|
}
|
|
|
|
if (g_WalkStartMenu)
|
|
{
|
|
AppWalk.Walk();
|
|
}
|
|
LogProc->LogString(",#Stop parsing here,,\r\n");
|
|
|
|
#ifndef NOCHKUPGRD
|
|
if ( (RunChkupgrd) && (!CommandLine.IsSpecified(TEXT("/donotrun1"), TRUE)) )
|
|
{
|
|
TCHAR szUpgr[512];
|
|
lstrcpy(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\chkupgrd.exe");
|
|
LoadResourceFile(szUpgr, "EXEResource3" );
|
|
_spawnl(_P_WAIT, szUpgr, szUpgr, "", "", NULL);
|
|
DeleteFile(szUpgr);
|
|
LogProc->LogString("\r\n,#Chkupgrd.log,,\r\n");
|
|
|
|
if (Win2000 != OSVersion)
|
|
{
|
|
lstrcpy(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\winnt32.log");
|
|
CatLogFile(szUpgr);
|
|
DeleteFile(szUpgr);
|
|
lstrcpy(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\config.dmp");
|
|
CatLogFile(szUpgr);
|
|
DeleteFile(szUpgr);
|
|
}
|
|
else
|
|
{
|
|
GetWindowsDirectory(szUpgr, 512);
|
|
if ( '\\' == szUpgr[lstrlen(szUpgr)-1] )
|
|
{
|
|
szUpgr[lstrlen(szUpgr)-1]='\0';
|
|
}
|
|
lstrcat(szUpgr, "\\winnt32.log");
|
|
CatLogFile(szUpgr);
|
|
DeleteFile(szUpgr);
|
|
GetWindowsDirectory(szUpgr, 512);
|
|
if ( '\\' == szUpgr[lstrlen(szUpgr)-1] )
|
|
{
|
|
szUpgr[lstrlen(szUpgr)-1]='\0';
|
|
}
|
|
lstrcat(szUpgr, "\\config.dmp");
|
|
CatLogFile(szUpgr);
|
|
DeleteFile(szUpgr);
|
|
}
|
|
|
|
LogProc->LogString("\r\n,#END_Chkupgrd.log,,\r\n");
|
|
}
|
|
#endif
|
|
|
|
#ifndef ALPHA
|
|
if ( (RunDevdump) && (!CommandLine.IsSpecified(TEXT("/donotrun2"),NOT_CASE_SENSITIVE)) && (Win2000==OSVersion))
|
|
#else
|
|
if ( ((!RunDevdump) || (CommandLine.IsSpecified(TEXT("/donotrun2"),NOT_CASE_SENSITIVE))) && (Win2000==OSVersion))
|
|
#endif
|
|
{
|
|
TCHAR szEx[512];
|
|
TCHAR szUpgr[512];
|
|
lstrcpy(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\devdump.exe");
|
|
LoadResourceFile(szUpgr, "EXEResource4" );
|
|
lstrcpy(szEx, szUpgr);
|
|
lstrcat(szUpgr, " ");
|
|
lstrcat(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\devdump.log /T");
|
|
_spawnl(_P_WAIT, szEx, szUpgr, "", "", NULL);
|
|
DeleteFile(szUpgr);
|
|
LogProc->LogString("\r\n,#DevDump.log,,\r\n");
|
|
lstrcpy(szUpgr, LogProc->szLogDir);
|
|
lstrcat(szUpgr, "\\devdump.log");
|
|
CatLogFile(szUpgr);
|
|
DeleteFile(szUpgr);
|
|
LogProc->LogString("\r\n,#END_DevDump.log,,\r\n");
|
|
}
|
|
|
|
HandleToStatic = GetDlgItem(gHandleToMainWindow, IDC_STATIC_STATUS);
|
|
wsprintf(Status, TEXT("Logfile \"%s\" has been written to disk."), LogProc->szFile);
|
|
//
|
|
// If the filepath is specified on the command line, we are likely running under Winnt32
|
|
// so we hide the files to set a good example to ISV's - bug #229053
|
|
//
|
|
if(CommandLine.IsSpecified(TEXT("/w"),NOT_CASE_SENSITIVE)) {
|
|
SetFileAttributes(LogProc->szFile, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
|
|
SetFileAttributes(szRegFile, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
|
|
}
|
|
SendMessage(HandleToStatic, WM_SETTEXT, 0, (LPARAM)Status);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
CLASS_GeneralInfo::CLASS_GeneralInfo(kLogFile *Proc, HWND hIn)
|
|
{
|
|
LogProc=Proc;
|
|
gHandleToMainWindow = hIn;
|
|
GetCurrentWindowsDirectory();
|
|
//RunDevdump = TRUE;
|
|
RunDevdump = FALSE; // Disabled devdump due to whistler bug 355359
|
|
RunChkupgrd = TRUE;
|
|
AutoRun = FALSE;
|
|
RunMinimized = FALSE;
|
|
OverWrite = FALSE;
|
|
UseComputerName = FALSE;
|
|
}
|
|
|
|
// Initialize the global WindowsDirectory variable
|
|
void CLASS_GeneralInfo::GetCurrentWindowsDirectory(void)
|
|
{
|
|
HINSTANCE hInst2=LoadLibraryEx("kernel32.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
|
|
LPFNDLLFUNC2 fProc = (LPFNDLLFUNC2)GetProcAddress(hInst2, "GetSystemWindowsDirectoryA");
|
|
|
|
if (hInst2 && fProc)
|
|
{
|
|
fProc(WindowsDirectory, MAX_PATH);
|
|
}
|
|
else
|
|
{
|
|
GetWindowsDirectory(WindowsDirectory, MAX_PATH);
|
|
}
|
|
if ( '\\' == WindowsDirectory[lstrlen(WindowsDirectory)-1] )
|
|
{
|
|
WindowsDirectory[lstrlen(WindowsDirectory)-1]='\0';
|
|
}
|
|
lstrcpy(g_WindowsDirectory, WindowsDirectory);
|
|
}
|
|
|
|
void CLASS_GeneralInfo::DetermineOS(void)
|
|
{
|
|
OSVERSIONINFO osV;
|
|
|
|
osV.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
if (GetVersionEx(&osV))
|
|
{
|
|
switch (osV.dwPlatformId)
|
|
{
|
|
case VER_PLATFORM_WIN32s:
|
|
OSVersion = Unknown;
|
|
break;
|
|
case VER_PLATFORM_WIN32_WINDOWS:
|
|
{
|
|
if (osV.dwMinorVersion == 0)
|
|
{
|
|
OSVersion = Win95;
|
|
}
|
|
else if (osV.dwMinorVersion == 10)
|
|
{
|
|
OSVersion = Win98;
|
|
}
|
|
}
|
|
break;
|
|
case VER_PLATFORM_WIN32_NT:
|
|
{
|
|
if (osV.dwMajorVersion == 4)
|
|
{
|
|
OSVersion = NT4;
|
|
}
|
|
else if (osV.dwMajorVersion == 5)
|
|
{
|
|
if(LOWORD(osV.dwBuildNumber) == 2195)
|
|
OSVersion = Win2000;
|
|
else if(LOWORD(osV.dwBuildNumber) >= 2196)
|
|
OSVersion = Whistler;
|
|
else
|
|
OSVersion = Unknown;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
OSVersion = Unknown;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
OSVersion = Unknown;
|
|
}
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::InitLogFile(void)
|
|
{
|
|
TCHAR szLogFileName[MAX_PATH * 4];
|
|
TCHAR Windy[MAX_PATH * 4];
|
|
TCHAR szCurDirectory[MAX_PATH];
|
|
WIN32_FIND_DATA FileData;
|
|
HANDLE HandleToSearch;
|
|
kCommandLine CommandLine;
|
|
|
|
DetermineOS();
|
|
|
|
//default to windir
|
|
lstrcpy(szLogFileName, WindowsDirectory);
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/w"),NOT_CASE_SENSITIVE))
|
|
lstrcpy(szLogFileName, CommandLine.GetSwitchValue(TEXT("/w"),NOT_CASE_SENSITIVE));
|
|
|
|
//if (GetCurrentDirectory(MAX_PATH, szCurDirectory))
|
|
// lstrcpy(CSV, szCurDirectory);
|
|
if(szLogFileName[lstrlen(szLogFileName) -1] != '\\')
|
|
lstrcat(szLogFileName, "\\");
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/n"),NOT_CASE_SENSITIVE))
|
|
lstrcat(szLogFileName,CommandLine.GetSwitchValue(TEXT("/n"),NOT_CASE_SENSITIVE));
|
|
// For Whistler Pre-Beta1 test - Generate Unique filename (ComputerName+UserName+Time)
|
|
else if (CommandLine.IsSpecified(TEXT("/u"),NOT_CASE_SENSITIVE))
|
|
lstrcat(szLogFileName, GetUniqueFileName());
|
|
else
|
|
lstrcat(szLogFileName, Profile);
|
|
|
|
lstrcpy(szRegFile, szLogFileName);
|
|
lstrcat(szRegFile, TEXT(".reg"));
|
|
|
|
switch (OSVersion)
|
|
{
|
|
case Win95:
|
|
lstrcpy(PlatformExtension, TEXT("-w95"));
|
|
break;
|
|
case Win98:
|
|
lstrcpy(PlatformExtension, TEXT("-w98"));
|
|
break;
|
|
case NT4:
|
|
lstrcpy(PlatformExtension, TEXT("-nt4"));
|
|
break;
|
|
case Win2000:
|
|
lstrcpy(PlatformExtension, TEXT("-w2k"));
|
|
break;
|
|
default:
|
|
lstrcpy(PlatformExtension, TEXT("-unk"));
|
|
break;
|
|
}
|
|
|
|
if (!(CommandLine.IsSpecified(TEXT("/x"),NOT_CASE_SENSITIVE)))
|
|
lstrcat(szLogFileName, PlatformExtension);
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/l"),NOT_CASE_SENSITIVE))
|
|
lstrcat(szLogFileName, ".log");
|
|
else
|
|
lstrcat(szLogFileName, ".csv");
|
|
|
|
if(CommandLine.IsSpecified(TEXT("/u"),NOT_CASE_SENSITIVE))
|
|
szLogFileName[lstrlen(szLogFileName) - (4 * sizeof (TCHAR))] = '\0';
|
|
|
|
HandleToSearch = FindFirstFile(szLogFileName, &FileData);
|
|
if (TRUE == OverWrite)
|
|
DeleteFile(szLogFileName);
|
|
else if (INVALID_HANDLE_VALUE != HandleToSearch)
|
|
{
|
|
//ask to overwrite
|
|
TCHAR ErrorMessage[MAX_PATH * 4];
|
|
int RetVal;
|
|
|
|
wsprintf(ErrorMessage, TEXT("Overwrite %s?"), szLogFileName);
|
|
RetVal=MessageBox(gHandleToMainWindow, ErrorMessage, TEXT("Sysparse"), MB_YESNO);
|
|
if (IDYES == RetVal)
|
|
DeleteFile(szLogFileName);
|
|
else if (IDNO == RetVal)
|
|
return FALSE;
|
|
}
|
|
if(HandleToSearch)
|
|
FindClose(HandleToSearch);
|
|
lstrcpy(Windy, WindowsDirectory);
|
|
LogProc->InitFile(szLogFileName, Windy);
|
|
return TRUE;
|
|
}
|
|
|
|
void CLASS_GeneralInfo::InitHelpers(void)
|
|
{
|
|
|
|
}
|
|
|
|
void CLASS_GeneralInfo::DetermineCommandLine(void)
|
|
{
|
|
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::FillInArguments(void)
|
|
{
|
|
kCommandLine CommandLine;
|
|
TCHAR ComputerName[MAX_COMPUTERNAME_LENGTH+1];
|
|
TCHAR CurrentDirectory[MAX_PATH];
|
|
HANDLE FileSearch;
|
|
WIN32_FIND_DATA FileData;
|
|
BOOL PrePopulateFileFound = FALSE;
|
|
DWORD NameBufferSize = MAX_COMPUTERNAME_LENGTH + 1;
|
|
|
|
lstrcpy(Corporation, "");
|
|
lstrcpy(Email, "");
|
|
lstrcpy(Manufacturer, "");
|
|
lstrcpy(Model, "");
|
|
lstrcpy(NumComp, "");
|
|
lstrcpy(SiteID, "");
|
|
lstrcpy(Profile, "");
|
|
lstrcpy(BetaID, "");
|
|
lstrcpy(MachineType, "");
|
|
SiteIDIndex=0;
|
|
MachineTypeIndex=0;
|
|
|
|
if (0 != GetModuleFileName(NULL, CurrentDirectory, MAX_PATH))
|
|
{
|
|
DWORD NameCounter;
|
|
|
|
NameCounter = lstrlen(CurrentDirectory);
|
|
while ( ('\\' != CurrentDirectory[NameCounter]) && (0 != NameCounter) )
|
|
NameCounter--;
|
|
CurrentDirectory[NameCounter]='\0';
|
|
if ('\\' != CurrentDirectory[lstrlen(CurrentDirectory)-1] )
|
|
{
|
|
lstrcat(CurrentDirectory, "\\sysparsq");
|
|
}
|
|
else
|
|
{
|
|
lstrcat(CurrentDirectory, "sysparsq");
|
|
}
|
|
FileSearch=FindFirstFile(CurrentDirectory, &FileData);
|
|
if (INVALID_HANDLE_VALUE != FileSearch)
|
|
{
|
|
//found the INI
|
|
ReadInFileInfo(CurrentDirectory);
|
|
FindClose(FileSearch);
|
|
PrePopulateFileFound = TRUE;
|
|
}
|
|
else
|
|
{
|
|
lstrcat(CurrentDirectory, TEXT(".ini"));
|
|
FileSearch = FindFirstFile(CurrentDirectory, &FileData);
|
|
if (INVALID_HANDLE_VALUE != FileSearch)
|
|
{
|
|
//found the INI
|
|
ReadInFileInfo(CurrentDirectory);
|
|
FindClose(FileSearch);
|
|
PrePopulateFileFound = TRUE;
|
|
}
|
|
}
|
|
if (CommandLine.IsSpecified("/p",NOT_CASE_SENSITIVE))
|
|
{
|
|
PTCHAR Switch;
|
|
TCHAR Message1[MAX_PATH * 4], Message2[MAX_PATH * 4];
|
|
DWORD ret;
|
|
HANDLE SearchHandle;
|
|
WIN32_FIND_DATA Data;
|
|
|
|
Switch = CommandLine.GetSwitchValue("/p",NOT_CASE_SENSITIVE);
|
|
if(!Switch)
|
|
{
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return FALSE;
|
|
}
|
|
lstrcpy (CurrentDirectory, Switch);
|
|
//"/p filename" file to copy input values from
|
|
|
|
SearchHandle = FindFirstFile(CurrentDirectory, &Data);
|
|
if (INVALID_HANDLE_VALUE != SearchHandle)
|
|
{
|
|
PrePopulateFileFound = TRUE;
|
|
ReadInFileInfo(CurrentDirectory);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(Message2, "Could not find file %s specified with /p switch", CurrentDirectory);
|
|
MessageBox(NULL, Message2, "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
if(FileSearch)
|
|
FindClose(FileSearch);
|
|
}
|
|
/*
|
|
//fill this in with the above routine. (put it in a seperate routine and call it from here.)
|
|
else if (CommandLine.IsSpecified("-p",TRUE))
|
|
{
|
|
TCHAR *Switch;
|
|
Switch=CommandLine.GetSwitchValue("-p",TRUE);
|
|
lstrcpy(CurrentDirectory, Switch);
|
|
PrePopulateFileFound=TRUE;
|
|
}
|
|
*/
|
|
|
|
//No file to prepopulate sysparse with, find out if
|
|
//there are any commandline arguments to look at
|
|
if (CommandLine.IsSpecified("/a",NOT_CASE_SENSITIVE) || CommandLine.IsSpecified("-a",NOT_CASE_SENSITIVE))
|
|
AutoRun = TRUE;
|
|
|
|
if (CommandLine.IsSpecified("/m",NOT_CASE_SENSITIVE) || CommandLine.IsSpecified("-m",NOT_CASE_SENSITIVE))
|
|
RunMinimized = TRUE;
|
|
|
|
if (CommandLine.IsSpecified("/c",NOT_CASE_SENSITIVE) || CommandLine.IsSpecified("-c",NOT_CASE_SENSITIVE) || (TRUE == UseComputerName) )
|
|
{
|
|
UseComputerName = TRUE;
|
|
|
|
if (GetComputerName(ComputerName, &NameBufferSize))
|
|
{
|
|
lstrcpy(Profile, ComputerName);
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_PROFILE), WM_SETTEXT, 0, (LPARAM)Profile);
|
|
}
|
|
}
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/o"),NOT_CASE_SENSITIVE) || CommandLine.IsSpecified(TEXT("-o"), NOT_CASE_SENSITIVE))
|
|
OverWrite = TRUE;
|
|
|
|
if (CommandLine.IsSpecified(TEXT("/s"),NOT_CASE_SENSITIVE) || CommandLine.IsSpecified(TEXT("-s"), NOT_CASE_SENSITIVE))
|
|
g_WalkStartMenu = FALSE;
|
|
|
|
if (CommandLine.IsSpecified("/1",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Corporation, CommandLine.GetSwitchValue("/1",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_CORPORATION), WM_SETTEXT, 0, (LPARAM)Corporation);
|
|
}
|
|
else if (CommandLine.IsSpecified("-1",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Corporation, CommandLine.GetSwitchValue("-1",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_CORPORATION), WM_SETTEXT, 0, (LPARAM)Corporation);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/2",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Email, CommandLine.GetSwitchValue("/2",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_EMAIL), WM_SETTEXT, 0, (LPARAM)Email);
|
|
}
|
|
else if (CommandLine.IsSpecified("-2",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Email, CommandLine.GetSwitchValue("-2",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_EMAIL), WM_SETTEXT, 0, (LPARAM)Email);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/6",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Manufacturer, CommandLine.GetSwitchValue("/6",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_MANUFACTURER), WM_SETTEXT, 0, (LPARAM)Manufacturer);
|
|
}
|
|
else if (CommandLine.IsSpecified("-6",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Manufacturer, CommandLine.GetSwitchValue("-6",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_MANUFACTURER), WM_SETTEXT, 0, (LPARAM)Manufacturer);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/7",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Model, CommandLine.GetSwitchValue("/7",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_MODEL), WM_SETTEXT, 0, (LPARAM)Model);
|
|
}
|
|
else if (CommandLine.IsSpecified("-7",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(Model, CommandLine.GetSwitchValue("-7",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_MODEL), WM_SETTEXT, 0, (LPARAM)Model);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/9",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(NumComp, CommandLine.GetSwitchValue("/9",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_NUMCOMP), WM_SETTEXT, 0, (LPARAM)NumComp);
|
|
}
|
|
else if (CommandLine.IsSpecified("-9",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(NumComp, CommandLine.GetSwitchValue("-9",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_NUMCOMP), WM_SETTEXT, 0, (LPARAM)NumComp);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/3",NOT_CASE_SENSITIVE))
|
|
{
|
|
TCHAR Temp[MAX_PATH * 4];
|
|
|
|
lstrcpy(Temp, CommandLine.GetSwitchValue("/3",NOT_CASE_SENSITIVE));
|
|
SiteIDIndex=(UINT)_ttoi(Temp);
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID), CB_SETCURSEL, SiteIDIndex+1, 0);
|
|
SendMessage(gHandleToMainWindow, WM_COMMAND, MAKEWPARAM(IDC_COMBO_SITEID, 0), (LPARAM)GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID));
|
|
}
|
|
else if (CommandLine.IsSpecified("-3",NOT_CASE_SENSITIVE))
|
|
{
|
|
TCHAR Temp[MAX_PATH * 4];
|
|
lstrcpy(Temp, CommandLine.GetSwitchValue("-3",NOT_CASE_SENSITIVE));
|
|
SiteIDIndex = (UINT)_ttoi(Temp);
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID), CB_SETCURSEL, SiteIDIndex+1, 0);
|
|
SendMessage(gHandleToMainWindow, WM_COMMAND, MAKEWPARAM(IDC_COMBO_SITEID, 0), (LPARAM)GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID));
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/4",NOT_CASE_SENSITIVE))
|
|
{
|
|
if (!UseComputerName)
|
|
{
|
|
lstrcpy(Profile, CommandLine.GetSwitchValue("/4",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_PROFILE), WM_SETTEXT, 0, (LPARAM)Profile);
|
|
}
|
|
}
|
|
else if (CommandLine.IsSpecified("-4",NOT_CASE_SENSITIVE))
|
|
{
|
|
if (!UseComputerName)
|
|
{
|
|
lstrcpy(Profile, CommandLine.GetSwitchValue("-4",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_PROFILE), WM_SETTEXT, 0, (LPARAM)Profile);
|
|
}
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/5",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(BetaID, CommandLine.GetSwitchValue("/5",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_BETAID), WM_SETTEXT, 0, (LPARAM)BetaID);
|
|
}
|
|
else if (CommandLine.IsSpecified("-5",NOT_CASE_SENSITIVE))
|
|
{
|
|
lstrcpy(BetaID, CommandLine.GetSwitchValue("-5",NOT_CASE_SENSITIVE));
|
|
SendMessage(GetDlgItem(gHandleToMainWindow, IDC_EDIT_BETAID), WM_SETTEXT, 0, (LPARAM)BetaID);
|
|
}
|
|
|
|
if (CommandLine.IsSpecified("/8",NOT_CASE_SENSITIVE))
|
|
{
|
|
TCHAR Temp[MAX_PATH * 4];
|
|
lstrcpy (Temp, CommandLine.GetSwitchValue ("/8",NOT_CASE_SENSITIVE));
|
|
MachineTypeIndex = (UINT)_ttoi(Temp);
|
|
SendMessage (GetDlgItem (gHandleToMainWindow, IDC_COMBO_TYPE), CB_SETCURSEL, MachineTypeIndex + 1, 0);
|
|
}
|
|
else if (CommandLine.IsSpecified("-8",NOT_CASE_SENSITIVE))
|
|
{
|
|
TCHAR Temp[MAX_PATH * 4];
|
|
SendMessage (GetDlgItem (gHandleToMainWindow, IDC_COMBO_TYPE), CB_SETCURSEL, MachineTypeIndex + 1, 0);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::ReadInFileInfo(PTCHAR pFileName)
|
|
{
|
|
TCHAR AutoRunText[MAX_PATH * 4];
|
|
HWND HandleToControl;
|
|
DWORD ret;
|
|
|
|
if(!pFileName)
|
|
return FALSE;
|
|
|
|
if(!lstrlen(pFileName))
|
|
return FALSE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Corp\"", "", Corporation, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Make\"", "", Manufacturer, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Model\"", "", Model, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#UserID\"", "", Email, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"##machines_on_profile\"", "", NumComp, MAX_PATH * 4, pFileName);
|
|
ret = 0;
|
|
while ('\0' != NumComp[ret])
|
|
{
|
|
if ( (NumComp[ret] < 48) || (NumComp[ret] > 57) )
|
|
{
|
|
TCHAR Error[MAX_PATH * 4];
|
|
wsprintf(Error, "##machines_on_profile in %s is not valid", pFileName);
|
|
MessageBox(NULL, Error, "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
ret++;
|
|
}
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Event\"", "", SiteID, MAX_PATH * 4, pFileName);
|
|
if (0 != lstrlen(SiteID))
|
|
{
|
|
if (INVALID_HANDLE_VALUE != (HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID)))
|
|
SiteIDIndex = (USHORT)SendMessage(HandleToControl, CB_FINDSTRINGEXACT, -1, (LPARAM)SiteID);
|
|
|
|
if (CB_ERR == SiteIDIndex)
|
|
{
|
|
MessageBox(gHandleToMainWindow, "SiteID (#Event) specified in INI is invalid", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
SendMessage(HandleToControl, CB_SETCURSEL, SiteIDIndex, 0);
|
|
SendMessage(gHandleToMainWindow, WM_COMMAND, MAKEWPARAM(IDC_COMBO_SITEID, 0), (LPARAM)GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID));
|
|
}
|
|
}
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Profile\"", "", Profile, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#Location\"", "", BetaID, MAX_PATH * 4, pFileName);
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#MachineType\"", "", MachineType, MAX_PATH * 4, pFileName);
|
|
|
|
if (0 != lstrlen(MachineType))
|
|
{
|
|
if (INVALID_HANDLE_VALUE != (HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_COMBO_TYPE)))
|
|
MachineTypeIndex = (USHORT)SendMessage(HandleToControl, CB_FINDSTRINGEXACT, -1, (LPARAM)MachineType);
|
|
|
|
if (CB_ERR == MachineTypeIndex)
|
|
{
|
|
MessageBox(gHandleToMainWindow, "MachineType (#Event) specified in INI is not valid", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
else if(INVALID_HANDLE_VALUE != HandleToControl)
|
|
{
|
|
SendMessage(HandleToControl, CB_SETCURSEL, MachineTypeIndex, 0);
|
|
}
|
|
else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#AutoRun\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
AutoRun = TRUE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#OverWriteCSV\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
OverWrite = TRUE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#RunMinimized\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
RunMinimized = TRUE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#UseComputerName\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
UseComputerName = TRUE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#donotrun1\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
RunChkupgrd=FALSE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#donotrun2\"", "", AutoRunText, MAX_PATH * 4, pFileName);
|
|
_tcslwr(AutoRunText);
|
|
if (!lstrcmp(AutoRunText, TEXT("yes")))
|
|
RunDevdump=FALSE;
|
|
|
|
GetPrivateProfileString ("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse", "\"#MachineUUID\"", "", OriginalMachineUUID, MAX_PATH * 4, pFileName);
|
|
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_CORPORATION);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)Corporation);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_EMAIL);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)Email);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_MANUFACTURER);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)Manufacturer);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_MODEL);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)Model);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_NUMCOMP);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)NumComp);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_PROFILE);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)Profile);
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_BETAID);
|
|
SendMessage(HandleToControl, WM_SETTEXT, 0, (LPARAM)BetaID);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::DetermineArgumentValidity(void)
|
|
{
|
|
BOOL ReturnValue;
|
|
DWORD Counter;
|
|
|
|
ReturnValue = CopyInput();
|
|
|
|
if (FALSE == ReturnValue)
|
|
return FALSE;
|
|
|
|
Counter=0;
|
|
while (Profile[Counter]!='\0')
|
|
{
|
|
if (Profile[Counter] != 'a' &&
|
|
Profile[Counter] != 'b' &&
|
|
Profile[Counter] != 'c' &&
|
|
Profile[Counter] != 'd' &&
|
|
Profile[Counter] != 'e' &&
|
|
Profile[Counter] != 'f' &&
|
|
Profile[Counter] != 'g' &&
|
|
Profile[Counter] != 'h' &&
|
|
Profile[Counter] != 'i' &&
|
|
Profile[Counter] != 'j' &&
|
|
Profile[Counter] != 'k' &&
|
|
Profile[Counter] != 'l' &&
|
|
Profile[Counter] != 'm' &&
|
|
Profile[Counter] != 'n' &&
|
|
Profile[Counter] != 'o' &&
|
|
Profile[Counter] != 'p' &&
|
|
Profile[Counter] != 'q' &&
|
|
Profile[Counter] != 'r' &&
|
|
Profile[Counter] != 's' &&
|
|
Profile[Counter] != 't' &&
|
|
Profile[Counter] != 'u' &&
|
|
Profile[Counter] != 'v' &&
|
|
Profile[Counter] != 'w' &&
|
|
Profile[Counter] != 'x' &&
|
|
Profile[Counter] != 'y' &&
|
|
Profile[Counter] != 'z' &&
|
|
Profile[Counter] != 'A' &&
|
|
Profile[Counter] != 'B' &&
|
|
Profile[Counter] != 'C' &&
|
|
Profile[Counter] != 'D' &&
|
|
Profile[Counter] != 'E' &&
|
|
Profile[Counter] != 'F' &&
|
|
Profile[Counter] != 'G' &&
|
|
Profile[Counter] != 'H' &&
|
|
Profile[Counter] != 'I' &&
|
|
Profile[Counter] != 'J' &&
|
|
Profile[Counter] != 'K' &&
|
|
Profile[Counter] != 'L' &&
|
|
Profile[Counter] != 'M' &&
|
|
Profile[Counter] != 'N' &&
|
|
Profile[Counter] != 'O' &&
|
|
Profile[Counter] != 'P' &&
|
|
Profile[Counter] != 'Q' &&
|
|
Profile[Counter] != 'R' &&
|
|
Profile[Counter] != 'S' &&
|
|
Profile[Counter] != 'T' &&
|
|
Profile[Counter] != 'U' &&
|
|
Profile[Counter] != 'V' &&
|
|
Profile[Counter] != 'W' &&
|
|
Profile[Counter] != 'X' &&
|
|
Profile[Counter] != 'Y' &&
|
|
Profile[Counter] != 'Z' &&
|
|
Profile[Counter] != '0' &&
|
|
Profile[Counter] != '1' &&
|
|
Profile[Counter] != '2' &&
|
|
Profile[Counter] != '3' &&
|
|
Profile[Counter] != '4' &&
|
|
Profile[Counter] != '5' &&
|
|
Profile[Counter] != '6' &&
|
|
Profile[Counter] != '7' &&
|
|
Profile[Counter] != '8' &&
|
|
Profile[Counter] != '9' &&
|
|
Profile[Counter] != ' ' &&
|
|
Profile[Counter] != '_' &&
|
|
Profile[Counter] != '-' )
|
|
{
|
|
Profile[Counter]=TEXT('_');
|
|
}
|
|
Counter++;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CLASS_GeneralInfo::ChangeSpaces(TCHAR *Input)
|
|
{
|
|
TCHAR Temp[MAX_PATH * 4];
|
|
DWORD Counter;
|
|
DWORD Len;
|
|
|
|
Counter = 0;
|
|
Len = lstrlen(Temp);
|
|
lstrcpy(Temp, Input);
|
|
while (('\0' != Temp[Counter]) && (Counter != Len))
|
|
{
|
|
if ( ' ' == Temp[Counter] )
|
|
Temp[Counter]='_';
|
|
|
|
Counter++;
|
|
}
|
|
lstrcpy(Input, Temp);
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::CopyInput(void)
|
|
{
|
|
HWND HandleToControl;
|
|
TCHAR Holder[MAX_PATH * 4];
|
|
DWORD Retval;
|
|
|
|
HandleToControl=GetDlgItem(gHandleToMainWindow, IDC_EDIT_CORPORATION);
|
|
if (HandleToControl)
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)Corporation);
|
|
if (0 == lstrlen(Corporation))
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for Corporation", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_EMAIL);
|
|
if (HandleToControl)
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)Email);
|
|
if (0 == lstrlen(Email))
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for E-mail", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
HandleToControl=GetDlgItem(gHandleToMainWindow, IDC_EDIT_MANUFACTURER);
|
|
if (HandleToControl)
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)Manufacturer);
|
|
if (0 == lstrlen(Manufacturer))
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for Manufacturer", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_MODEL);
|
|
if (HandleToControl)
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)Model);
|
|
if (0 == lstrlen(Model))
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for Model", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_NUMCOMP);
|
|
if (HandleToControl)
|
|
{
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)NumComp);
|
|
}
|
|
if (0 == lstrlen(NumComp))
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for # Computers", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_COMBO_SITEID);
|
|
if (HandleToControl)
|
|
{
|
|
SiteIDIndex=(unsigned short)SendMessage(HandleToControl, CB_GETCURSEL, 0, 0);
|
|
}
|
|
#ifndef SB
|
|
if (0 == SiteIDIndex)
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please select a value for Site ID", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
#else
|
|
if (0 != SiteIDIndex)
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please select a value for Site ID", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
else
|
|
SendMessage(HandleToControl, CB_GETLBTEXT, SiteIDIndex, (LPARAM)SiteID);
|
|
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_PROFILE);
|
|
if (HandleToControl)
|
|
Retval=(DWORD)SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)Profile);
|
|
|
|
if (0 == Retval)
|
|
{
|
|
MessageBox(gHandleToMainWindow, "Please enter a value for Profile", "Sysparse", MB_OK);
|
|
return FALSE;
|
|
}
|
|
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_EDIT_BETAID);
|
|
if (HandleToControl)
|
|
SendMessage(HandleToControl, WM_GETTEXT, MAX_PATH * 4, (LPARAM)BetaID);
|
|
|
|
if (0 == lstrlen(BetaID))
|
|
{
|
|
MessageBox(gHandleToMainWindow, TEXT("Please enter a value for Beta ID"), TEXT("Sysparse"), MB_OK);
|
|
return FALSE;
|
|
}
|
|
|
|
HandleToControl = GetDlgItem(gHandleToMainWindow, IDC_COMBO_TYPE);
|
|
|
|
if (HandleToControl)
|
|
MachineTypeIndex = (unsigned short)SendMessage(HandleToControl, CB_GETCURSEL, 0, 0);
|
|
|
|
if (0 == MachineTypeIndex)
|
|
{
|
|
MessageBox(gHandleToMainWindow, TEXT("Please select a value for MachineType"), TEXT("Sysparse"), MB_OK);
|
|
return FALSE;
|
|
}
|
|
else
|
|
SendMessage(HandleToControl, CB_GETLBTEXT, MachineTypeIndex, (LPARAM)MachineType);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteVersions(void)
|
|
{
|
|
SYSTEMTIME SysTime;
|
|
#ifdef INTERNAL
|
|
LogProc->LogString(TEXT(",#Sysparse_Version,,\r\n,02.05.02I,\r\n"));
|
|
#else
|
|
LogProc->LogString(TEXT(",#Sysparse_Version,,\r\n,02.05.02E,\r\n"));
|
|
#endif
|
|
LogProc->LogString(TEXT(",#ParseTime,,\r\n"));
|
|
GetSystemTime(&SysTime);
|
|
LogProc->LogString (TEXT(",%2d/%2d/%4d %2d:%2d:%2d,\r\n"), SysTime.wMonth, SysTime.wDay, SysTime.wYear, SysTime.wHour, SysTime.wMinute, SysTime.wSecond);
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteGeneralInfo(void)
|
|
{
|
|
|
|
}
|
|
|
|
void CLASS_GeneralInfo::GetUUID(void)
|
|
{
|
|
HKEY hOpen;
|
|
LONG lRet;
|
|
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\SysParse"), 0, KEY_ALL_ACCESS, &hOpen);
|
|
|
|
if (ERROR_SUCCESS == lRet)
|
|
{
|
|
UCHAR *szreg = (UCHAR*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH * 4);
|
|
TCHAR szFile[MAX_PATH];
|
|
TCHAR szfilecont[50000];
|
|
DWORD dwlen = MAX_PATH * 4;
|
|
DWORD dwType;
|
|
LPTSTR szval = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH * 4);
|
|
lstrcpy(szval, TEXT("#MachineUuid"));
|
|
lRet = RegQueryValueEx(hOpen, szval, NULL, &dwType, szreg, &dwlen);
|
|
if (ERROR_SUCCESS == lRet)
|
|
{
|
|
LogProc->LogString(TEXT(",#MachineUUID,,\r\n"));
|
|
LogProc->LogString(TEXT(",%s,\r\n"), szreg);
|
|
RegSetValueEx(hOpen, TEXT("#Profile"), 0, REG_SZ, (BYTE*)Profile, lstrlen((const char *)Profile)+1);
|
|
RegSetValueEx(hOpen, TEXT("#Corp"), 0, REG_SZ, (BYTE*)Corporation, lstrlen((const char *)Corporation)+1);
|
|
RegSetValueEx(hOpen, TEXT("#UserID"), 0, REG_SZ, (BYTE*)Email, lstrlen((const char *)Email)+1);
|
|
RegSetValueEx(hOpen, TEXT("##machines_on_profile"), 0, REG_SZ, (BYTE*)NumComp, lstrlen((const char *)NumComp)+1);
|
|
RegSetValueEx(hOpen, TEXT("#Make"), 0, REG_SZ, (BYTE*)Manufacturer, lstrlen((const char *)Manufacturer)+1);
|
|
RegSetValueEx(hOpen, TEXT("#Model"), 0, REG_SZ, (BYTE*)Model, lstrlen((const char *)Model)+1);
|
|
RegSetValueEx(hOpen, TEXT("#Event"), 0, REG_SZ, (BYTE*)BetaID, lstrlen((const char *)BetaID)+1);
|
|
RegSetValueEx(hOpen, TEXT("#MachineType"), 0, REG_SZ, (BYTE*)MachineType, lstrlen((const char *)MachineType)+1);
|
|
}
|
|
else
|
|
{
|
|
LogProc->LogString(TEXT(",#MachineUUID,,\r\n"));
|
|
UUID uuid;
|
|
LONG wRet;
|
|
UCHAR *szuuid = 0x0;
|
|
wRet = UuidCreate(&uuid);
|
|
if ((RPC_S_OK == wRet) || (RPC_S_UUID_LOCAL_ONLY))
|
|
{
|
|
wRet=UuidToString(&uuid, &szuuid);
|
|
if (RPC_S_OK == wRet)
|
|
LogProc->LogString(TEXT(",%s,\r\n"),szuuid);
|
|
else
|
|
LogProc->LogString(TEXT(",blank,\r\n"));
|
|
}
|
|
else
|
|
LogProc->LogString(TEXT(",blank,\r\n"));
|
|
|
|
HKEY hKey;
|
|
DWORD dwDisp;
|
|
RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\SysParse"), 0, TEXT("SZ_KEY"), 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
|
|
RegSetValueEx(hKey, TEXT("#MachineUuid"), 0, REG_SZ, szuuid, lstrlen((const char *)szuuid) + 1);
|
|
lstrcpy((TCHAR *) szreg, (TCHAR *)szuuid);
|
|
|
|
RegSetValueEx(hOpen, TEXT("#Profile"), 0, REG_SZ, (BYTE*)Profile, lstrlen((const char *)Profile) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#Corp"), 0, REG_SZ, (BYTE*)Corporation, lstrlen((const char *)Corporation) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#UserID"), 0, REG_SZ, (BYTE*)Email, lstrlen((const char *)Email) + 1);
|
|
RegSetValueEx(hOpen, TEXT("##machines_on_profile"), 0, REG_SZ, (BYTE*)NumComp, lstrlen((const char *)NumComp) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#Make"), 0, REG_SZ, (BYTE*)Manufacturer, lstrlen((const char *)Manufacturer) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#Model"), 0, REG_SZ, (BYTE*)Model, lstrlen((const char *)Model) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#Event"), 0, REG_SZ, (BYTE*)BetaID, lstrlen((const char *)BetaID) + 1);
|
|
RegSetValueEx(hOpen, TEXT("#MachineType"), 0, REG_SZ, (BYTE*)MachineType, lstrlen((const char *)MachineType) + 1);
|
|
|
|
if (INVALID_HANDLE_VALUE != hKey )
|
|
RegCloseKey(hKey);
|
|
}
|
|
if (INVALID_HANDLE_VALUE != hOpen)
|
|
RegCloseKey(hOpen);
|
|
|
|
HANDLE hFile;
|
|
DWORD dwBytesWrit;
|
|
hFile = CreateFile(szRegFile, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile!=INVALID_HANDLE_VALUE)
|
|
{
|
|
wsprintf(szfilecont, TEXT("REGEDIT4\r\n\r\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse]\r\n"));
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#MachineUuid\"=\"%s\"\r\n"), szreg);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Profile\"=\"%s\"\r\n"), Profile);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Corp\"=\"%s\"\r\n"), Corporation);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#UserID\"=\"%s\"\r\n"), Email);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"##machines_on_profile\"=\"%s\"\r\n"), NumComp);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Make\"=\"%s\"\r\n"), Manufacturer);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Model\"=\"%s\"\r\n"), Model);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Event\"=\"%s\"\r\n"), SiteID);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Location\"=\"%s\"\r\n"), BetaID);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#MachineType\"=\"%s\"\r\n"), MachineType);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
CloseHandle(hFile);
|
|
}
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, szreg);
|
|
}
|
|
else
|
|
{
|
|
LogProc->LogString(",#MachineUUID,,\r\n");
|
|
UUID uuid;
|
|
LONG wRet;
|
|
UCHAR *szuuid = 0x0;
|
|
wRet = UuidCreate(&uuid);
|
|
if ((RPC_S_OK == wRet) || (RPC_S_UUID_LOCAL_ONLY))
|
|
{
|
|
wRet = UuidToString(&uuid, &szuuid);
|
|
if (RPC_S_OK == wRet)
|
|
LogProc->LogString(",%s,\r\n",szuuid);
|
|
else
|
|
LogProc->LogString(",blank,\r\n");
|
|
}
|
|
else
|
|
LogProc->LogString(",blank,\r\n");
|
|
HKEY hKey;
|
|
DWORD dwDisp;
|
|
TCHAR szFile[MAX_PATH];
|
|
RegCreateKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\SysParse", 0, "SZ_KEY", 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp);
|
|
RegSetValueEx(hKey, "#MachineUuid", 0, REG_SZ, szuuid, lstrlen((const char *)szuuid) + 1);
|
|
RegSetValueEx(hKey, TEXT("#Profile"), 0, REG_SZ, (BYTE*)Profile, lstrlen((const char *)Profile) + 1);
|
|
RegSetValueEx(hKey, TEXT("#Corp"), 0, REG_SZ, (BYTE*)Corporation, lstrlen((const char *)Corporation) + 1);
|
|
RegSetValueEx(hKey, TEXT("#UserID"), 0, REG_SZ, (BYTE*)Email, lstrlen((const char *)Email) + 1);
|
|
RegSetValueEx(hKey, TEXT("##machines_on_profile"), 0, REG_SZ, (BYTE*)NumComp, lstrlen((const char *)NumComp) + 1);
|
|
RegSetValueEx(hKey, TEXT("#Make"), 0, REG_SZ, (BYTE*)Manufacturer, lstrlen((const char *)Manufacturer) + 1);
|
|
RegSetValueEx(hKey, TEXT("#Model"), 0, REG_SZ, (BYTE*)Model, lstrlen((const char *)Model) + 1);
|
|
RegSetValueEx(hKey, TEXT("#Event"), 0, REG_SZ, (BYTE*)BetaID, lstrlen((const char *)BetaID) + 1);
|
|
RegSetValueEx(hKey, TEXT("#MachineType"), 0, REG_SZ, (BYTE*)MachineType, lstrlen((const char *)MachineType) + 1);
|
|
|
|
if (INVALID_HANDLE_VALUE != hKey)
|
|
RegCloseKey(hKey);
|
|
HANDLE hFile;
|
|
DWORD dwBytesWrit;
|
|
TCHAR szfilecont[50000];
|
|
hFile = CreateFile(szRegFile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile!=INVALID_HANDLE_VALUE)
|
|
{
|
|
wsprintf(szfilecont, TEXT("REGEDIT4\r\n\r\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\SysParse]\r\n"));
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#MachineUuid\"=\"%s\"\r\n"), szuuid);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Profile\"=\"%s\"\r\n"), Profile);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Corp\"=\"%s\"\r\n"), Corporation);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#UserID\"=\"%s\"\r\n"), Email);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"##machines_on_profile\"=\"%s\"\r\n"), NumComp);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Make\"=\"%s\"\r\n"), Manufacturer);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Model\"=\"%s\"\r\n"), Model);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Event\"=\"%s\"\r\n"), SiteID);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#Location\"=\"%s\"\r\n"), BetaID);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
wsprintf(szfilecont, TEXT("\"#MachineType\"=\"%s\"\r\n"), MachineType);
|
|
WriteFile(hFile, szfilecont, strlen(szfilecont), &dwBytesWrit, NULL);
|
|
CloseHandle(hFile);
|
|
}
|
|
}
|
|
|
|
LONG wRet;
|
|
UUID uuid;
|
|
UCHAR *szuuid = 0x0;
|
|
LogProc->LogString(",#PassUUID,,\r\n");
|
|
wRet = UuidCreate(&uuid);
|
|
if ((RPC_S_OK == wRet) || (RPC_S_UUID_LOCAL_ONLY))
|
|
{
|
|
wRet = UuidToString(&uuid, &szuuid);
|
|
if (RPC_S_OK == wRet)
|
|
LogProc->LogString(",%s,\r\n",szuuid);
|
|
else
|
|
LogProc->LogString(",blank,\r\n");
|
|
}
|
|
else
|
|
LogProc->LogString(",blank,\r\n");
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteArguments(void)
|
|
{
|
|
LogProc->StripCommas(Profile);
|
|
LogProc->LogString(",#Profile,,\r\n,%s,\r\n",Profile);
|
|
LogProc->StripCommas(Email);
|
|
LogProc->LogString(",#UserID,,\r\n,%s,\r\n",Email);
|
|
LogProc->StripCommas(NumComp);
|
|
LogProc->LogString(",##machines_on_profile,,\r\n,%s,\r\n",NumComp);
|
|
LogProc->StripCommas(Corporation);
|
|
LogProc->LogString(",#Corp,,\r\n,%s,\r\n",Corporation);
|
|
LogProc->StripCommas(Model);
|
|
LogProc->LogString(",#Model,,\r\n,%s,\r\n",Model);
|
|
LogProc->StripCommas(BetaID);
|
|
LogProc->LogString(",#Location,,\r\n,%s,\r\n",BetaID);
|
|
LogProc->LogString(",#BetaID,,\r\n,%s,\r\n",BetaID);
|
|
LogProc->StripCommas(MachineType);
|
|
LogProc->LogString(",#MachineType,,\r\n,%s,\r\n",MachineType);
|
|
LogProc->StripCommas(SiteID);
|
|
LogProc->LogString(",#Event,,\r\n,%s,\r\n",SiteID);
|
|
LogProc->StripCommas(Manufacturer);
|
|
LogProc->LogString(",#Make,,\r\n,%s,\r\n",Manufacturer);
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteFreeDiskSpace(void)
|
|
{
|
|
TCHAR szWindir[MAX_PATH * 4];
|
|
lstrcpy(szWindir, WindowsDirectory);
|
|
if (0 != lstrlen(szWindir) )
|
|
{
|
|
ULARGE_INTEGER uliCaller, uliNumBytes, uliNumFreeBytes;
|
|
HINSTANCE hInst2 = LoadLibraryEx("kernel32.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
|
|
LPFNDLLFUNC1 fProc=(LPFNDLLFUNC1)GetProcAddress(hInst2, "GetDiskFreeSpaceExA");
|
|
if (hInst2 && fProc)
|
|
{
|
|
fProc("c:\\", &uliCaller, &uliNumBytes, &uliNumFreeBytes);
|
|
char szTemp[MAX_PATH * 4];
|
|
strcpy(szTemp, szWindir);
|
|
szTemp[3] = '\0';
|
|
LogProc->LogString(",#WinDir_Free_Space,,\r\n");
|
|
LogProc->StripCommas(szWindir);
|
|
LogProc->LogString(",%s,\r\n", szWindir);
|
|
LogProc->LogString(",%I64d,\r\n", uliNumFreeBytes.QuadPart);
|
|
}
|
|
else
|
|
{
|
|
DWORD dwSPC, dwPBS, dwNFC, dwTNC;
|
|
GetDiskFreeSpace("c:\\", &dwSPC, &dwPBS, &dwNFC, &dwTNC);
|
|
char szTemp[MAX_PATH * 4];
|
|
strcpy(szTemp, szWindir);
|
|
szTemp[3] = '\0';
|
|
GetDiskFreeSpace(szTemp,&dwSPC, &dwPBS, &dwNFC, &dwTNC);
|
|
LogProc->LogString(",#WinDir_Free_Space,,\r\n");
|
|
LogProc->StripCommas(szWindir);
|
|
LogProc->LogString(",%s,\r\n", szWindir);
|
|
LogProc->LogString(",%d,\r\n", dwSPC*dwPBS*dwNFC);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteVolumeType(void)
|
|
{
|
|
TCHAR szWind[MAX_PATH];
|
|
TCHAR szVol[MAX_PATH];
|
|
TCHAR szVolName[MAX_PATH];
|
|
DWORD dwSer, dwLen, dwFlags;
|
|
|
|
lstrcpy(szWind, WindowsDirectory);
|
|
//
|
|
// Lop off all but "%DriveLetter%:\"
|
|
//
|
|
szWind[3] = '\0';
|
|
GetVolumeInformation(szWind, szVol, MAX_PATH, &dwSer, &dwLen, &dwFlags, szVolName, MAX_PATH);
|
|
LogProc->LogString(",#WinDir_Volume_Type,,\r\n");
|
|
LogProc->StripCommas(szVolName);
|
|
LogProc->LogString(",%s,\r\n", szVolName);
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteMemorySize(void)
|
|
{
|
|
LogProc->LogString(",#Total_Memory,,\r\n");
|
|
MEMORYSTATUS MemStat;
|
|
GlobalMemoryStatus(&MemStat);
|
|
LogProc->LogString(",%d,\r\n",MemStat.dwTotalPhys);
|
|
}
|
|
|
|
void CLASS_GeneralInfo::WriteOSVersion(void)
|
|
{
|
|
TCHAR szFullKey[MAX_PATH];
|
|
PTCHAR szProductName = NULL;
|
|
PTCHAR szString = NULL;
|
|
TCHAR szinf[MAX_PATH];
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|
HKEY hKeyReg;
|
|
LPOSVERSIONINFO osv = NULL;
|
|
DWORD dwstringwrit, dwFileSize = 0, dwType, dwProductSize = 0;
|
|
|
|
lstrcpy(szFullKey, TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion"));
|
|
|
|
LogProc->LogString(TEXT(",#OS_Version,,\r\n"));
|
|
|
|
if ((Win2000 != OSVersion) && (NT4 != OSVersion) && (Whistler != OSVersion))
|
|
{
|
|
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGSTR_PATH_SETUP, 0, KEY_READ, &hKeyReg))
|
|
{
|
|
if(ERROR_SUCCESS == RegQueryValueEx(hKeyReg, TEXT("ProductName"), NULL, &dwType, NULL, &dwProductSize))
|
|
szProductName = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwProductSize);
|
|
|
|
if(szProductName)
|
|
{
|
|
RegQueryValueEx(hKeyReg, TEXT("ProductName"), NULL, &dwType, (LPBYTE)szProductName, &dwProductSize);
|
|
}
|
|
|
|
RegCloseKey(hKeyReg);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, szFullKey, 0, KEY_READ, &hKeyReg))
|
|
{
|
|
if(ERROR_SUCCESS == RegQueryValueEx(hKeyReg, TEXT("ProductName"), NULL, &dwType, NULL, &dwProductSize))
|
|
szProductName = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwProductSize);
|
|
|
|
if(szProductName)
|
|
{
|
|
RegQueryValueEx(hKeyReg, TEXT("ProductName"), NULL, &dwType, (LPBYTE)szProductName, &dwProductSize);
|
|
}
|
|
|
|
RegCloseKey(hKeyReg);
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// Ensure there is a value to write, otherwise write a default to avoid parser issues
|
|
//
|
|
if (dwProductSize)
|
|
{
|
|
LogProc->StripCommas(szProductName);
|
|
LogProc->LogString(TEXT(",%s,\r\n"), szProductName);
|
|
}
|
|
else
|
|
{
|
|
if (Win2000 == OSVersion)
|
|
LogProc->LogString(TEXT(",Microsoft Windows 2000,\r\n"));
|
|
else if (Whistler == OSVersion)
|
|
LogProc->LogString(TEXT(",Microsoft Windows Whistler,\r\n"));
|
|
else if (Win95 == OSVersion)
|
|
LogProc->LogString(TEXT(",Microsoft Windows 95,\r\n"));
|
|
else if (Win98 == OSVersion)
|
|
LogProc->LogString(TEXT(",Microsoft Windows 98,\r\n"));
|
|
else if (NT4 == OSVersion)
|
|
LogProc->LogString(TEXT(",Microsoft Windows NT4,\r\n"));
|
|
else
|
|
LogProc->LogString(TEXT(",Unknown,\r\n"));
|
|
}
|
|
|
|
if(szProductName)
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, szProductName);
|
|
|
|
if ( (Win2000 == OSVersion) || (NT4 == OSVersion) )
|
|
{
|
|
LogProc->LogString(",#NTType..\r\n");
|
|
|
|
lstrcpy(szFullKey, TEXT("System\\CurrentControlSet\\Control\\ProductOptions"));
|
|
|
|
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, szFullKey, 0, KEY_READ, &hKeyReg))
|
|
{
|
|
if(ERROR_SUCCESS == RegQueryValueEx(hKeyReg, TEXT("ProductType"), NULL, &dwType, NULL, &dwProductSize))
|
|
szProductName = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwProductSize);
|
|
|
|
if(!szProductName)
|
|
{
|
|
RegCloseKey(hKeyReg);
|
|
LogProc->LogString(",Workstation,\r\n");
|
|
goto GET_PREV_OS;
|
|
}
|
|
|
|
RegQueryValueEx(hKeyReg, TEXT("ProductType"), NULL, &dwType, (LPBYTE)szProductName, &dwProductSize);
|
|
|
|
if(dwProductSize)
|
|
{
|
|
if(ERROR_SUCCESS == RegQueryValueEx(hKeyReg, TEXT("ProductType"), NULL, &dwType, (LPBYTE)szProductName, &dwProductSize))
|
|
{
|
|
LogProc->StripCommas(szProductName);
|
|
LogProc->LogString(",%s,\r\n", szProductName);
|
|
}
|
|
}
|
|
else
|
|
LogProc->LogString(",Workstation,\r\n");
|
|
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, szProductName);
|
|
RegCloseKey(hKeyReg);
|
|
}
|
|
else
|
|
LogProc->LogString(",Workstation,\r\n");
|
|
}
|
|
|
|
GET_PREV_OS:
|
|
//
|
|
// Get the previous OS info, if any
|
|
//
|
|
LogProc->LogString(",#Prev_OS,,\r\n");
|
|
lstrcpy(szinf, WindowsDirectory);
|
|
lstrcat(szinf, TEXT("\\system32\\$winnt$.inf"));
|
|
hFile = CreateFile(szinf, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
|
if (INVALID_HANDLE_VALUE != hFile)
|
|
{
|
|
LogProc->LogString(",Unknown,\r\n");
|
|
|
|
|
|
dwFileSize = GetFileSize(hFile, NULL);
|
|
szString = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize);
|
|
|
|
if(!szString)
|
|
{
|
|
LogProc->LogString(",Unknown,\r\n");
|
|
}
|
|
|
|
if(ReadFile(hFile, szString, dwFileSize, &dwstringwrit, NULL))
|
|
{
|
|
PTCHAR szLoc;
|
|
PTCHAR szLoc2;
|
|
PTCHAR szBuf = NULL;
|
|
TCHAR szFin[MAX_PATH];
|
|
//
|
|
// Find the address for "buildnumber" within $winnt$.inf
|
|
//
|
|
szLoc = strstr(szString, "BuildNumber");
|
|
szBuf = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize);
|
|
|
|
if (szLoc && szBuf)
|
|
{
|
|
//
|
|
// Find the address within that for the first double-quote
|
|
//
|
|
szLoc2 = strstr(szLoc, "\"");
|
|
if (szLoc2)
|
|
{
|
|
//
|
|
// Copy the rest of the string to the buffer
|
|
//
|
|
lstrcpy(szBuf, szLoc2);
|
|
//
|
|
// Just for fun...
|
|
//
|
|
szBuf[0] = '#';
|
|
//
|
|
// Find the last "
|
|
//
|
|
for ( DWORD i = 0; szBuf[i] != '\"'; i++);
|
|
//
|
|
// Terminate the string
|
|
//
|
|
szBuf[i] = '\0';
|
|
//
|
|
// Now, character by character, copy the string to the new buffer - this avoids the # at the beginning
|
|
// of the string
|
|
//
|
|
for (i = 0; i < strlen(szBuf); i++)
|
|
szFin[i] = szBuf[i + 1];
|
|
//
|
|
// Strip any commas and write to the logfile
|
|
//
|
|
LogProc->StripCommas(szFin);
|
|
LogProc->LogString(",%s,\r\n", szFin);
|
|
}
|
|
else
|
|
LogProc->LogString(",Unknown,\r\n");
|
|
}
|
|
else
|
|
LogProc->LogString(",Unknown,\r\n");
|
|
|
|
if(szBuf)
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, szBuf);
|
|
}
|
|
else
|
|
LogProc->LogString(",Unknown,\r\n");
|
|
|
|
|
|
CloseHandle(hFile);
|
|
}
|
|
|
|
if(szString)
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, szString);
|
|
|
|
osv = (LPOSVERSIONINFO)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(OSVERSIONINFO));
|
|
|
|
if(!osv)
|
|
{
|
|
LogProc->LogString(",#OS_Major_Version,,\r\n,Unknown,\r\n" ",#OS_Minor_Version,,\r\n,Unknown,\r\n" ",#OS_Build_Number,,\r\n,Unknown,\r\n" ",#OS_Platform_ID,,\r\n,Unknown,\r\n" ",#OS_Extra_Info,,\r\n,Unknown,\r\n");
|
|
}
|
|
else
|
|
{
|
|
osv->dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
GetVersionEx(osv);
|
|
LogProc->StripCommas(osv->szCSDVersion);
|
|
LogProc->LogString(",#OS_Major_Version,,\r\n,%d,\r\n" ",#OS_Minor_Version,,\r\n,%d,\r\n" ",#OS_Build_Number,,\r\n,%d,\r\n" ",#OS_Platform_ID,,\r\n,%d,\r\n" ",#OS_Extra_Info,,\r\n,%s,\r\n", osv->dwMajorVersion, osv->dwMinorVersion, LOWORD(osv->dwBuildNumber), osv->dwPlatformId, osv->szCSDVersion);
|
|
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, osv);
|
|
}
|
|
}
|
|
|
|
void CLASS_GeneralInfo::CatLogFile(PTCHAR szFile)
|
|
{
|
|
FILE *fFile = NULL;
|
|
FILE *fOutFile = NULL;
|
|
PTCHAR szString = NULL;
|
|
|
|
if( !(fFile = fopen(szFile, "r")))
|
|
return;
|
|
|
|
if( !(fOutFile = fopen(LogProc->szFile, "a+")))
|
|
{
|
|
fclose(fFile);
|
|
return;
|
|
}
|
|
|
|
if( !(szString = (PTCHAR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 11000)))
|
|
{
|
|
fclose(fFile);
|
|
fclose(fOutFile);
|
|
return;
|
|
}
|
|
|
|
int iHold;
|
|
|
|
iHold = fgetc(fFile);
|
|
|
|
while (EOF != iHold)
|
|
{
|
|
fputc(iHold, fOutFile);
|
|
iHold = fgetc(fFile);
|
|
}
|
|
|
|
fclose(fFile);
|
|
fclose(fOutFile);
|
|
HeapFree(GetProcessHeap(), 0, szString);
|
|
}
|
|
|
|
BOOL CLASS_GeneralInfo::LoadResourceFile(PSTR FilePath, PSTR ResName)
|
|
{
|
|
HGLOBAL hObj;
|
|
HRSRC hResource;
|
|
LPSTR lpStr;
|
|
DWORD dwSize = 0;
|
|
DWORD dwBytesWritten = 0;
|
|
char ErrorString[MAX_PATH * 4];
|
|
HANDLE hfFile = INVALID_HANDLE_VALUE;
|
|
|
|
if ( !(hResource = FindResource(NULL, ResName, RT_RCDATA)) )
|
|
return FALSE;
|
|
|
|
if ( !(hObj = LoadResource(NULL,hResource)) )
|
|
return FALSE;
|
|
|
|
if ( !(lpStr = (LPSTR)LockResource(hObj)) )
|
|
return FALSE;
|
|
|
|
if ( !(dwSize = SizeofResource( NULL, hResource)))
|
|
{
|
|
UnlockResource(hObj);
|
|
return FALSE;
|
|
}
|
|
|
|
hfFile = CreateFile(FilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
|
if (hfFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
UnlockResource(hObj);
|
|
return FALSE;
|
|
}
|
|
|
|
if (!WriteFile(hfFile, lpStr, dwSize, &dwBytesWritten, NULL))
|
|
{
|
|
UnlockResource(hObj);
|
|
CloseHandle(hfFile);
|
|
return FALSE;
|
|
}
|
|
|
|
UnlockResource(hObj);
|
|
CloseHandle(hfFile);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
PTCHAR GetUniqueFileName( void )
|
|
{
|
|
MYTIMESTRUCT MyTime;
|
|
DWORD dwLen = MAX_PATH;
|
|
static TCHAR szUniqueFileName[MAX_PATH] = {'\0'};
|
|
|
|
if(!GetComputerName(szUniqueFileName, &dwLen))
|
|
lstrcpy(szUniqueFileName, "ErrorRetrievingComputerName");
|
|
|
|
lstrcat(szUniqueFileName+lstrlen(szUniqueFileName), "_");
|
|
|
|
if(!GetUserName(szUniqueFileName+lstrlen(szUniqueFileName), &dwLen))
|
|
lstrcat(szUniqueFileName, "ErrorRetrievingUsername");
|
|
|
|
FillMyTime(&MyTime);
|
|
|
|
wsprintf(szUniqueFileName+lstrlen(szUniqueFileName), "_%s%s%s%s%s%s%s.Sysparse", MyTime.szMonth, MyTime.szDay, MyTime.szYear, MyTime.szHour, MyTime.szMinute, MyTime.szSecond, MyTime.szMillisecond);
|
|
return(szUniqueFileName);
|
|
}
|
|
|
|
void FillMyTime(MYTIMESTRUCT *MyTime)
|
|
{
|
|
LPSYSTEMTIME lpSystemTime = (LPSYSTEMTIME)malloc(sizeof(LPSYSTEMTIME));
|
|
TCHAR szTemp[MAX_PATH] = {0};
|
|
|
|
GetSystemTime(lpSystemTime);
|
|
if(!lpSystemTime)
|
|
return;
|
|
|
|
if(lpSystemTime->wMonth <= 9)
|
|
{
|
|
lstrcpy(MyTime->szMonth, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMonth);
|
|
lstrcat(MyTime->szMonth, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMonth);
|
|
lstrcpy(MyTime->szMonth, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wDay <= 9)
|
|
{
|
|
lstrcpy(MyTime->szDay, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wDay);
|
|
lstrcat(MyTime->szDay, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wDay);
|
|
lstrcpy(MyTime->szDay, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wYear <= 9)
|
|
{
|
|
lstrcpy(MyTime->szYear, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wYear);
|
|
lstrcat(MyTime->szYear, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wYear);
|
|
lstrcpy(MyTime->szYear, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wHour <= 9)
|
|
{
|
|
lstrcpy(MyTime->szHour, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wHour);
|
|
lstrcat(MyTime->szHour, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wHour);
|
|
lstrcpy(MyTime->szHour, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wMinute <= 9)
|
|
{
|
|
lstrcpy(MyTime->szMinute, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMinute);
|
|
lstrcat(MyTime->szMinute, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMinute);
|
|
lstrcpy(MyTime->szMinute, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wSecond <= 9)
|
|
{
|
|
lstrcpy(MyTime->szSecond, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wSecond);
|
|
lstrcat(MyTime->szSecond, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wSecond);
|
|
lstrcpy(MyTime->szSecond, szTemp);
|
|
}
|
|
|
|
ZeroMemory(szTemp, MAX_PATH * sizeof(TCHAR));
|
|
|
|
if(lpSystemTime->wMilliseconds <= 9)
|
|
{
|
|
lstrcpy(MyTime->szMillisecond, "0");
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMilliseconds);
|
|
lstrcat(MyTime->szMillisecond, szTemp);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(szTemp, "%d", lpSystemTime->wMilliseconds);
|
|
lstrcpy(MyTime->szMillisecond, szTemp);
|
|
}
|
|
if(lpSystemTime)
|
|
free(lpSystemTime);
|
|
}
|