ReactOS 0.4.17-dev-116-ga4b6fe9
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#include <versionhelpers.h>
10
11#define CONFIGURATION_FILENAME "rosautotest.ini"
12
13static void (WINAPI *pGetSystemInfo)(LPSYSTEM_INFO);
14static void(NTAPI *pRtlGetVersion)(RTL_OSVERSIONINFOEXW *);
15
16
21 : m_CrashRecovery(false),
22 m_IsInteractive(false),
23 m_PrintToConsole(true),
24 m_RepeatCount(1),
25 m_Shutdown(false),
26 m_Submit(false),
27 m_ListModules(false)
28{
30
31 /* Check if we are running under ReactOS by calling our versionhelper function.
32 We cannot use the name of the SystemRoot folder, because bootcdregtest is using "c:\Windows".
33 Note: "IsReactOS()" without "::" would resolve to CConfiguration::IsReactOS(). */
35
36 if(GetEnvironmentVariableW(L"WINETEST_INTERACTIVE", Interactive, _countof(Interactive)))
38}
39
49void
51{
52 /* Parse the command line arguments */
53 for(int i = 1; i < argc; i++)
54 {
55 if(argv[i][0] == '-' || argv[i][0] == '/')
56 {
57 unsigned long tmp_RepeatCount;
58
59 switch(argv[i][1])
60 {
61 case 'c':
62 ++i;
63 if (i >= argc)
64 {
66 }
67
69 break;
70
71 case 'n':
72 m_PrintToConsole = false;
73 break;
74
75 case 'r':
76 m_CrashRecovery = true;
77 break;
78
79 case 's':
80 m_Shutdown = true;
81 break;
82
83 case 'w':
84 m_Submit = true;
85 break;
86
87 case 't':
88 ++i;
89 if (i >= argc)
90 {
92 }
93
94 tmp_RepeatCount = wcstoul(argv[i], NULL, 10);
95
96 if (tmp_RepeatCount == 0 || tmp_RepeatCount > 10000)
97 {
99 }
100
101 m_RepeatCount = tmp_RepeatCount;
102 break;
103
104 case 'l':
105 m_ListModules = true;
106 break;
107
108 default:
110 }
111 }
112 else
113 {
114 /* Which parameter is this? */
115 if(m_Module.empty())
116 {
117 /* Copy the parameter */
118 m_Module = argv[i];
119 }
120 else if(m_Test.empty())
121 {
122 /* Copy the parameter converted to ASCII */
124 }
125 else
126 {
128 }
129 }
130 }
131
132 /* The /r and /w options shouldn't be used in conjunction */
135}
136
140void
142{
143 char ProductType;
146
147 /* Get the build from the define */
148 ss << "&revision=";
149 ss << KERNEL_VERSION_COMMIT_HASH;
150
151 ss << "&platform=";
152
153 if(m_IsReactOS)
154 {
155 ss << "reactos";
156 }
157 else
158 {
159 RTL_OSVERSIONINFOEXW rtlinfo = {0};
160 /* No, then use the info from GetVersionExW */
161 rtlinfo.dwOSVersionInfoSize = sizeof(rtlinfo);
162
163 if (!pRtlGetVersion)
164 {
165 HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll");
166 pRtlGetVersion = (decltype(pRtlGetVersion))GetProcAddress(hNtdll, "RtlGetVersion");
167 }
168
169 pRtlGetVersion(&rtlinfo);
170
171 if (rtlinfo.dwMajorVersion < 5)
172 EXCEPTION("Application requires at least Windows 2000!\n");
173
174 if (rtlinfo.wProductType == VER_NT_WORKSTATION)
175 ProductType = 'w';
176 else
177 ProductType = 's';
178
179 /* Print all necessary identification information into the Platform string */
180 ss << rtlinfo.dwMajorVersion << '.'
181 << rtlinfo.dwMinorVersion << '.'
182 << rtlinfo.dwBuildNumber << '.'
183 << rtlinfo.wServicePackMajor << '.'
184 << rtlinfo.wServicePackMinor << '.'
185 << ProductType << '.';
186 }
187
188 /* We also need to know about the processor architecture.
189 To retrieve this information accurately, check whether "GetNativeSystemInfo" is exported and use it then, otherwise fall back to "GetSystemInfo". */
190 if (!pGetSystemInfo)
191 {
192 HMODULE hKernel32 = GetModuleHandleW(L"KERNEL32.DLL");
193 pGetSystemInfo = (decltype(pGetSystemInfo))GetProcAddress(hKernel32, "GetNativeSystemInfo");
194
195 if (!pGetSystemInfo)
196 pGetSystemInfo = GetSystemInfo;
197 }
198
199 pGetSystemInfo(&si);
201
203}
204
210void
212{
214 string Value;
215 WCHAR ConfigFile[MAX_PATH];
216
217 /* Most values are only needed if we're going to submit anything */
218 if(m_Submit)
219 {
220 /* Build the path to the configuration file from the application's path */
221 GetModuleFileNameW(NULL, ConfigFile, MAX_PATH);
222 Length = wcsrchr(ConfigFile, '\\') - ConfigFile + 1;
224
225 /* Check if it exists */
227 EXCEPTION("Missing \"" CONFIGURATION_FILENAME "\" configuration file!\n");
228
229 /* Get the user name */
230 m_AuthenticationRequestString = "&sourceid=";
231 Value = GetINIValue(L"Login", L"SourceID", ConfigFile);
232
233 if(Value.empty())
234 EXCEPTION("SourceID is missing in the configuration file\n");
235
237
238 /* Get the password */
239 m_AuthenticationRequestString += "&password=";
240 Value = GetINIValue(L"Login", L"Password", ConfigFile);
241
242 if(Value.empty())
243 EXCEPTION("Password is missing in the configuration file\n");
244
246
247 /* If we don't have any Comment string yet, try to find one in the INI file */
248 if(m_Comment.empty())
249 m_Comment = GetINIValue(L"Submission", L"Comment", ConfigFile);
250 }
251}
#define CONFIGURATION_FILENAME
unsigned long m_RepeatCount
void GetSystemInformation()
void GetConfigurationFromFile()
bool IsReactOS() const
string m_SystemInfoRequestString
void ParseParameters(int argc, wchar_t *argv[])
string m_AuthenticationRequestString
#define NULL
Definition: types.h:112
#define wcsrchr
Definition: compat.h:16
#define GetEnvironmentVariableW(x, y, z)
Definition: compat.h:755
#define GetProcAddress(x, y)
Definition: compat.h:753
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:636
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
Definition: sysinfo.c:143
MonoAssembly int argc
Definition: metahost.c:107
_ACRTIMP __msvcrt_ulong __cdecl wcstoul(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2912
_ACRTIMP int __cdecl _wtoi(const wchar_t *)
Definition: wcs.c:2773
#define true
Definition: stdbool.h:24
#define false
Definition: stdbool.h:25
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
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
#define ss
Definition: i386-dis.c:441
#define TEXT(s)
Definition: k32.h:28
HANDLE hKernel32
Definition: locale.c:13
string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName)
Definition: tools.cpp:187
#define EXCEPTION(Message)
Definition: precomp.h:58
string UnicodeToAscii(PCWSTR UnicodeString)
Definition: tools.cpp:261
string EscapeString(const char *Input)
Definition: tools.cpp:24
static HMODULE hNtdll
Definition: integrity.c:31
static SYSTEM_INFO si
Definition: virtual.c:39
#define argv
Definition: mplay32.c:18
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
short WCHAR
Definition: pedump.c:58
@ Interactive
Definition: ntsecapi.h:289
wcscpy
#define _countof(array)
Definition: sndvol32.h:70
ULONG dwMajorVersion
Definition: rtltypes.h:270
ULONG dwMinorVersion
Definition: rtltypes.h:271
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:269
USHORT wServicePackMinor
Definition: rtltypes.h:276
UCHAR wProductType
Definition: rtltypes.h:278
ULONG dwBuildNumber
Definition: rtltypes.h:272
USHORT wServicePackMajor
Definition: rtltypes.h:275
WORD wProcessorArchitecture
Definition: winbase.h:894
#define NTAPI
Definition: typedefs.h:36
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
struct _SYSTEM_INFO * LPSYSTEM_INFO
#define WINAPI
Definition: msvc.h:6
#define VER_NT_WORKSTATION