/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ae070 FUN_1401ae070 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401ae070(undefined8 *param_1) { longlong lVar1; void *pvVar2; undefined8 *puVar3; char cVar4; int iVar5; DWORD DVar6; BOOL BVar7; errno_t eVar8; undefined8 *puVar9; undefined8 uVar10; longlong *plVar11; undefined8 *puVar12; int *piVar13; undefined8 uVar14; HANDLE pvVar15; undefined1 *puVar16; LPCWSTR pWVar17; undefined *puVar18; int *piVar19; undefined *puVar20; int iVar21; longlong lVar22; undefined1 auStackY_3b8 [32]; undefined2 local_378 [4]; undefined *local_370; undefined8 *local_368; undefined8 *local_360; undefined *local_358; undefined *local_350; longlong 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; undefined8 *local_2d0; undefined1 local_2c8; __time64_t local_2c0; DWORD local_2b8 [2]; undefined8 local_2b0; undefined8 local_2a8; undefined1 local_2a0; undefined8 local_298; undefined1 local_290; undefined8 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_1403463c0 ^ (ulonglong)auStackY_3b8; local_320 = GetFileSize((HANDLE)*param_1,&DStack_31c); if ((local_320 != 0xffffffff) || (iVar5 = FUN_1401ad250(), local_2f0 = local_348, -1 < iVar5)) { local_2f0 = CONCAT44(DStack_31c,local_320); } DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)local_2f0,(PLONG)((longlong)&local_2f0 + 4),0); if (DVar6 == 0xffffffff) { FUN_1401ad250(); } FUN_14016d8c0(); local_350 = PTR_DAT_1403440a0; local_2c0 = _time64((__time64_t *)0x0); puVar9 = (undefined8 *)FUN_1401ad910(&local_2c0,&local_310,&DAT_140283898); pWVar17 = (LPCWSTR)*puVar9; local_258 = local_250; if (pWVar17 == (LPCWSTR)0x0) { local_258 = (undefined1 *)0x0; goto LAB_1401ae22f; } iVar5 = lstrlenW(pWVar17); iVar5 = iVar5 + 1; if (iVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80070057); } if (local_258 == local_250) { if (0x80 < iVar5) { puVar16 = calloc((longlong)iVar5,2); goto LAB_1401ae1c1; } LAB_1401ae1d5: puVar16 = local_250; } else { if (iVar5 < 0x81) { free(local_258); goto LAB_1401ae1d5; } puVar16 = _recalloc(local_258,(longlong)iVar5,2); if (puVar16 == (undefined1 *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } LAB_1401ae1c1: if (puVar16 == (undefined1 *)0x0) { local_258 = puVar16; /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } } local_258 = puVar16; eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2); if (eVar8 != 0) { if (eVar8 == 0xc) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } if ((eVar8 == 0x16) || (eVar8 == 0x22)) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80070057); } if (eVar8 != 0x50) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } } LAB_1401ae22f: piVar19 = (int *)0x0; FUN_14004c020(&local_350,L"-------- Log start at %s --------\r\n",local_258); if (local_258 != local_250) { free(local_258); } LOCK(); piVar13 = (int *)(local_310 + -8); iVar5 = *piVar13; *piVar13 = *piVar13 + -1; UNLOCK(); if (iVar5 + -1 < 1) { (**(code **)(**(longlong **)(local_310 + -0x18) + 8))(); } puVar20 = local_350; puVar18 = PTR_DAT_1403440a0; iVar5 = 0; if (local_350 != (undefined *)0x0) { piVar13 = piVar19; if (local_350 != PTR_DAT_1403440a0) { piVar13 = (int *)(ulonglong)*(uint *)(local_350 + -8); } puVar18 = local_350; iVar5 = (int)piVar13; } BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,&local_2e8,(LPOVERLAPPED)0x0); if (BVar7 == 0) { FUN_1401ad250(); } if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) && (puVar20 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_2a8 = uVar10; FUN_14016db50(uVar10); local_2a0 = 1; piVar13 = (int *)(puVar20 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14016d970(puVar20 + -8); } FUN_14016dbe0(uVar10); local_2a0 = 0; } cVar4 = *(char *)(param_1 + 0x10); local_350 = PTR_DAT_1403440a0; lVar22 = local_348; do { if (cVar4 != '\0') { return; } cVar4 = FUN_1401c37f0(param_1 + 2,300); if (cVar4 != '\0') { local_340 = (undefined8 *)0x0; local_328 = 0; local_338 = (undefined8 *)0x0; local_330 = (undefined8 *)0x0; puVar9 = param_1 + 3; local_2d0 = puVar9; FUN_14016db50(puVar9); local_2c8 = 1; if (*(char *)(param_1 + 10) == '\0') { lVar1 = param_1[0x14]; while (lVar1 != 0) { plVar11 = (longlong *)FUN_1401ad9b0(param_1 + 0x11,&local_360); puVar9 = (undefined8 *)FUN_14016d940(0x18); local_270 = puVar9; local_268 = puVar9; if (puVar9 != (undefined8 *)0x0) { puVar9[2] = 0; if (*plVar11 != 0) { *(longlong *)(*plVar11 + 8) = *(longlong *)(*plVar11 + 8) + 1; piVar13 = piVar19; if ((puVar9[2] != 0) && (*(longlong *)(puVar9[2] + 8) = *(longlong *)(puVar9[2] + 8) + -1, *(longlong *)(puVar9[2] + 8) == 0)) { piVar13 = (int *)puVar9[2]; } puVar9[2] = *plVar11; if (piVar13 != (int *)0x0) { pvVar2 = *(void **)piVar13; if (pvVar2 != (void *)0x0) { FUN_14004eb70((longlong)pvVar2 + 8); operator_delete(pvVar2); } FUN_14016d970(piVar13); } } } puVar12 = local_360; puVar9[1] = local_330; *puVar9 = 0; local_328 = local_328 + 1; puVar3 = puVar9; if (local_330 != (undefined8 *)0x0) { *local_330 = puVar9; puVar3 = local_338; } local_338 = puVar3; local_330 = puVar9; if ((local_360 != (undefined8 *)0x0) && (local_360[1] = local_360[1] + -1, local_360[1] == 0)) { pvVar2 = (void *)*local_360; if (pvVar2 != (void *)0x0) { FUN_14004eb70((longlong)pvVar2 + 8); operator_delete(pvVar2); } FUN_14016d970(puVar12); } puVar9 = local_2d0; lVar1 = param_1[0x14]; } } FUN_14016dbe0(puVar9); local_2c8 = 0; FUN_14016d8c0(); local_370 = PTR_DAT_1403440a0; puVar20 = PTR_DAT_1403440a0; while (local_328 != 0) { FUN_1401ad9b0(&local_340,&local_368); puVar9 = local_368; piVar13 = piVar19; if (local_368 != (undefined8 *)0x0) { piVar13 = (int *)*local_368; } iVar5 = *piVar13; iVar21 = 0; if (iVar5 == 0) { if ((HANDLE)*param_1 != (HANDLE)0x0) { CloseHandle((HANDLE)*param_1); *param_1 = 0; } piVar13 = piVar19; if (puVar9 != (undefined8 *)0x0) { piVar13 = (int *)*puVar9; } pWVar17 = *(LPCWSTR *)(piVar13 + 2); if (*(LPCWSTR *)(piVar13 + 2) == (LPCWSTR)0x0) { pWVar17 = (LPCWSTR)PTR_DAT_1403440a0; } if (param_1[1] == 0) { pvVar15 = CreateFileW(pWVar17,0x40000000,1,(LPSECURITY_ATTRIBUTES)0x0,4,0x80,(HANDLE)0x0 ); } else { pvVar15 = (HANDLE)FUN_1401ad270(param_1[1],pWVar17,0x40000000); } if (pvVar15 == (HANDLE)0xffffffffffffffff) { iVar5 = FUN_1401ad250(); if (iVar5 < 0) { *(undefined1 *)(param_1 + 10) = 1; goto LAB_1401ae989; } } else { *param_1 = pvVar15; } local_378[0] = 0xfeff; BVar7 = WriteFile((HANDLE)*param_1,local_378,2,local_308,(LPOVERLAPPED)0x0); if (BVar7 == 0) { FUN_1401ad250(); } local_318 = GetFileSize((HANDLE)*param_1,&DStack_314); if ((local_318 != 0xffffffff) || (iVar5 = FUN_1401ad250(), -1 < iVar5)) { lVar22 = CONCAT44(DStack_314,local_318); } local_300 = lVar22; DVar6 = SetFilePointer((HANDLE)*param_1,(LONG)lVar22,(PLONG)((longlong)&local_300 + 4),0); if (DVar6 == 0xffffffff) { FUN_1401ad250(); } FUN_14016d8c0(); local_358 = PTR_DAT_1403440a0; local_2f8 = _time64((__time64_t *)0x0); puVar9 = (undefined8 *)FUN_1401ad910(&local_2f8,&local_348,&DAT_140283898); pWVar17 = (LPCWSTR)*puVar9; local_148 = local_140; if (pWVar17 == (LPCWSTR)0x0) { local_148 = (undefined1 *)0x0; } else { iVar5 = lstrlenW(pWVar17); iVar5 = iVar5 + 1; if (iVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80070057); } if (local_148 == local_140) { if (0x80 < iVar5) { puVar16 = calloc((longlong)iVar5,2); goto LAB_1401ae838; } LAB_1401ae84a: puVar16 = local_140; } else { if (iVar5 < 0x81) { free(local_148); goto LAB_1401ae84a; } puVar16 = _recalloc(local_148,(longlong)iVar5,2); if (puVar16 == (undefined1 *)0x0) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } LAB_1401ae838: if (puVar16 == (undefined1 *)0x0) { local_148 = puVar16; /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } } local_148 = puVar16; eVar8 = memcpy_s(puVar16,(longlong)iVar5 * 2,pWVar17,(longlong)iVar5 * 2); if (eVar8 != 0) { if (eVar8 == 0xc) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } if ((eVar8 == 0x16) || (eVar8 == 0x22)) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80070057); } if (eVar8 != 0x50) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } } } FUN_14004c020(&local_358,L"-------- Log start at %s --------\r\n",local_148); if (local_148 != local_140) { free(local_148); } LOCK(); piVar13 = (int *)(local_348 + -8); iVar5 = *piVar13; *piVar13 = *piVar13 + -1; UNLOCK(); if (iVar5 + -1 < 1) { (**(code **)(**(longlong **)(local_348 + -0x18) + 8))(); } puVar20 = local_358; puVar18 = PTR_DAT_1403440a0; if (local_358 != (undefined *)0x0) { piVar13 = piVar19; if (local_358 != PTR_DAT_1403440a0) { piVar13 = (int *)(ulonglong)*(uint *)(local_358 + -8); } iVar21 = (int)piVar13; puVar18 = local_358; } BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,local_2b8,(LPOVERLAPPED)0x0); if (BVar7 == 0) { FUN_1401ad250(); } if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) && (puVar20 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_298 = uVar10; FUN_14016db50(uVar10); local_290 = 1; piVar13 = (int *)(puVar20 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14016d970(puVar20 + -8); } FUN_14016dbe0(uVar10); local_290 = 0; } local_358 = PTR_DAT_1403440a0; puVar9 = local_368; puVar20 = local_370; } else if (iVar5 == 1) { piVar13 = piVar19; if (local_368 != (undefined8 *)0x0) { piVar13 = (int *)*local_368; } local_2b0 = *(undefined8 *)(piVar13 + 6); puVar12 = (undefined8 *)FUN_1401ad910(&local_2b0,&local_2d8,&DAT_140283898); uVar10 = *puVar12; piVar13 = piVar19; if (puVar9 != (undefined8 *)0x0) { piVar13 = (int *)*puVar9; } uVar14 = FUN_1401bbc90(piVar13[4]); FUN_14004c020(&local_370,L"[%s] [%s] %s\r\n",uVar14,uVar10); LOCK(); piVar13 = (int *)(local_2d8 + -8); iVar5 = *piVar13; *piVar13 = *piVar13 + -1; UNLOCK(); if (iVar5 + -1 < 1) { (**(code **)(**(longlong **)(local_2d8 + -0x18) + 8))(); } puVar20 = local_370; puVar18 = PTR_DAT_1403440a0; if (local_370 != (undefined *)0x0) { piVar13 = piVar19; if (local_370 != PTR_DAT_1403440a0) { piVar13 = (int *)(ulonglong)*(uint *)(local_370 + -8); } iVar21 = (int)piVar13; puVar18 = local_370; } BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar21 * 2,&local_2e4,(LPOVERLAPPED)0x0); puVar9 = local_368; if (BVar7 == 0) { FUN_1401ad250(); puVar9 = local_368; } } else if (iVar5 == 2) { piVar13 = piVar19; if (local_368 != (undefined8 *)0x0) { piVar13 = (int *)*local_368; } puVar18 = *(undefined **)(piVar13 + 2); iVar5 = 0; if ((puVar18 != (undefined *)0x0) && (iVar5 = iVar21, puVar18 != PTR_DAT_1403440a0)) { iVar5 = *(int *)(puVar18 + -8); } piVar13 = piVar19; if (local_368 != (undefined8 *)0x0) { piVar13 = (int *)*local_368; } puVar18 = *(undefined **)(piVar13 + 2); if (*(undefined **)(piVar13 + 2) == (undefined *)0x0) { puVar18 = PTR_DAT_1403440a0; } BVar7 = WriteFile((HANDLE)*param_1,puVar18,iVar5 * 2,local_2e0,(LPOVERLAPPED)0x0); if (BVar7 == 0) { FUN_1401ad250(); } } LAB_1401ae989: puVar12 = local_368; if (puVar9 != (undefined8 *)0x0) { plVar11 = puVar9 + 1; *plVar11 = *plVar11 + -1; puVar20 = local_370; if (*plVar11 == 0) { pvVar2 = (void *)*local_368; if (pvVar2 != (void *)0x0) { FUN_14004eb70((longlong)pvVar2 + 8); operator_delete(pvVar2); } FUN_14016d970(puVar12); puVar20 = local_370; } } } if (((puVar20 != (undefined *)0x0) && (puVar20 != PTR_DAT_1403440a0)) && (puVar20 + -8 != (undefined *)0x0)) { uVar10 = FUN_14016d8c0(); local_288 = uVar10; FUN_14016db50(uVar10); local_280 = 1; piVar13 = (int *)(puVar20 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14016d970(puVar20 + -8); } FUN_14016dbe0(uVar10); local_280 = 0; } local_370 = PTR_DAT_1403440a0; FUN_1401ada50(&local_340); if (local_340 != (undefined8 *)0x0) { (**(code **)*local_340)(local_340,1); } } cVar4 = *(char *)(param_1 + 0x10); } while( true ); }