server-re/decomp/MessageServer_Release_x64/full/functions/0x1400cbc40.c

579 lines
20 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400cbc40 FUN_1400cbc40
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Type propagation algorithm not settling */
void FUN_1400cbc40(undefined8 *param_1)
{
char cVar1;
LPCWSTR pWVar2;
longlong lVar3;
LPCWSTR ****pppppWVar4;
undefined *puVar5;
undefined8 *puVar6;
bool bVar7;
DWORD DVar8;
BOOL BVar9;
int iVar10;
errno_t eVar11;
longlong *plVar12;
int *piVar13;
undefined8 *puVar14;
LPCWSTR *****ppppppWVar15;
wchar_t *pwVar16;
HANDLE pvVar17;
undefined1 *puVar18;
LPCWSTR ******lpFileName;
int *piVar19;
LPCWSTR ******pppppppWVar20;
undefined *lpBuffer;
LPCWSTR ******lpBuffer_00;
LPCWSTR ******pppppppWVar21;
LPCWSTR *****ppppppWVar22;
LPCWSTR ******pppppppWVar23;
int iVar24;
PLONG pLVar25;
ulonglong uVar26;
rsize_t rVar27;
LPDWORD lpNumberOfBytesWritten;
ulonglong uVar28;
undefined1 auStackY_3b8 [32];
undefined2 local_378 [4];
LPCWSTR ******local_370;
LPCWSTR ******local_368;
LPCWSTR *****local_360;
LPCWSTR ******local_358;
undefined *local_350;
ulonglong local_348;
undefined8 *local_340;
undefined8 *local_338;
undefined8 *local_330;
longlong local_328;
DWORD local_320;
DWORD DStack_31c;
DWORD local_318;
DWORD DStack_314;
longlong local_310;
DWORD local_308 [2];
undefined8 local_300;
__time64_t local_2f8;
undefined8 local_2f0;
DWORD local_2e8;
DWORD local_2e4;
DWORD local_2e0 [2];
longlong local_2d8;
LPCWSTR ******local_2d0;
undefined1 local_2c8;
__time64_t local_2c0;
DWORD local_2b8 [2];
LPCWSTR ****local_2b0;
int *local_2a8;
undefined1 local_2a0;
LPCWSTR ******local_298;
undefined1 local_290;
int *local_288;
undefined1 local_280;
undefined8 local_278;
undefined8 *local_270;
undefined8 *local_268;
undefined1 *local_258;
undefined1 local_250 [264];
undefined1 *local_148;
undefined1 local_140 [264];
ulonglong local_38;
local_278 = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_3b8;
local_320 = GetFileSize((HANDLE)*param_1,&DStack_31c);
if ((local_320 != 0xffffffff) || (DVar8 = FUN_1400a0200(), local_2f0 = local_348, -1 < (int)DVar8)
) {
local_2f0 = CONCAT44(DStack_31c,local_320);
}
rVar27 = 0;
pLVar25 = (PLONG)((longlong)&local_2f0 + 4);
uVar26 = local_2f0 & 0xffffffff;
pvVar17 = (HANDLE)*param_1;
DVar8 = SetFilePointer(pvVar17,(LONG)local_2f0,pLVar25,0);
if (DVar8 == 0xffffffff) {
FUN_1400a0200();
}
FUN_14006cb70(pvVar17,uVar26,pLVar25,rVar27);
local_350 = PTR_DAT_1401ac010;
local_2c0 = _time64((__time64_t *)0x0);
plVar12 = FUN_1400b0130(&local_2c0,&local_310,L"%#c");
pWVar2 = (LPCWSTR)*plVar12;
local_258 = local_250;
if (pWVar2 == (LPCWSTR)0x0) {
local_258 = (undefined1 *)0x0;
goto LAB_1400cbdff;
}
iVar10 = lstrlenW(pWVar2);
iVar10 = iVar10 + 1;
if (iVar10 < 0) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80070057);
}
if (local_258 == local_250) {
if (0x80 < iVar10) {
puVar18 = calloc((longlong)iVar10,2);
goto LAB_1400cbd91;
}
LAB_1400cbda5:
puVar18 = local_250;
}
else {
if (iVar10 < 0x81) {
free(local_258);
goto LAB_1400cbda5;
}
puVar18 = _recalloc(local_258,(longlong)iVar10,2);
if (puVar18 == (undefined1 *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
LAB_1400cbd91:
if (puVar18 == (undefined1 *)0x0) {
local_258 = puVar18;
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
}
rVar27 = (longlong)iVar10 * 2;
local_258 = puVar18;
eVar11 = memcpy_s(puVar18,rVar27,pWVar2,rVar27);
if (eVar11 != 0) {
if (eVar11 == 0xc) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
if ((eVar11 == 0x16) || (eVar11 == 0x22)) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80070057);
}
if (eVar11 != 0x50) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80004005);
}
}
LAB_1400cbdff:
ppppppWVar22 = (LPCWSTR *****)0x0;
FUN_140053d20((longlong *)&local_350,L"-------- Log start at %s --------\r\n",local_258,rVar27);
if (local_258 != local_250) {
free(local_258);
}
LOCK();
piVar19 = (int *)(local_310 + -8);
iVar10 = *piVar19;
*piVar19 = *piVar19 + -1;
UNLOCK();
if (iVar10 + -1 < 1) {
(**(code **)(**(longlong **)(local_310 + -0x18) + 8))();
}
puVar5 = local_350;
lpBuffer = PTR_DAT_1401ac010;
iVar10 = 0;
if (local_350 != (undefined *)0x0) {
ppppppWVar15 = ppppppWVar22;
if (local_350 != PTR_DAT_1401ac010) {
ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_350 + -8);
}
lpBuffer = local_350;
iVar10 = (int)ppppppWVar15;
}
uVar26 = (ulonglong)(uint)(iVar10 * 2);
lpNumberOfBytesWritten = &local_2e8;
pvVar17 = (HANDLE)*param_1;
BVar9 = WriteFile(pvVar17,lpBuffer,iVar10 * 2,lpNumberOfBytesWritten,(LPOVERLAPPED)0x0);
if (BVar9 == 0) {
FUN_1400a0200();
}
if (((puVar5 != (undefined *)0x0) && (puVar5 != PTR_DAT_1401ac010)) &&
(puVar5 + -8 != (undefined *)0x0)) {
piVar13 = (int *)FUN_14006cb70(pvVar17,lpBuffer,uVar26,lpNumberOfBytesWritten);
local_2a8 = piVar13;
FUN_14006b350(piVar13);
local_2a0 = 1;
piVar19 = (int *)(puVar5 + -4);
*piVar19 = *piVar19 + -1;
if (*piVar19 == 0) {
FUN_14006cc60(puVar5 + -8);
}
FUN_14006b3e0((longlong)piVar13);
local_2a0 = 0;
}
cVar1 = *(char *)(param_1 + 0x10);
local_350 = PTR_DAT_1401ac010;
uVar28 = local_348;
do {
if (cVar1 != '\0') {
return;
}
lpBuffer_00 = (LPCWSTR ******)0x12c;
bVar7 = FUN_140076c10(param_1 + 2,300);
if (bVar7) {
local_340 = (undefined8 *)0x0;
local_328 = 0;
local_338 = (undefined8 *)0x0;
local_330 = (undefined8 *)0x0;
lpFileName = (LPCWSTR ******)(param_1 + 3);
local_2d0 = lpFileName;
FUN_14006b350((int *)lpFileName);
local_2c8 = 1;
if (*(char *)(param_1 + 10) == '\0') {
lVar3 = param_1[0x14];
while (lVar3 != 0) {
lpBuffer_00 = &local_360;
plVar12 = FUN_1400cb580(param_1 + 0x11,(longlong *)lpBuffer_00,uVar26,
lpNumberOfBytesWritten);
puVar14 = (undefined8 *)FUN_14006cbf0(0x18);
local_270 = puVar14;
local_268 = puVar14;
if (puVar14 != (undefined8 *)0x0) {
puVar14[2] = 0;
if (*plVar12 != 0) {
*(longlong *)(*plVar12 + 8) = *(longlong *)(*plVar12 + 8) + 1;
ppppppWVar15 = ppppppWVar22;
if ((puVar14[2] != 0) &&
(*(longlong *)(puVar14[2] + 8) = *(longlong *)(puVar14[2] + 8) + -1,
*(longlong *)(puVar14[2] + 8) == 0)) {
ppppppWVar15 = (LPCWSTR *****)puVar14[2];
}
puVar14[2] = *plVar12;
if (ppppppWVar15 != (LPCWSTR *****)0x0) {
pppppWVar4 = *ppppppWVar15;
if (pppppWVar4 != (LPCWSTR ****)0x0) {
FUN_1400031e0((longlong *)(pppppWVar4 + 1),lpBuffer_00,uVar26,
lpNumberOfBytesWritten);
operator_delete(pppppWVar4);
}
FUN_14006cc60(ppppppWVar15);
}
}
}
ppppppWVar15 = local_360;
puVar14[1] = local_330;
*puVar14 = 0;
local_328 = local_328 + 1;
puVar6 = puVar14;
if (local_330 != (undefined8 *)0x0) {
*local_330 = puVar14;
puVar6 = local_338;
}
local_338 = puVar6;
local_330 = puVar14;
if ((local_360 != (LPCWSTR *****)0x0) &&
(local_360[1] = (LPCWSTR ****)((longlong)local_360[1] + -1),
local_360[1] == (LPCWSTR ****)0x0)) {
pppppWVar4 = *local_360;
if (pppppWVar4 != (LPCWSTR ****)0x0) {
FUN_1400031e0((longlong *)(pppppWVar4 + 1),lpBuffer_00,uVar26,lpNumberOfBytesWritten);
operator_delete(pppppWVar4);
}
FUN_14006cc60(ppppppWVar15);
}
lpFileName = local_2d0;
lVar3 = param_1[0x14];
}
}
FUN_14006b3e0((longlong)lpFileName);
local_2c8 = 0;
FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten);
local_370 = (LPCWSTR ******)PTR_DAT_1401ac010;
pppppppWVar23 = (LPCWSTR ******)PTR_DAT_1401ac010;
while (local_328 != 0) {
lpBuffer_00 = (LPCWSTR ******)&local_368;
FUN_1400cb580((longlong *)&local_340,(longlong *)lpBuffer_00,uVar26,lpNumberOfBytesWritten);
pppppppWVar21 = local_368;
ppppppWVar15 = ppppppWVar22;
if (local_368 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *local_368;
}
iVar10 = *(int *)ppppppWVar15;
iVar24 = 0;
if (iVar10 == 0) {
if ((HANDLE)*param_1 != (HANDLE)0x0) {
CloseHandle((HANDLE)*param_1);
*param_1 = 0;
}
ppppppWVar15 = ppppppWVar22;
if (pppppppWVar21 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *pppppppWVar21;
}
lpFileName = (LPCWSTR ******)ppppppWVar15[1];
if ((LPCWSTR ******)ppppppWVar15[1] == (LPCWSTR ******)0x0) {
lpFileName = (LPCWSTR ******)PTR_DAT_1401ac010;
}
pppppppWVar20 = (LPCWSTR ******)param_1[1];
if (pppppppWVar20 == (LPCWSTR ******)0x0) {
lpNumberOfBytesWritten = (LPDWORD)0x0;
lpBuffer_00 = (LPCWSTR ******)0x40000000;
uVar26 = 1;
pvVar17 = CreateFileW((LPCWSTR)lpFileName,0x40000000,1,(LPSECURITY_ATTRIBUTES)0x0,4,0x80
,(HANDLE)0x0);
}
else {
lpNumberOfBytesWritten = (LPDWORD)0x1;
uVar26 = 0x40000000;
lpBuffer_00 = lpFileName;
pvVar17 = FUN_1400a0220((longlong *)pppppppWVar20,(LPCWSTR)lpFileName,0x40000000,1,
(LPSECURITY_ATTRIBUTES)0x0,4,0x80,0);
lpFileName = pppppppWVar20;
}
if (pvVar17 == (HANDLE)0xffffffffffffffff) {
DVar8 = FUN_1400a0200();
if ((int)DVar8 < 0) {
*(undefined1 *)(param_1 + 10) = 1;
goto LAB_1400cc559;
}
}
else {
*param_1 = pvVar17;
}
local_378[0] = 0xfeff;
BVar9 = WriteFile((HANDLE)*param_1,local_378,2,local_308,(LPOVERLAPPED)0x0);
if (BVar9 == 0) {
FUN_1400a0200();
}
local_318 = GetFileSize((HANDLE)*param_1,&DStack_314);
if ((local_318 != 0xffffffff) || (DVar8 = FUN_1400a0200(), -1 < (int)DVar8)) {
uVar28 = CONCAT44(DStack_314,local_318);
}
rVar27 = 0;
pLVar25 = (PLONG)((longlong)&local_300 + 4);
uVar26 = uVar28 & 0xffffffff;
pvVar17 = (HANDLE)*param_1;
local_300 = uVar28;
DVar8 = SetFilePointer(pvVar17,(LONG)uVar28,pLVar25,0);
if (DVar8 == 0xffffffff) {
FUN_1400a0200();
}
FUN_14006cb70(pvVar17,uVar26,pLVar25,rVar27);
local_358 = (LPCWSTR ******)PTR_DAT_1401ac010;
local_2f8 = _time64((__time64_t *)0x0);
plVar12 = FUN_1400b0130(&local_2f8,(longlong *)&local_348,L"%#c");
pWVar2 = (LPCWSTR)*plVar12;
local_148 = local_140;
if (pWVar2 == (LPCWSTR)0x0) {
local_148 = (undefined1 *)0x0;
}
else {
iVar10 = lstrlenW(pWVar2);
iVar10 = iVar10 + 1;
if (iVar10 < 0) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80070057);
}
if (local_148 == local_140) {
if (0x80 < iVar10) {
puVar18 = calloc((longlong)iVar10,2);
goto LAB_1400cc408;
}
LAB_1400cc41a:
puVar18 = local_140;
}
else {
if (iVar10 < 0x81) {
free(local_148);
goto LAB_1400cc41a;
}
puVar18 = _recalloc(local_148,(longlong)iVar10,2);
if (puVar18 == (undefined1 *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
LAB_1400cc408:
if (puVar18 == (undefined1 *)0x0) {
local_148 = puVar18;
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
}
rVar27 = (longlong)iVar10 * 2;
local_148 = puVar18;
eVar11 = memcpy_s(puVar18,rVar27,pWVar2,rVar27);
if (eVar11 != 0) {
if (eVar11 == 0xc) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x8007000e);
}
if ((eVar11 == 0x16) || (eVar11 == 0x22)) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80070057);
}
if (eVar11 != 0x50) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80004005);
}
}
}
FUN_140053d20((longlong *)&local_358,L"-------- Log start at %s --------\r\n",local_148,
rVar27);
if (local_148 != local_140) {
free(local_148);
}
LOCK();
piVar19 = (int *)(local_348 - 8);
iVar10 = *piVar19;
*piVar19 = *piVar19 + -1;
UNLOCK();
if (iVar10 + -1 < 1) {
(**(code **)(**(longlong **)(local_348 - 0x18) + 8))();
}
pppppppWVar23 = local_358;
lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010;
if (local_358 != (LPCWSTR ******)0x0) {
ppppppWVar15 = ppppppWVar22;
if (local_358 != (LPCWSTR ******)PTR_DAT_1401ac010) {
ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_358 + -1);
}
iVar24 = (int)ppppppWVar15;
lpBuffer_00 = local_358;
}
uVar26 = (ulonglong)(uint)(iVar24 * 2);
lpFileName = (LPCWSTR ******)*param_1;
lpNumberOfBytesWritten = local_2b8;
BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar24 * 2,local_2b8,(LPOVERLAPPED)0x0);
if (BVar9 == 0) {
FUN_1400a0200();
}
if (((pppppppWVar23 != (LPCWSTR ******)0x0) &&
(pppppppWVar23 != (LPCWSTR ******)PTR_DAT_1401ac010)) &&
(pppppppWVar23 + -1 != (LPCWSTR ******)0x0)) {
lpFileName = (LPCWSTR ******)
FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten);
local_298 = lpFileName;
FUN_14006b350((int *)lpFileName);
local_290 = 1;
pWVar2 = (LPCWSTR)((longlong)pppppppWVar23 + -4);
*(int *)pWVar2 = *(int *)pWVar2 + -1;
if (*(int *)pWVar2 == 0) {
FUN_14006cc60(pppppppWVar23 + -1);
}
FUN_14006b3e0((longlong)lpFileName);
local_290 = 0;
}
local_358 = (LPCWSTR ******)PTR_DAT_1401ac010;
pppppppWVar21 = local_368;
pppppppWVar23 = local_370;
}
else if (iVar10 == 1) {
ppppppWVar15 = ppppppWVar22;
if (local_368 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *local_368;
}
local_2b0 = ppppppWVar15[3];
plVar12 = FUN_1400b0130((__time64_t *)&local_2b0,&local_2d8,L"%#c");
lVar3 = *plVar12;
ppppppWVar15 = ppppppWVar22;
if (pppppppWVar21 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *pppppppWVar21;
}
pwVar16 = FUN_1400d9a00(*(int *)(ppppppWVar15 + 2));
FUN_140053d20((longlong *)&local_370,L"[%s] [%s] %s\r\n",pwVar16,lVar3);
LOCK();
piVar19 = (int *)(local_2d8 + -8);
iVar10 = *piVar19;
*piVar19 = *piVar19 + -1;
UNLOCK();
if (iVar10 + -1 < 1) {
(**(code **)(**(longlong **)(local_2d8 + -0x18) + 8))();
}
pppppppWVar23 = local_370;
lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010;
if (local_370 != (LPCWSTR ******)0x0) {
ppppppWVar15 = ppppppWVar22;
if (local_370 != (LPCWSTR ******)PTR_DAT_1401ac010) {
ppppppWVar15 = (LPCWSTR *****)(ulonglong)*(uint *)(local_370 + -1);
}
iVar24 = (int)ppppppWVar15;
lpBuffer_00 = local_370;
}
uVar26 = (ulonglong)(uint)(iVar24 * 2);
lpNumberOfBytesWritten = &local_2e4;
lpFileName = (LPCWSTR ******)*param_1;
BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar24 * 2,lpNumberOfBytesWritten,
(LPOVERLAPPED)0x0);
pppppppWVar21 = local_368;
if (BVar9 == 0) {
FUN_1400a0200();
pppppppWVar21 = local_368;
}
}
else {
lpFileName = (LPCWSTR ******)(ulonglong)(iVar10 - 2U);
if (iVar10 - 2U == 0) {
ppppppWVar15 = ppppppWVar22;
if (local_368 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *local_368;
}
pppppWVar4 = ppppppWVar15[1];
iVar10 = 0;
if ((pppppWVar4 != (LPCWSTR ****)0x0) &&
(iVar10 = iVar24, pppppWVar4 != (LPCWSTR ****)PTR_DAT_1401ac010)) {
iVar10 = *(int *)(pppppWVar4 + -1);
}
ppppppWVar15 = ppppppWVar22;
if (local_368 != (LPCWSTR ******)0x0) {
ppppppWVar15 = *local_368;
}
lpBuffer_00 = (LPCWSTR ******)ppppppWVar15[1];
if ((LPCWSTR ******)ppppppWVar15[1] == (LPCWSTR ******)0x0) {
lpBuffer_00 = (LPCWSTR ******)PTR_DAT_1401ac010;
}
uVar26 = (ulonglong)(uint)(iVar10 * 2);
lpNumberOfBytesWritten = local_2e0;
lpFileName = (LPCWSTR ******)*param_1;
BVar9 = WriteFile(lpFileName,lpBuffer_00,iVar10 * 2,lpNumberOfBytesWritten,
(LPOVERLAPPED)0x0);
if (BVar9 == 0) {
FUN_1400a0200();
}
}
}
LAB_1400cc559:
pppppppWVar20 = local_368;
if (pppppppWVar21 != (LPCWSTR ******)0x0) {
pppppppWVar21 = pppppppWVar21 + 1;
*pppppppWVar21 = (LPCWSTR *****)((longlong)*pppppppWVar21 + -1);
pppppppWVar23 = local_370;
if (*pppppppWVar21 == (LPCWSTR *****)0x0) {
ppppppWVar15 = *local_368;
if (ppppppWVar15 != (LPCWSTR *****)0x0) {
FUN_1400031e0((longlong *)(ppppppWVar15 + 1),lpBuffer_00,uVar26,lpNumberOfBytesWritten
);
operator_delete(ppppppWVar15);
}
FUN_14006cc60(pppppppWVar20);
lpFileName = pppppppWVar20;
pppppppWVar23 = local_370;
}
}
}
if (((pppppppWVar23 != (LPCWSTR ******)0x0) &&
(pppppppWVar23 != (LPCWSTR ******)PTR_DAT_1401ac010)) &&
(pppppppWVar23 + -1 != (LPCWSTR ******)0x0)) {
piVar19 = (int *)FUN_14006cb70(lpFileName,lpBuffer_00,uVar26,lpNumberOfBytesWritten);
local_288 = piVar19;
FUN_14006b350(piVar19);
local_280 = 1;
pWVar2 = (LPCWSTR)((longlong)pppppppWVar23 + -4);
*(int *)pWVar2 = *(int *)pWVar2 + -1;
if (*(int *)pWVar2 == 0) {
FUN_14006cc60(pppppppWVar23 + -1);
}
FUN_14006b3e0((longlong)piVar19);
local_280 = 0;
}
local_370 = (LPCWSTR ******)PTR_DAT_1401ac010;
FUN_1400cb620((longlong *)&local_340,(longlong *)lpBuffer_00,uVar26,lpNumberOfBytesWritten);
if (local_340 != (undefined8 *)0x0) {
(**(code **)*local_340)(local_340,1);
}
}
cVar1 = *(char *)(param_1 + 0x10);
} while( true );
}