Skip to content

Instantly share code, notes, and snippets.

@DarkLotus
Last active June 20, 2020 06:22
Show Gist options
  • Select an option

  • Save DarkLotus/024a0b58e4f6b7a6597f722f3b1c934c to your computer and use it in GitHub Desktop.

Select an option

Save DarkLotus/024a0b58e4f6b7a6597f722f3b1c934c to your computer and use it in GitHub Desktop.
// this is onyl func that calls the below func, and this func is called from WinMain.
//the pointer unk_A1BB38 has no other refs either than this func.
LONG sub_549470()
{
LONG result; // eax@1
struct _TIME_ZONE_INFORMATION v1; // [sp+0h] [bp-B0h]@1
result = GetTimeZoneInformation(&v1);
if ( result != -1 )
{
result = -2004318071 * v1.Bias;
dword_A1BC4C = v1.Bias / 60;
}
if ( byte_709362 )
{
SendClientInfo(&unk_A1BB38);
result = (LONG)sub_549290();
}
return result;
}
unsigned int __cdecl SendClientInfo(void *a1)
{
unsigned int result; // eax@1
HKEY v2; // ST1C_4@6
bool v3; // zf@7
DWORD v4; // ecx@7
DWORD v5; // edx@7
double v6; // st7@12
HDC v7; // esi@12
int v8; // eax@12
LSTATUS v9; // eax@12
char *v10; // edi@12
_WORD *v11; // eax@18
__int16 v12; // cx@18
const char *v13; // eax@19
signed int i; // esi@19
DWORD v15; // eax@24
char *v16; // ecx@25
CHAR v17; // al@27
HANDLE v18; // esi@29
BOOL v19; // edi@30
int v20; // edi@37
_DWORD *v21; // esi@37
_BYTE *v22; // esi@44
HKEY v23; // ecx@47
HKEY v24; // edx@51
HANDLE v25; // eax@57
void *v26; // esi@57
DWORD v27; // edi@58
HANDLE v28; // eax@61
void *v29; // esi@61
DWORD v30; // edi@62
HANDLE v31; // eax@65
void *v32; // esi@65
DWORD v33; // edi@66
FARPROC v34; // esi@71
_DWORD *v35; // eax@71
HMODULE v36; // eax@71
char *v37; // eax@82
char v38; // cl@83
_DWORD *v39; // esi@87
int v40; // ecx@87
HMODULE v41; // eax@94
FARPROC v42; // eax@95
int v43; // eax@95
char *v44; // eax@97
char v45; // cl@98
_DWORD *v46; // eax@103
int v47; // edx@103
signed int j; // esi@106
void (__stdcall *v49)(HKEY); // esi@114
_DWORD *v50; // eax@124
void *v51; // esi@141
unsigned int v52; // eax@141
double v53; // st7@142
double v54; // st7@143
int v55; // [sp+8h] [bp-4Ch]@1
int v56; // [sp+18h] [bp-3Ch]@71
BYTE v57[4]; // [sp+1Ch] [bp-38h]@117
HMODULE hLibModule; // [sp+20h] [bp-34h]@71
HKEY v59; // [sp+24h] [bp-30h]@18
void *v60; // [sp+28h] [bp-2Ch]@1
DWORD BytesReturned; // [sp+2Ch] [bp-28h]@30
BYTE Data[4]; // [sp+30h] [bp-24h]@3
DWORD cbData; // [sp+34h] [bp-20h]@3
HKEY phkResult; // [sp+38h] [bp-1Ch]@3
unsigned __int16 v65; // [sp+3Eh] [bp-16h]@12
HKEY hKey; // [sp+40h] [bp-14h]@12
int *v67; // [sp+44h] [bp-10h]@1
int v68; // [sp+50h] [bp-4h]@12
struct _OSVERSIONINFOA VersionInformation; // [sp+54h] [bp+0h]@7
struct _SYSTEM_INFO SystemInfo; // [sp+E8h] [bp+94h]@12
int v71; // [sp+10Ch] [bp+B8h]@71
__int16 v72; // [sp+110h] [bp+BCh]@71
__int16 v73; // [sp+112h] [bp+BEh]@71
char v74; // [sp+114h] [bp+C0h]@71
char v75; // [sp+115h] [bp+C1h]@71
char v76; // [sp+116h] [bp+C2h]@71
char v77; // [sp+117h] [bp+C3h]@71
char v78; // [sp+118h] [bp+C4h]@71
char v79; // [sp+119h] [bp+C5h]@71
char v80; // [sp+11Ah] [bp+C6h]@71
char v81; // [sp+11Bh] [bp+C7h]@71
int OutBuffer; // [sp+11Ch] [bp+C8h]@30
char v83; // [sp+4D0h] [bp+47Ch]@96
_BYTE v84[3]; // [sp+4D1h] [bp+47Dh]@99
char v85; // [sp+4ECh] [bp+498h]@81
char v86; // [sp+6D0h] [bp+67Ch]@100
char v87; // [sp+6ECh] [bp+698h]@82
_BYTE v88[3]; // [sp+6EDh] [bp+699h]@84
int v89; // [sp+8F4h] [bp+8A0h]@87
int v90; // [sp+8F8h] [bp+8A4h]@87
int v91; // [sp+8FCh] [bp+8A8h]@103
char Src; // [sp+91Ch] [bp+8C8h]@48
CHAR SubKey; // [sp+920h] [bp+8CCh]@108
char v94; // [sp+A1Fh] [bp+9CBh]@108
CHAR FileName[8]; // [sp+A20h] [bp+9CCh]@12
v67 = &v55;
v60 = a1;
memset(a1, 0, 0x114u);
result = sub_547F00();
if ( result >= 0x15 )
{
*((_DWORD *)a1 + 1) = result;
return result;
}
sub_547F80(0x15u);
sub_547F80(0x16u);
phkResult = 0;
*(_DWORD *)Data = 0;
cbData = 4;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &phkResult) )
{
if ( RegQueryValueExA(phkResult, "UniqueInstanceId", 0, 0, Data, &cbData) )
{
*(_DWORD *)Data = _time64(0);
RegSetValueExA(phkResult, "UniqueInstanceId", 0, 4u, Data, 4u);
}
v2 = phkResult;
*((_DWORD *)a1 + 1) = *(_DWORD *)Data;
RegCloseKey(v2);
}
sub_547F80(0x17u);
memset(&VersionInformation, 0, 0x94u);
VersionInformation.dwOSVersionInfoSize = 148;
GetVersionExA(&VersionInformation);
v3 = VersionInformation.dwMajorVersion == 4;
v4 = VersionInformation.dwMinorVersion;
v5 = VersionInformation.dwBuildNumber;
*((_DWORD *)a1 + 2) = VersionInformation.dwMajorVersion;
*((_DWORD *)a1 + 3) = v4;
*((_DWORD *)a1 + 4) = v5;
if ( v3 && (!v4 || v4 == 10 || v4 == 90) )
*((_WORD *)a1 + 9) = 0;
sub_547F80(0x18u);
GlobalMemoryStatus((LPMEMORYSTATUS)&SystemInfo.dwPageSize);
v6 = ceil((double)(unsigned int)SystemInfo.lpMaximumApplicationAddress * 0.0000002384185791015625);
cbData = v65 | 0xC00;
*(_QWORD *)FileName = (signed __int64)v6;
*((_DWORD *)a1 + 10) = 4 * (unsigned __int64)(signed __int64)v6;
sub_547F80(0x19u);
*((_DWORD *)a1 + 11) = GetSystemMetrics(0);
*((_DWORD *)a1 + 12) = GetSystemMetrics(1);
v7 = GetDC(0);
cbData = GetDeviceCaps(v7, 14);
v8 = GetDeviceCaps(v7, 12);
*((_DWORD *)v60 + 13) = v8 * cbData;
ReleaseDC(0, v7);
sub_547F80(0x1Au);
v68 = 8;
hKey = 0;
v9 = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\DirectX", 0, 0x20019u, &hKey);
v10 = (char *)v60;
if ( !v9 )
{
if ( !*((_WORD *)v60 + 28) )
{
cbData = 79;
memset(&VersionInformation.szCSDVersion[48], 0, 0x50u);
if ( !RegQueryValueExA(hKey, "Version", 0, 0, (LPBYTE)&VersionInformation.szCSDVersion[48], &cbData) )
sscanf(&VersionInformation.szCSDVersion[48], "%*lu.%lu.%lu", v10 + 56, v10 + 58);
}
RegCloseKey(hKey);
}
if ( !*((_WORD *)v10 + 28) )
{
v59 = 0;
cbData = 0;
sub_547170((int)&v59, (int)&cbData, &VersionInformation);
v11 = v60;
v12 = (unsigned __int8)v59;
*((_WORD *)v60 + 28) = BYTE1(v59);
v11[29] = v12;
}
sub_547F80(0x1Bu);
v68 = 10;
*(_DWORD *)Data = 0;
v13 = (const char *)sub_575C80();
strncpy((char *)Data, v13, 4u);
for ( i = 0; i < 3; ++i )
Data[i] = tolower((char)Data[i]);
Data[3] = 0;
sub_5D2C40((char *)v60 + 204, Data, 3);
cbData = 28;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u);
RegCloseKey(hKey);
}
v68 = 12;
v15 = GetLogicalDriveStringsA(0x69u, &VersionInformation.szCSDVersion[20]);
VersionInformation.szCSDVersion[125] = 0;
if ( v15 )
{
v16 = &VersionInformation.szCSDVersion[20];
cbData = (DWORD)&VersionInformation.szCSDVersion[v15 + 20];
while ( 1 )
{
v59 = (HKEY)v16;
if ( (unsigned int)v16 >= cbData )
break;
v17 = toupper(*v16);
if ( v17 != 65 && v17 != 66 )
{
*(_DWORD *)FileName = 1546542172;
FileName[4] = v17;
FileName[5] = 58;
FileName[6] = 0;
v18 = CreateFileA(FileName, 0xC0000000, 3u, 0, 3u, 0, 0);
if ( v18 != (HANDLE)-1 )
{
BytesReturned = 0;
v19 = DeviceIoControl(v18, 0x2D0C04u, 0, 0, &OutBuffer, 0x800u, &BytesReturned, 0);
CloseHandle(v18);
if ( v19 )
{
if ( OutBuffer == 51 )
{
byte_A1BC03 |= 0x10u;
goto LABEL_35;
}
}
}
}
v16 = (char *)v59 + strlen((const char *)v59) + 1;
}
}
byte_A1BC03 &= 0xEFu;
LABEL_35:
cbData = 29;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u);
RegCloseKey(hKey);
}
v68 = 14;
GetSystemInfo(&SystemInfo);
v20 = (int)v60;
v21 = (char *)v60 + 24;
if ( SystemInfo.dwProcessorType == 386 )
{
*v21 = 3;
}
else if ( SystemInfo.dwProcessorType == 486 )
{
*v21 = 4;
}
else
{
sub_5476F0((char *)v60 + 20, (char *)v60 + 24, (char *)v60 + 28);
if ( *(_BYTE *)(v20 + 20) )
goto LABEL_44;
*v21 = 5;
}
*(_BYTE *)(v20 + 20) = 1;
*(_DWORD *)(v20 + 28) = 0;
LABEL_44:
*(_DWORD *)(v20 + 32) = sub_547910(*v21 >= 5u);
*(_BYTE *)(v20 + 36) = SystemInfo.dwNumberOfProcessors;
v22 = v60;
cbData = 30;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u);
RegCloseKey(hKey);
}
v68 = 16;
*(_DWORD *)Data = 0;
cbData = sub_559E20(0);
v22[200] = sub_547BE0();
v22[201] = 2;
if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online\\Ultima Online", 0, 0x20019u, (PHKEY)Data) )
{
sub_55A0C0(&Src, 260);
if ( sub_55AE40(&Src, "client.exe") )
v22[202] |= 2u;
}
else
{
v23 = *(HKEY *)Data;
v22[202] |= 2u;
RegCloseKey(v23);
}
if ( RegOpenKeyExA(
HKEY_LOCAL_MACHINE,
"SOFTWARE\\Origin Worlds Online\\Ultima Online Third Dawn",
0,
0x20019u,
(PHKEY)Data) )
{
sub_55A0C0(&Src, 260);
if ( sub_55AE40(&Src, "uotd.exe") )
v22[202] |= 4u;
}
else
{
v24 = *(HKEY *)Data;
v22[202] |= 4u;
RegCloseKey(v24);
}
if ( sub_55AE40((void *)cbData, "map0.mul") == 0 )
byte_A1BC03 |= 1u;
else
byte_A1BC03 &= 0xFEu;
v25 = CreateFileA("uo.exe", 0x80000000, 0, 0, 3u, 0, 0);
v26 = v25;
if ( v25 != (HANDLE)-1 && (v27 = GetFileSize(v25, 0), CloseHandle(v26), v27 == 53248) )
byte_A1BC03 &= 0xFDu;
else
byte_A1BC03 |= 2u;
v28 = CreateFileA("uopatch.exe", 0x80000000, 0, 0, 3u, 0, 0);
v29 = v28;
if ( v28 != (HANDLE)-1 && (v30 = GetFileSize(v28, 0), CloseHandle(v29), v30 == 266240) )
byte_A1BC03 &= 0xFBu;
else
byte_A1BC03 |= 4u;
v31 = CreateFileA("patchw32.dll", 0x80000000, 0, 0, 3u, 0, 0);
v32 = v31;
if ( v31 != (HANDLE)-1 && (v33 = GetFileSize(v31, 0), CloseHandle(v32), v33 == 202240) )
byte_A1BC03 &= 0xF7u;
else
byte_A1BC03 |= 8u;
cbData = 31;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&cbData, 4u);
RegCloseKey(hKey);
}
v78 = -105;
v79 = -105;
v34 = 0;
v68 = 18;
v56 = 0;
cbData = 0;
v71 = 367419072;
v72 = 15260;
v73 = 4562;
v74 = -71;
v75 = 47;
v76 = 0;
v77 = 96;
v80 = -22;
v81 = 91;
HIBYTE(v65) = 0;
phkResult = 0;
v59 = (HKEY)((char *)v60 + 60);
memset((char *)v60 + 60, 0, 0x80u);
v35 = v60;
*((_DWORD *)v60 + 47) = 0;
v35[48] = 0;
v36 = LoadLibraryA("DDRAW.DLL");
hLibModule = v36;
if ( v36 )
{
v34 = GetProcAddress(v36, "DirectDrawCreateEx");
cbData = (DWORD)v34;
}
else
{
phkResult = (HKEY)1;
}
BytesReturned = 32;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u);
RegCloseKey(hKey);
}
if ( v34 )
{
if ( ((int (__stdcall *)(_DWORD, int *, int *, _DWORD))v34)(0, &v56, &v71, 0) )
{
phkResult = (HKEY)((unsigned int)phkResult | 4);
}
else
{
BytesReturned = 33;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u);
RegCloseKey(hKey);
}
memset(&v85, 0, 0x430u);
if ( (*(int (__stdcall **)(int, char *, _DWORD))(*(_DWORD *)v56 + 108))(v56, &v85, 0) )
{
phkResult = (HKEY)((unsigned int)phkResult | 8);
v39 = v60;
}
else
{
v37 = &v87;
do
v38 = *v37++;
while ( v38 );
if ( v37 == v88 )
{
phkResult = (HKEY)((unsigned int)phkResult | 0x10);
}
else
{
sub_5D2C40(v59, &v87, 63);
HIBYTE(v65) = 1;
}
v39 = v60;
v40 = v90;
*((_DWORD *)v60 + 47) = v89;
v39[48] = v40;
}
BytesReturned = 34;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u);
RegCloseKey(hKey);
}
SystemInfo.dwProcessorType = 0;
SystemInfo.dwAllocationGranularity = 0;
*(_DWORD *)&SystemInfo.wProcessorLevel = 0;
SystemInfo.dwNumberOfProcessors = 268451840;
if ( !(*(int (__stdcall **)(int, DWORD *, BYTE *, CHAR *))(*(_DWORD *)v56 + 92))(
v56,
&SystemInfo.dwNumberOfProcessors,
Data,
&FileName[4]) )
v39[49] = *(_DWORD *)Data;
(*(void (__stdcall **)(int))(*(_DWORD *)v56 + 8))(v56);
if ( HIBYTE(v65) )
goto LABEL_137;
}
}
else
{
phkResult = (HKEY)((unsigned int)phkResult | 2);
}
v41 = LoadLibraryA("D3D9.DLL");
if ( !v41 || (v42 = GetProcAddress(v41, "Direct3DCreate9"), (v43 = ((int (__stdcall *)(signed int))v42)(32)) == 0) )
{
phkResult = (HKEY)((unsigned int)phkResult | 0x100);
goto LABEL_104;
}
if ( (*(int (__stdcall **)(int, _DWORD, _DWORD, char *))(*(_DWORD *)v43 + 20))(v43, 0, 0, &v83) )
{
phkResult = (HKEY)((unsigned int)phkResult | 0x200);
LABEL_104:
BytesReturned = 35;
hKey = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u);
RegCloseKey(hKey);
}
*(_DWORD *)Data = 0;
for ( j = 9; j >= 0; --j )
{
_snprintf(
&SubKey,
0x100u,
"System\\CurrentControlSet\\Control\\Class\\{4D36E968-E325-11CE-BFC1-08002BE10318}\\%.4d",
j);
v94 = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, &SubKey, 0, 0x20019u, (PHKEY)Data) )
break;
_snprintf(&SubKey, 0x100u, "System\\CurrentControlSet\\Services\\Class\\Display\\%.4d", j);
v94 = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, &SubKey, 0, 0x20019u, (PHKEY)Data) )
break;
}
BytesReturned = 36;
hKey = 0;
if ( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &hKey) )
{
v49 = (void (__stdcall *)(HKEY))RegCloseKey;
}
else
{
RegSetValueExA(hKey, lpValueName, 0, 4u, (const BYTE *)&BytesReturned, 4u);
v49 = (void (__stdcall *)(HKEY))RegCloseKey;
RegCloseKey(hKey);
}
if ( *(_DWORD *)Data )
{
*(_DWORD *)v57 = 37;
BytesReturned = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned) )
{
RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, v57, 4u);
v49((HKEY)BytesReturned);
}
hKey = (HKEY)127;
if ( RegQueryValueExW(*(HKEY *)Data, &off_6816BC, 0, 0, (LPBYTE)v60 + 60, (LPDWORD)&hKey) )
{
phkResult = (HKEY)((unsigned int)phkResult | 0x40);
}
else if ( hKey )
{
HIBYTE(v65) = 1;
}
else
{
phkResult = (HKEY)((unsigned int)phkResult | 0x80);
}
hKey = (HKEY)79;
memset(&VersionInformation.szCSDVersion[48], 0, 0x50u);
v3 = RegQueryValueExA(
*(HKEY *)Data,
"MatchingDeviceId",
0,
0,
(LPBYTE)&VersionInformation.szCSDVersion[48],
(LPDWORD)&hKey) == 0;
v50 = v60;
if ( v3 )
{
sscanf(&VersionInformation.szCSDVersion[48], "%*[^_]_%lx%*[^_]_%lx", (char *)v60 + 188, (char *)v60 + 192);
v49(*(HKEY *)Data);
}
else
{
*((_DWORD *)v60 + 47) = 0;
v50[48] = 0;
v49(*(HKEY *)Data);
}
}
else
{
phkResult = (HKEY)((unsigned int)phkResult | 0x20);
}
if ( !HIBYTE(v65) )
{
sprintf(&VersionInformation.szCSDVersion[48], "Error code %04x", phkResult);
sub_5D2C10((char *)v60 + 60, &VersionInformation.szCSDVersion[48]);
}
*(_DWORD *)v57 = 38;
BytesReturned = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned) )
{
RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, v57, 4u);
v49((HKEY)BytesReturned);
}
v59 = 0;
SystemInfo.dwNumberOfProcessors = -1280904224;
SystemInfo.dwProcessorType = 298789699;
SystemInfo.dwAllocationGranularity = -1442783582;
SystemInfo.wProcessorLevel = -18176;
SystemInfo.wProcessorRevision = 22067;
if ( cbData
&& !((int (__stdcall *)(_DWORD, HKEY *, DWORD *, _DWORD))cbData)(0, &v59, &SystemInfo.dwNumberOfProcessors, 0) )
{
*(_DWORD *)v57 = 268451840;
if ( !(*(int (__stdcall **)(HKEY, BYTE *, DWORD *, CHAR *))(*(_DWORD *)v59 + 92))(v59, v57, &cbData, &FileName[4]) )
*((_DWORD *)v60 + 49) = cbData;
(*(void (__stdcall **)(HKEY))(*(_DWORD *)v59 + 8))(v59);
}
goto LABEL_137;
}
v44 = &v83;
do
v45 = *v44++;
while ( v45 );
if ( v44 == v84 )
{
phkResult = (HKEY)((unsigned int)phkResult | 0x400);
}
else
{
sub_5D2C40(v59, &v86, 63);
HIBYTE(v65) = 1;
}
v3 = HIBYTE(v65) == 0;
v46 = v60;
v47 = v91;
*((_DWORD *)v60 + 47) = v90;
v46[48] = v47;
if ( v3 )
goto LABEL_104;
LABEL_137:
if ( hLibModule )
FreeLibrary(hLibModule);
hLibModule = (HMODULE)39;
v59 = 0;
if ( !RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, &v59) )
{
RegSetValueExA(v59, lpValueName, 0, 4u, (const BYTE *)&hLibModule, 4u);
RegCloseKey(v59);
}
v51 = v60;
*((_DWORD *)v51 + 49) += (unsigned int)(*((_DWORD *)v60 + 11) * *((_DWORD *)v60 + 12) * *((_DWORD *)v60 + 13)) >> 3;
v52 = *((_DWORD *)v51 + 49);
if ( v52 >= 0x1000000 )
{
*(_DWORD *)&FileName[4] = *((_DWORD *)v51 + 49);
v54 = ceil((double)v52 * 0.0000001192092895507812);
hLibModule = (HMODULE)(v65 | 0xC00);
*(_QWORD *)FileName = (signed __int64)v54;
*((_DWORD *)v51 + 49) = 8 * (unsigned __int64)(signed __int64)v54;
}
else
{
*(_DWORD *)&FileName[4] = *((_DWORD *)v51 + 49);
v53 = ceil((double)v52 * 0.000000476837158203125);
hLibModule = (HMODULE)(v65 | 0xC00);
*(_QWORD *)FileName = (signed __int64)v53;
*((_DWORD *)v51 + 49) = 2 * (unsigned __int64)(signed __int64)v53;
}
hLibModule = 0;
BytesReturned = 0;
result = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Origin Worlds Online", 0, 0xF003Fu, (PHKEY)&BytesReturned);
if ( !result )
{
RegSetValueExA((HKEY)BytesReturned, lpValueName, 0, 4u, (const BYTE *)&hLibModule, 4u);
result = RegCloseKey((HKEY)BytesReturned);
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment