ReactOS  0.4.13-dev-563-g0561610
CConfiguration.cpp
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Automatic Testing Utility
3  * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4  * PURPOSE: Class for managing all the configuration parameters
5  * COPYRIGHT: Copyright 2009-2011 Colin Finck (colin@reactos.org)
6  */
7 
8 #include "precomp.h"
9 
10 #define CONFIGURATION_FILENAMEA "rosautotest.ini"
11 #define CONFIGURATION_FILENAMEW L"rosautotest.ini"
12 
14 
19  : m_CrashRecovery(false),
20  m_IsInteractive(false),
21  m_PrintToConsole(true),
22  m_Shutdown(false),
23  m_Submit(false)
24 {
25  WCHAR WindowsDirectory[MAX_PATH];
26  WCHAR Interactive[32];
27 
28  /* Check if we are running under ReactOS from the SystemRoot directory */
29  if(!GetWindowsDirectoryW(WindowsDirectory, MAX_PATH))
30  FATAL("GetWindowsDirectoryW failed\n");
31 
32  m_IsReactOS = !_wcsnicmp(&WindowsDirectory[3], L"reactos", 7);
33 
34  if(GetEnvironmentVariableW(L"WINETEST_INTERACTIVE", Interactive, _countof(Interactive)))
36 }
37 
47 void
49 {
50  /* Parse the command line arguments */
51  for(int i = 1; i < argc; i++)
52  {
53  if(argv[i][0] == '-' || argv[i][0] == '/')
54  {
55  switch(argv[i][1])
56  {
57  case 'c':
58  ++i;
60  break;
61 
62  case 'n':
63  m_PrintToConsole = false;
64  break;
65 
66  case 'r':
67  m_CrashRecovery = true;
68  break;
69 
70  case 's':
71  m_Shutdown = true;
72  break;
73 
74  case 'w':
75  m_Submit = true;
76  break;
77 
78  default:
80  }
81  }
82  else
83  {
84  /* Which parameter is this? */
85  if(m_Module.empty())
86  {
87  /* Copy the parameter */
88  m_Module = argv[i];
89  }
90  else if(m_Test.empty())
91  {
92  /* Copy the parameter converted to ASCII */
94  }
95  else
96  {
98  }
99  }
100  }
101 
102  /* The /r and /w options shouldn't be used in conjunction */
105 }
106 
110 void
112 {
113  char ProductType;
114  GETSYSINFO GetSysInfo;
115  HMODULE hKernel32;
116  OSVERSIONINFOEXW os;
118  SYSTEM_INFO si;
119 
120  /* Get the build from the define */
121  ss << "&revision=";
122  ss << KERNEL_VERSION_COMMIT_HASH;
123 
124  ss << "&platform=";
125 
126  if(m_IsReactOS)
127  {
128  ss << "reactos";
129  }
130  else
131  {
132  /* No, then use the info from GetVersionExW */
133  os.dwOSVersionInfoSize = sizeof(os);
134 
136  FATAL("GetVersionExW failed\n");
137 
138  if(os.dwMajorVersion < 5)
139  EXCEPTION("Application requires at least Windows 2000!\n");
140 
141  if(os.wProductType == VER_NT_WORKSTATION)
142  ProductType = 'w';
143  else
144  ProductType = 's';
145 
146  /* Print all necessary identification information into the Platform string */
147  ss << os.dwMajorVersion << '.'
148  << os.dwMinorVersion << '.'
149  << os.dwBuildNumber << '.'
150  << os.wServicePackMajor << '.'
151  << os.wServicePackMinor << '.'
152  << ProductType << '.';
153  }
154 
155  /* We also need to know about the processor architecture.
156  To retrieve this information accurately, check whether "GetNativeSystemInfo" is exported and use it then, otherwise fall back to "GetSystemInfo". */
157  hKernel32 = GetModuleHandleW(L"KERNEL32.DLL");
158  GetSysInfo = (GETSYSINFO)GetProcAddress(hKernel32, "GetNativeSystemInfo");
159 
160  if(!GetSysInfo)
161  GetSysInfo = (GETSYSINFO)GetProcAddress(hKernel32, "GetSystemInfo");
162 
163  GetSysInfo(&si);
165 
167 }
168 
174 void
176 {
177  DWORD Length;
178  string Value;
179  WCHAR ConfigFile[MAX_PATH];
180 
181  /* Most values are only needed if we're going to submit anything */
182  if(m_Submit)
183  {
184  /* Build the path to the configuration file from the application's path */
185  GetModuleFileNameW(NULL, ConfigFile, MAX_PATH);
186  Length = wcsrchr(ConfigFile, '\\') - ConfigFile + 1;
187  wcscpy(&ConfigFile[Length], CONFIGURATION_FILENAMEW);
188 
189  /* Check if it exists */
191  EXCEPTION("Missing \"" CONFIGURATION_FILENAMEA "\" configuration file!\n");
192 
193  /* Get the user name */
194  m_AuthenticationRequestString = "&sourceid=";
195  Value = GetINIValue(L"Login", L"SourceID", ConfigFile);
196 
197  if(Value.empty())
198  EXCEPTION("SourceID is missing in the configuration file\n");
199 
201 
202  /* Get the password */
203  m_AuthenticationRequestString += "&password=";
204  Value = GetINIValue(L"Login", L"Password", ConfigFile);
205 
206  if(Value.empty())
207  EXCEPTION("Password is missing in the configuration file\n");
208 
210 
211  /* If we don't have any Comment string yet, try to find one in the INI file */
212  if(m_Comment.empty())
213  m_Comment = GetINIValue(L"Submission", L"Comment", ConfigFile);
214  }
215 }
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2327
#define VER_NT_WORKSTATION
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:607
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:265
#define FATAL(Message)
Definition: precomp.h:57
static int argc
Definition: ServiceArgs.c:12
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
void(WINAPI * GETSYSINFO)(LPSYSTEM_INFO)
#define _countof(array)
Definition: fontsub.cpp:30
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define argv
Definition: mplay32.c:18
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
Definition: version.c:37
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2351
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
string m_SystemInfoRequestString
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:802
smooth NULL
Definition: ftsmooth.c:416
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(_In_z_ const wchar_t *_Str, _In_ wchar_t _Ch)
void ParseParameters(int argc, wchar_t *argv[])
#define EXCEPTION(Message)
Definition: precomp.h:56
void GetConfigurationFromFile()
string UnicodeToAscii(PCWSTR UnicodeString)
Definition: tools.cpp:261
ULONG dwMajorVersion
Definition: rtltypes.h:243
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
string EscapeString(const char *Input)
Definition: tools.cpp:24
unsigned long DWORD
Definition: ntddk_ex.h:95
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
#define false
Definition: stdbool.h:38
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
ULONG dwBuildNumber
Definition: rtltypes.h:245
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName)
Definition: tools.cpp:187
struct _SYSTEM_INFO * LPSYSTEM_INFO
WORD wProcessorArchitecture
Definition: winbase.h:1122
ULONG dwMinorVersion
Definition: rtltypes.h:244
#define CONFIGURATION_FILENAMEW
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:845
#define GetProcAddress(x, y)
Definition: compat.h:410
#define ss
Definition: i386-dis.c:432
#define CONFIGURATION_FILENAMEA
#define GetEnvironmentVariableW(x, y, z)
Definition: compat.h:412
#define true
Definition: stdbool.h:37
string m_AuthenticationRequestString
void GetSystemInformation()