170 lines
5.1 KiB
C
170 lines
5.1 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14006e9e0 FUN_14006e9e0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_14006e9e0(int *param_1,longlong *param_2,undefined8 param_3,undefined8 param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
bool bVar2;
|
|
DWORD DVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
uint uVar6;
|
|
uint *puVar7;
|
|
int *piVar8;
|
|
longlong *plVar9;
|
|
LPCWSTR pWVar10;
|
|
longlong *plVar11;
|
|
ulonglong uVar12;
|
|
undefined *puVar13;
|
|
LPCWSTR pWVar14;
|
|
uint uVar15;
|
|
LPCWSTR local_res8;
|
|
|
|
piVar1 = param_1 + 0xc;
|
|
bVar2 = FUN_14006b3f0(piVar1);
|
|
if (!bVar2) {
|
|
return;
|
|
}
|
|
FUN_14006b350(piVar1);
|
|
puVar13 = *(undefined **)(param_1 + 2);
|
|
if ((((puVar13 != (undefined *)0x0) && (puVar13 != PTR_DAT_1401ac010)) &&
|
|
(*(int *)(puVar13 + -8) != 0)) ||
|
|
((*param_1 != 3 || (DVar3 = GetTickCount(), DVar3 - param_1[1] < 0x7531)))) goto LAB_14006eca1;
|
|
plVar9 = (longlong *)(param_1 + 2);
|
|
plVar11 = param_2;
|
|
FUN_140003110(plVar9,param_2,param_3,param_4);
|
|
*param_1 = 0;
|
|
DVar3 = GetTickCount();
|
|
param_1[1] = DVar3;
|
|
FUN_14006cb70(plVar9,plVar11,param_3,param_4);
|
|
pWVar14 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
local_res8 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
uVar4 = FUN_14006c9f0(L"**ErrorReport** ");
|
|
uVar12 = 0;
|
|
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
uVar12 = (ulonglong)*(uint *)((longlong)pWVar14 + -8);
|
|
}
|
|
uVar6 = uVar4;
|
|
if ((((int)uVar4 <= (int)uVar12) && (uVar6 = 0, pWVar14 != (LPCWSTR)0x0)) &&
|
|
(pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
uVar6 = *(uint *)((longlong)pWVar14 + -8);
|
|
}
|
|
uVar15 = 1;
|
|
if (1 < (int)uVar6) {
|
|
uVar15 = uVar6;
|
|
}
|
|
iVar5 = 0;
|
|
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
iVar5 = *(int *)((longlong)pWVar14 + -8);
|
|
}
|
|
if (iVar5 < (int)uVar15) {
|
|
if (pWVar14 == (LPCWSTR)0x0) {
|
|
pWVar14 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
local_res8 = pWVar14;
|
|
if ((int)uVar15 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
if (uVar15 == 0) {
|
|
FUN_1400031e0((longlong *)&local_res8,uVar12,param_3,param_4);
|
|
}
|
|
else {
|
|
uVar6 = 0;
|
|
if ((pWVar14 != (LPCWSTR)0x0) && (uVar6 = 0, pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
uVar6 = *(uint *)(pWVar14 + -4);
|
|
}
|
|
if (uVar15 != uVar6) {
|
|
puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar15 * 2 + 10);
|
|
if (puVar7 != (uint *)0x0) {
|
|
*puVar7 = 0;
|
|
puVar7[1] = 1;
|
|
}
|
|
*puVar7 = uVar15;
|
|
uVar6 = 0;
|
|
if ((pWVar14 != (LPCWSTR)0x0) && (uVar6 = 0, pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
uVar6 = *(uint *)(pWVar14 + -4);
|
|
}
|
|
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
if ((int)uVar15 < (int)uVar6) {
|
|
LAB_14006eb71:
|
|
if (pWVar14 != (LPCWSTR)0x0) {
|
|
pWVar10 = pWVar14;
|
|
}
|
|
}
|
|
else {
|
|
uVar15 = 0;
|
|
if (pWVar14 != (LPCWSTR)0x0) {
|
|
if (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) {
|
|
uVar15 = *(uint *)(pWVar14 + -4);
|
|
}
|
|
goto LAB_14006eb71;
|
|
}
|
|
}
|
|
uVar12 = (ulonglong)uVar15;
|
|
FUN_14006ca20(puVar7 + 2,pWVar10,uVar15);
|
|
FUN_1400031e0((longlong *)&local_res8,pWVar10,uVar12,param_4);
|
|
local_res8 = (LPCWSTR)(puVar7 + 2);
|
|
}
|
|
}
|
|
}
|
|
FUN_140002e40((longlong *)&local_res8);
|
|
pWVar14 = local_res8;
|
|
pWVar10 = local_res8;
|
|
if (local_res8 == (LPCWSTR)0x0) {
|
|
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
uVar12 = (ulonglong)uVar4;
|
|
FUN_14006ca20(pWVar10,L"**ErrorReport** ",uVar4);
|
|
pWVar10 = pWVar14;
|
|
if (pWVar14 == (LPCWSTR)0x0) {
|
|
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
uVar6 = FUN_14006c9f0(pWVar10);
|
|
uVar4 = 0;
|
|
if (0 < (int)uVar6) {
|
|
uVar4 = uVar6;
|
|
}
|
|
uVar6 = 0;
|
|
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
|
|
uVar6 = *(uint *)(pWVar14 + -4);
|
|
}
|
|
if (((int)uVar4 < (int)uVar6) || (uVar4 = 0, pWVar14 == (LPCWSTR)0x0)) {
|
|
LAB_14006ec09:
|
|
if (((pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) && (pWVar14 != (LPCWSTR)0x0)) &&
|
|
(pWVar14 + -4 != (LPCWSTR)0x0)) {
|
|
*(uint *)(pWVar14 + -4) = uVar4;
|
|
pWVar14[(int)uVar4] = L'\0';
|
|
}
|
|
}
|
|
else if (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) {
|
|
uVar4 = *(uint *)(pWVar14 + -4);
|
|
goto LAB_14006ec09;
|
|
}
|
|
FUN_140053b20((longlong *)&local_res8,param_2);
|
|
puVar13 = &DAT_1401595e0;
|
|
FUN_1400141f0((longlong *)&local_res8,(short *)&DAT_1401595e0);
|
|
pWVar14 = local_res8;
|
|
pWVar10 = local_res8;
|
|
if (local_res8 == (LPCWSTR)0x0) {
|
|
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
|
|
}
|
|
OutputDebugStringW(pWVar10);
|
|
if (((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) &&
|
|
(pWVar14 + -4 != (LPCWSTR)0x0)) {
|
|
piVar8 = (int *)FUN_14006cb70(pWVar10,puVar13,uVar12,param_4);
|
|
FUN_14006b350(piVar8);
|
|
pWVar10 = pWVar14 + -2;
|
|
*(uint *)pWVar10 = *(uint *)pWVar10 - 1;
|
|
if (*(uint *)pWVar10 == 0) {
|
|
FUN_14006cc60(pWVar14 + -4);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar8);
|
|
}
|
|
LAB_14006eca1:
|
|
FUN_14006b3e0((longlong)piVar1);
|
|
return;
|
|
}
|
|
|