Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
wolInit.cpp
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19// FILE: WOLinit.cpp //////////////////////////////////////////////////////
20// Westwood Online DLL/COM/ initialization/teardown
21// Author: Matthew D. Campbell, December 2001
22
23#ifndef WIN32_LEAN_AND_MEAN
24#define WIN32_LEAN_AND_MEAN
25#endif
26#include <snmp.h>
27#include <winreg.h>
28
29#include <atlbase.h>
30extern CComModule _Module; // Required for COM - must be between atlbase.h and atlcom.h. Funky, no?
31#include <atlcom.h>
32
33#include <stdio.h>
34#include <stdarg.h>
35
36#include "wolSetup.h"
37#include "wolapi/wolapi.h"
38
39unsigned long g_wolapiRegistryVersion = 0;
40unsigned long g_wolapiRealVersion = 0;
41bool g_wolapiInstalled = false;
42char g_wolapiRegFilename[MAX_PATH];
43char g_wolapiRealFilename[MAX_PATH];
44char g_generalsFilename[MAX_PATH];
46
47#define GENERALS_REG_KEY_TOP "HKEY_LOCAL_MACHINE"
48#define GENERALS_REG_KEY_PATH "SOFTWARE\\Westwood\\Generals"
49#define GENERALS_REG_KEY_BOTTOM GENERALS_REG_KEY_PATH "\\"
50#define GENERALS_REG_KEY_VERSION "Version"
51#define GENERALS_REG_KEY_SKU "SKU"
52#define GENERALS_REG_KEY_NAME "Name"
53#define GENERALS_REG_KEY_INSTALLPATH "InstallPath"
54#define GENERALS_REG_KEY_SERIAL "Serial"
55#define GENERALS_REG_KEY GENERALS_REG_KEY_TOP "\\" GENERALS_REG_KEY_BOTTOM
56
57#define WOLAPI_REG_KEY_TOP "HKEY_LOCAL_MACHINE"
58#define WOLAPI_REG_KEY_PATH "SOFTWARE\\Westwood\\WOLAPI"
59#define WOLAPI_REG_KEY_BOTTOM WOLAPI_REG_KEY_PATH "\\"
60#define WOLAPI_REG_KEY_VERSION "Version"
61#define WOLAPI_REG_KEY_INSTALLPATH "InstallPath"
62#define WOLAPI_REG_KEY WOLAPI_REG_KEY_TOP "\\" WOLAPI_REG_KEY_BOTTOM
63
64#define DLL_REG_KEY_TOP "HKEY_CLASSES_ROOT"
65#define DLL_REG_KEY_PATH "CLSID\\{18FD6763-F5EA-4fa5-B2A9-668554152FAE}\\InprocServer32"
66#define DLL_REG_KEY_BOTTOM DLL_REG_KEY_PATH "\\"
67#define DLL_REG_KEY_LOCATION ""
68
70{
71 HKEY handle;
72 unsigned long type;
73 unsigned long size;
74 int returnValue;
75
76 size = sizeof(g_generalsFilename);
77 strcpy(g_generalsFilename, "No install path in registry");
78
79 if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, GENERALS_REG_KEY_PATH, 0, KEY_ALL_ACCESS, &handle ) == ERROR_SUCCESS) {
80
81 returnValue = RegQueryValueEx(handle, GENERALS_REG_KEY_INSTALLPATH, NULL, &type, (unsigned char *) &g_generalsFilename, &size);
82
83 if (returnValue != ERROR_SUCCESS)
84 {
85 strcpy(g_generalsFilename, "No install path in registry");
86 }
87
88 RegCloseKey( handle );
89 }
90
91 size = sizeof(g_generalsSerial);
92 strcpy(g_generalsSerial, "0");
93
94 if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, GENERALS_REG_KEY_PATH, 0, KEY_ALL_ACCESS, &handle ) == ERROR_SUCCESS) {
95
96 returnValue = RegQueryValueEx(handle, GENERALS_REG_KEY_SERIAL, NULL, &type, (unsigned char *) &g_generalsSerial, &size);
97
98 if (returnValue != ERROR_SUCCESS)
99 {
100 strcpy(g_generalsSerial, "0");
101 }
102
103 RegCloseKey( handle );
104 }
105
106 size = sizeof(g_wolapiRegFilename);
107 strcpy(g_wolapiRegFilename, "No install path in registry");
108 g_wolapiInstalled = true;
109
110 if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, WOLAPI_REG_KEY_PATH, 0, KEY_ALL_ACCESS, &handle ) == ERROR_SUCCESS) {
111
112 returnValue = RegQueryValueEx(handle, WOLAPI_REG_KEY_INSTALLPATH, NULL, &type, (unsigned char *) &g_wolapiRegFilename, &size);
113
114 if (returnValue != ERROR_SUCCESS)
115 {
116 strcpy(g_wolapiRegFilename, "No install path in registry");
117 g_wolapiInstalled = false;
118 }
119
120 RegCloseKey( handle );
121 }
122
123 size = sizeof(g_wolapiRealFilename);
124 strcpy(g_wolapiRealFilename, "No wolapi.dll installed");
125
126 if (RegOpenKeyEx( HKEY_CLASSES_ROOT, DLL_REG_KEY_PATH, 0, KEY_ALL_ACCESS, &handle ) == ERROR_SUCCESS) {
127
128 returnValue = RegQueryValueEx(handle, DLL_REG_KEY_LOCATION, NULL, &type, (unsigned char *) &g_wolapiRealFilename, &size);
129
130 if (returnValue != ERROR_SUCCESS)
131 {
132 strcpy(g_wolapiRealFilename, "No wolapi.dll installed");
133 g_wolapiInstalled = false;
134 }
135
136 RegCloseKey( handle );
137 }
138}
139
140void setupGenerals( const char *genPath, const char *genSerial )
141{
142 HKEY handle;
143 unsigned long type;
144 unsigned long returnValue;
145 int size;
146
147 if (RegCreateKeyEx( HKEY_LOCAL_MACHINE, GENERALS_REG_KEY_PATH, 0, "REG_NONE", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &handle, NULL ) == ERROR_SUCCESS) {
148
149 type = REG_SZ;
150 size = strlen(genPath)+1;
151 returnValue = RegSetValueEx(handle, GENERALS_REG_KEY_INSTALLPATH, 0, type, (unsigned char *) genPath, size);
152
153 size = strlen(genSerial)+1;
154 returnValue = RegSetValueEx(handle, GENERALS_REG_KEY_SERIAL, 0, type, (unsigned char *) genSerial, size);
155
156 size = strlen("Generals")+1;
157 returnValue = RegSetValueEx(handle, GENERALS_REG_KEY_NAME, 0, type, (unsigned char *) "Generals", size);
158
159 type = REG_DWORD;
160 size = sizeof(DWORD);
161 unsigned long value = 65536;
162 returnValue = RegSetValueEx(handle, GENERALS_REG_KEY_VERSION, 0, type, (unsigned char *) &value, size);
163 value = 12544;
164 returnValue = RegSetValueEx(handle, GENERALS_REG_KEY_SKU, 0, type, (unsigned char *) &value, size);
165
166 RegCloseKey( handle );
167 }
168
169}
170
171
176class OLEInitializer
177{
178 public:
179 OLEInitializer() { OleInitialize(NULL); }
180 ~OLEInitializer() { OleUninitialize(); }
181};
183CComModule _Module;
184
186
192{
193 // Initialize this instance
194 _Module.Init(NULL, g_hInst);
195
196 // Create the WOLAPI instance
197 CoCreateInstance(CLSID_Chat, NULL, CLSCTX_INPROC_SERVER, \
198 IID_IChat, (void**)&g_pChat);
199
200 if (g_pChat)
201 {
202 // Grab versions
203 g_pChat->GetVersion(&g_wolapiRealVersion);
204
205 // Release everything
206 g_pChat->Release();
207
208 g_wolapiInstalled = true;
209 }
210
211 _Module.Term();
212
213 // Grab path info from registry
215
216 return;
217}
218
#define NULL
Definition BaseType.h:92
void const char * value
CComModule _Module
Definition wolInit.cpp:183
unsigned long DWORD
Definition bittype.h:57
OLEInitializer g_OLEInitializer
char g_generalsSerial[1024]
Definition wolInit.cpp:45
unsigned long g_wolapiRealVersion
Definition wolInit.cpp:40
unsigned long g_wolapiRegistryVersion
Definition wolInit.cpp:39
#define GENERALS_REG_KEY_PATH
Generals registry key.
Definition wolInit.cpp:48
void getPathsFromRegistry(void)
Definition wolInit.cpp:69
#define GENERALS_REG_KEY_INSTALLPATH
Install path registry key.
Definition wolInit.cpp:53
void setupGenerals(const char *genPath, const char *genSerial)
Definition wolInit.cpp:140
#define GENERALS_REG_KEY_NAME
Product name registry key.
Definition wolInit.cpp:52
#define GENERALS_REG_KEY_VERSION
Version registry key.
Definition wolInit.cpp:50
#define GENERALS_REG_KEY_SKU
SKU registry key.
Definition wolInit.cpp:51
void checkInstalledWolapiVersion(void)
Definition wolInit.cpp:191
#define GENERALS_REG_KEY_SERIAL
Serial # registry key.
Definition wolInit.cpp:54
char g_wolapiRegFilename[MAX_PATH]
Definition wolInit.cpp:42
#define DLL_REG_KEY_PATH
WOLAPI registry key.
Definition wolInit.cpp:65
#define WOLAPI_REG_KEY_PATH
WOLAPI registry key.
Definition wolInit.cpp:58
char g_wolapiRealFilename[MAX_PATH]
Definition wolInit.cpp:43
#define WOLAPI_REG_KEY_INSTALLPATH
Install path registry key.
Definition wolInit.cpp:61
#define DLL_REG_KEY_LOCATION
Version registry key.
Definition wolInit.cpp:67
char g_generalsFilename[MAX_PATH]
Definition wolInit.cpp:44
IChat * g_pChat
Definition wolInit.cpp:185
bool g_wolapiInstalled
Definition wolInit.cpp:41
HINSTANCE g_hInst
Definition wolSetup.cpp:55
EXTERN_C const IID IID_IChat
Definition wolapi.h:626
EXTERN_C const CLSID CLSID_Chat
Definition wolapi.h:5441
interface IChat IChat
Definition wolapi.h:72