/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400ea420 FUN_1400ea420 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ IID * FUN_1400ea420(undefined8 *param_1,undefined8 *param_2) { uchar *puVar1; undefined4 *puVar2; IUnknown *pIVar3; undefined6 uVar4; IUnknown *This; int iVar5; HRESULT HVar6; ULONG UVar7; undefined8 *puVar8; IID *pIVar9; longlong lVar10; longlong *plVar11; undefined8 uVar12; undefined8 uVar13; IID *pIVar14; char *riid; IID *pIVar15; char *ppvObject; uint uVar16; undefined1 auStackY_328 [32]; char local_2e8 [4]; int local_2e4; uint local_2e0; short local_2dc; short local_2d8; longlong *local_2d0; int local_2c8; undefined8 local_2c0; undefined4 local_2b8; undefined2 uStack_2b4; undefined2 uStack_2b2; undefined6 uStack_2b0; undefined2 uStack_2aa; undefined6 uStack_2a8; short local_2a2; IID *local_2a0; undefined8 *local_298; IID *local_290; LPUNKNOWN local_288; longlong *local_280; IUnknown *local_278; longlong *local_270; undefined4 local_268; undefined1 local_258 [24]; undefined1 local_240 [24]; undefined4 local_228; undefined1 *local_220; undefined4 local_218; undefined8 local_210; undefined1 *local_208; undefined8 *local_1f8; IID *local_1f0; longlong *local_1e8; undefined8 local_1e0; undefined1 local_1d8; undefined8 local_1d0; undefined1 local_1c8; undefined8 local_1c0; undefined1 local_1b8; undefined8 local_1b0; undefined1 local_1a8; undefined8 local_1a0; undefined1 local_198; undefined8 local_190; undefined1 local_188; undefined8 local_180; undefined1 local_178; undefined8 local_170; undefined1 local_168; IID *local_160 [2]; undefined4 local_150; undefined4 uStack_14c; undefined4 uStack_148; undefined4 uStack_144; undefined1 local_140 [8]; undefined8 local_138; undefined4 local_128; undefined4 uStack_124; undefined4 uStack_120; undefined4 uStack_11c; undefined1 local_110 [24]; undefined1 local_f8 [24]; undefined1 local_e0 [24]; longlong local_c8 [3]; undefined1 local_b0 [24]; undefined8 local_98; undefined8 uStack_90; undefined4 local_88; undefined4 uStack_84; undefined8 uStack_80; undefined8 local_78; undefined8 uStack_70; undefined8 local_68; ushort uStack_60; undefined2 uStack_5e; undefined4 uStack_5c; undefined4 uStack_58; undefined8 uStack_54; undefined4 uStack_4c; undefined4 uStack_48; undefined4 local_44; ushort uStack_40; undefined2 uStack_3e; ulonglong local_38; local_138 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStackY_328; pIVar15 = (IID *)0x0; local_2d0 = (longlong *)0x0; local_298 = param_1; local_1f8 = param_2; iVar5 = FUN_140001990(&local_2d0); if ((iVar5 < 0) && (iVar5 != -0x7fffbffe)) { /* WARNING: Subroutine does not return */ FUN_140218220(iVar5); } local_278 = (IUnknown *)0x0; local_270 = (longlong *)0x0; Ordinal_8(local_258); Ordinal_8(local_240); pIVar3 = local_278; if ((local_278 != (IUnknown *)0x0) && (local_278 = (IUnknown *)0x0, pIVar3 != (IUnknown *)0x0)) { (*pIVar3->lpVtbl->Release)(pIVar3); } local_208 = &DAT_14029e010; local_220 = &DAT_14029e010; local_218 = 0; local_210 = 0; if (local_278 != (IUnknown *)0x0) { (*local_278->lpVtbl->Release)(local_278); } HVar6 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0, &local_288); if (HVar6 < 0) { LAB_1400ea599: local_278 = (IUnknown *)0x0; } else { HVar6 = OleRun(local_288); if (-1 < HVar6) { HVar6 = (*local_288->lpVtbl->QueryInterface)(local_288,(IID *)&DAT_14029e078,&local_278); } (*local_288->lpVtbl->Release)(local_288); if (HVar6 < 0) goto LAB_1400ea599; } local_228 = 2; local_268 = 1; local_2e8[0] = '\x01'; local_2b8 = *(undefined4 *)(param_2 + 1); local_2c0._4_4_ = (undefined4)((ulonglong)*param_2 >> 0x20); local_2c0._0_4_ = CONCAT22(0x23c8,(short)*param_2); uStack_2b4 = 0x85; uStack_2b2 = (undefined2)*(undefined8 *)((longlong)param_2 + 0xe); uStack_2b0 = (undefined6)((ulonglong)*(undefined8 *)((longlong)param_2 + 0xe) >> 0x10); uStack_2aa = (undefined2)*(undefined8 *)((longlong)param_2 + 0x16); uStack_2a8 = (undefined6)((ulonglong)*(undefined8 *)((longlong)param_2 + 0x16) >> 0x10); local_2e4 = 0; local_2a2 = 0; uVar16 = 0x20; local_2e0 = 0x20; pIVar3 = *(IUnknown **)*param_1; if (pIVar3 != (IUnknown *)0x0) { local_2c8 = 0; UVar7 = (*pIVar3->lpVtbl[0xb].AddRef)(pIVar3); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e018); } if (local_2c8 != 0) goto LAB_1400ea798; } iVar5 = FUN_1400a80c0(param_1); if (iVar5 == 0) { FUN_1400a8040(param_1,param_2,0); pIVar3 = local_278; if (local_278 != (IUnknown *)0x0) { local_2e4 = 0; UVar7 = (*local_278->lpVtbl[0x12].AddRef)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } pIVar3 = local_278; if (local_2e4 != 0) { if (local_278 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar7 = (*local_278->lpVtbl[10].Release)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } } if (local_278 != (IUnknown *)0x0) { (*local_278->lpVtbl->Release)(local_278); local_278 = (IUnknown *)0x0; } } local_210 = 0; local_208 = &DAT_14029e010; local_220 = &DAT_14029e010; local_218 = 0; local_228 = 0; Ordinal_9(local_240); Ordinal_9(local_258); if (local_270 != (longlong *)0x0) { (**(code **)(*local_270 + 0x10))(); } if (local_278 != (IUnknown *)0x0) { (*local_278->lpVtbl->Release)(local_278); } if (local_2d0 != (longlong *)0x0) { (**(code **)(*local_2d0 + 0x10))(); } return (IID *)0x0; } LAB_1400ea798: puVar8 = (undefined8 *)FUN_140001f40(*param_1,&local_1e8); FUN_140001700(&local_2d0,*puVar8,"dbo.up_get_guild_increase_exp"); if (local_1e8 != (longlong *)0x0) { (**(code **)(*local_1e8 + 0x10))(); } local_280 = local_c8; local_128 = *(undefined4 *)((longlong)param_2 + 0xe); uStack_124 = *(undefined4 *)((longlong)param_2 + 0x12); uStack_120 = *(undefined4 *)((longlong)param_2 + 0x16); uStack_11c = *(undefined4 *)((longlong)param_2 + 0x1a); FUN_140063820(local_c8,&local_128); pIVar9 = operator_new(0x18); local_160[0] = pIVar15; local_1f0 = pIVar9; if (pIVar9 != (IID *)0x0) { pIVar9->Data4[0] = '\0'; pIVar9->Data4[1] = '\0'; pIVar9->Data4[2] = '\0'; pIVar9->Data4[3] = '\0'; pIVar9->Data4[4] = '\0'; pIVar9->Data4[5] = '\0'; pIVar9->Data4[6] = '\0'; pIVar9->Data4[7] = '\0'; pIVar9[1].Data1 = 1; lVar10 = FUN_1402182d0("guild_id"); pIVar9->Data1 = (int)lVar10; pIVar9->Data2 = (short)((ulonglong)lVar10 >> 0x20); pIVar9->Data3 = (short)((ulonglong)lVar10 >> 0x30); local_160[0] = pIVar9; } if (local_160[0] == (IID *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x8007000e); } plVar11 = (longlong *)FUN_140001870(&local_2d0,local_140,local_160,0xca); local_280 = plVar11; if (local_2d0 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } puVar8 = (undefined8 *)FUN_140001650(local_2d0,&local_1f0); pIVar3 = (IUnknown *)*puVar8; if (pIVar3 != (IUnknown *)0x0) { UVar7 = (*pIVar3->lpVtbl[3].AddRef)(pIVar3); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029dfc0); } if (local_1f0 != (IID *)0x0) { (**(code **)(*(longlong *)local_1f0 + 0x10))(); } if ((longlong *)*plVar11 != (longlong *)0x0) { (**(code **)(*(longlong *)*plVar11 + 0x10))(); } puVar8 = (undefined8 *)FUN_1400016c0(&local_2d0,&local_280); This = local_278; pIVar3 = (IUnknown *)*puVar8; if (local_278 != pIVar3) { local_278 = pIVar3; if (pIVar3 != (IUnknown *)0x0) { (*pIVar3->lpVtbl->AddRef)(pIVar3); } if (This != (IUnknown *)0x0) { (*This->lpVtbl->Release)(This); } } if (local_280 != (longlong *)0x0) { (**(code **)(*local_280 + 0x10))(); } pIVar3 = local_278; if (local_278 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_2d8 = 0; UVar7 = (*local_278->lpVtbl[6].Release)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } if (local_2d8 == -1) { uStack_2b4 = 0x86; pIVar15 = (IID *)0x0; } else { while( true ) { pIVar3 = local_278; if (local_278 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_2dc = 0; UVar7 = (*local_278->lpVtbl[6].Release)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } if (local_2dc == -1) break; local_98 = 0; uStack_90 = 0; local_88 = 0; memset(&uStack_84,0,0x28); uStack_5c = 0; uStack_58 = 0; uStack_54 = 0; uStack_4c = 0; uStack_48 = 0; local_44 = 0; uStack_40 = 0; uStack_3e = 0; uVar12 = FUN_140002290(&local_278,local_f8,"character_id",local_2e8); FUN_140063b70(uVar12,&local_150); local_98 = CONCAT44(uStack_14c,local_150); uStack_90 = CONCAT44(uStack_144,uStack_148); Ordinal_9(local_f8); uVar12 = FUN_140002290(&local_278,local_110,&DAT_1402ab9d0,local_2e8); FUN_140199590(uVar12); local_88 = FUN_140063af0(uVar12); Ordinal_9(local_110); uVar12 = FUN_140002290(&local_278,local_e0,&DAT_1402a5b5c,local_2e8); FUN_140063de0(uVar12,&local_2a0); FUN_14016d8c0(); pIVar9 = (IID *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { pIVar9 = pIVar15; } if (local_2a0 != (IID *)PTR_DAT_1403440a0) { uVar12 = FUN_14016d8c0(); local_188 = 0; local_190 = uVar12; FUN_14016db50(uVar12); local_188 = 1; if (((pIVar9 != (IID *)0x0) && (pIVar9 != (IID *)PTR_DAT_1403440a0)) && (pIVar9[-1].Data4 != (uchar *)0x0)) { uVar13 = FUN_14016d8c0(); local_1c8 = 0; local_1d0 = uVar13; FUN_14016db50(uVar13); local_1c8 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar9[-1].Data4); } FUN_14016dbe0(uVar13); local_1c8 = 0; } pIVar9 = local_2a0; if (((local_2a0 != (IID *)PTR_DAT_1403440a0) && (local_2a0 != (IID *)0x0)) && (local_2a0 != (IID *)0x8)) { *(int *)(local_2a0[-1].Data4 + 4) = *(int *)(local_2a0[-1].Data4 + 4) + 1; } FUN_14016dbe0(uVar12); local_188 = 0; } pIVar14 = pIVar9; if (pIVar9 == (IID *)0x0) { pIVar14 = (IID *)PTR_DAT_1403440a0; } wcsncpy((wchar_t *)&uStack_84,(wchar_t *)pIVar14,0x13); if (((pIVar9 != (IID *)0x0) && (pIVar9 != (IID *)PTR_DAT_1403440a0)) && (pIVar9[-1].Data4 != (uchar *)0x0)) { uVar12 = FUN_14016d8c0(); local_1a8 = 0; local_1b0 = uVar12; FUN_14016db50(uVar12); local_1a8 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar9[-1].Data4); } FUN_14016dbe0(uVar12); local_1a8 = 0; } pIVar9 = local_2a0; if (((local_2a0 != (IID *)0x0) && (local_2a0 != (IID *)PTR_DAT_1403440a0)) && (pIVar14 = local_2a0 + -1, pIVar14->Data4 != (uchar *)0x0)) { uVar12 = FUN_14016d8c0(); local_168 = 0; local_170 = uVar12; FUN_14016db50(uVar12); local_168 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar14->Data4); } FUN_14016dbe0(uVar12); local_168 = 0; } local_2a0 = (IID *)PTR_DAT_1403440a0; Ordinal_9(local_e0); uVar12 = FUN_140002290(&local_278,local_b0,"character_name",local_2e8); FUN_140063de0(uVar12,&local_290); FUN_14016d8c0(); pIVar9 = (IID *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { pIVar9 = pIVar15; } if (local_290 != (IID *)PTR_DAT_1403440a0) { uVar12 = FUN_14016d8c0(); local_1b8 = 0; local_1c0 = uVar12; FUN_14016db50(uVar12); local_1b8 = 1; if (((pIVar9 != (IID *)0x0) && (pIVar9 != (IID *)PTR_DAT_1403440a0)) && (pIVar9[-1].Data4 != (uchar *)0x0)) { uVar13 = FUN_14016d8c0(); local_1d8 = 0; local_1e0 = uVar13; FUN_14016db50(uVar13); local_1d8 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar9[-1].Data4); } FUN_14016dbe0(uVar13); local_1d8 = 0; } pIVar9 = local_290; if (((local_290 != (IID *)PTR_DAT_1403440a0) && (local_290 != (IID *)0x0)) && (local_290 != (IID *)0x8)) { *(int *)(local_290[-1].Data4 + 4) = *(int *)(local_290[-1].Data4 + 4) + 1; } FUN_14016dbe0(uVar12); local_1b8 = 0; } riid = (char *)pIVar9; if (pIVar9 == (IID *)0x0) { riid = PTR_DAT_1403440a0; } ppvObject = (char *)0xf; wcsncpy((wchar_t *)&uStack_5c,(wchar_t *)riid,0xf); if (((pIVar9 != (IID *)0x0) && (pIVar9 != (IID *)PTR_DAT_1403440a0)) && (pIVar9[-1].Data4 != (uchar *)0x0)) { uVar12 = FUN_14016d8c0(); local_198 = 0; local_1a0 = uVar12; FUN_14016db50(uVar12); local_198 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar9[-1].Data4); } FUN_14016dbe0(uVar12); local_198 = 0; } pIVar9 = local_290; if (((local_290 != (IID *)0x0) && (local_290 != (IID *)PTR_DAT_1403440a0)) && (pIVar14 = local_290 + -1, pIVar14->Data4 != (uchar *)0x0)) { uVar12 = FUN_14016d8c0(); local_178 = 0; local_180 = uVar12; FUN_14016db50(uVar12); local_178 = 1; puVar1 = pIVar9[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar14->Data4); } FUN_14016dbe0(uVar12); local_178 = 0; } local_290 = (IID *)PTR_DAT_1403440a0; Ordinal_9(local_b0); uStack_5e = 0; uStack_3e = 0; lVar10 = (longlong)(int)uVar16; puVar8 = (undefined8 *)(lVar10 + 0x130 + (longlong)param_1); *puVar8 = local_98; puVar8[1] = uStack_90; puVar8 = (undefined8 *)(lVar10 + 0x140 + (longlong)param_1); *puVar8 = CONCAT44(uStack_84,local_88); puVar8[1] = uStack_80; puVar8 = (undefined8 *)(lVar10 + 0x150 + (longlong)param_1); *puVar8 = local_78; puVar8[1] = uStack_70; puVar8 = (undefined8 *)(lVar10 + 0x160 + (longlong)param_1); *puVar8 = local_68; puVar8[1] = CONCAT44(uStack_5c,(uint)uStack_60); puVar2 = (undefined4 *)(lVar10 + 0x170 + (longlong)param_1); *puVar2 = uStack_58; puVar2[1] = (undefined4)uStack_54; puVar2[2] = uStack_54._4_4_; puVar2[3] = uStack_4c; *(ulonglong *)(lVar10 + 0x180 + (longlong)param_1) = CONCAT44(local_44,uStack_48); *(uint *)(lVar10 + 0x188 + (longlong)param_1) = (uint)uStack_40; local_2e0 = uVar16 + 0x5c; local_2a2 = (short)local_2e4 + 1; local_2e4 = CONCAT22((short)((uint)local_2e4 >> 0x10),local_2a2); if (50000 < local_2e0) { uVar4 = local_2c0._2_6_; local_2c0 = CONCAT62(local_2c0._2_6_,(short)local_2e0); uVar12 = local_2c0; riid = (char *)(param_1 + 0x26); local_2c0._4_2_ = SUB62(uVar4,2); local_2c0._6_2_ = SUB62(uVar4,4); ((IID *)riid)->Data1 = (undefined4)local_2c0; ((IID *)riid)->Data2 = local_2c0._4_2_; ((IID *)riid)->Data3 = local_2c0._6_2_; param_1[0x27] = CONCAT26(uStack_2b2,CONCAT24(uStack_2b4,local_2b8)); param_1[0x28] = CONCAT26(uStack_2aa,uStack_2b0); param_1[0x29] = CONCAT26(local_2a2,uStack_2a8); local_2c0 = uVar12; iVar5 = FUN_1400a7630(*(undefined8 *)(param_1[0x22] + 0xf0)); if (iVar5 == 0) { ppvObject = "DB Result Queue push error"; riid = "DBResultQueue_Error.Log"; FUN_1400a6d80(param_1[0x23]); } local_2e0 = 0x20; local_2e4 = 0; local_2a2 = 0; } pIVar3 = local_278; uVar16 = local_2e0; if (local_278 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } HVar6 = (*local_278->lpVtbl[0xc].QueryInterface)(local_278,(IID *)riid,(void **)ppvObject); if (HVar6 < 0) { _com_issue_errorex(HVar6,pIVar3,(_GUID *)&DAT_14029e038); } } if (local_2e8[0] == '\0') { uStack_2b4 = 0x87; } else { pIVar15 = (IID *)0x1; } } local_2c0 = CONCAT62(local_2c0._2_6_,(short)uVar16); param_1[0x26] = local_2c0; param_1[0x27] = CONCAT26(uStack_2b2,CONCAT24(uStack_2b4,local_2b8)); param_1[0x28] = CONCAT26(uStack_2aa,uStack_2b0); param_1[0x29] = CONCAT26(local_2a2,uStack_2a8); iVar5 = FUN_1400a7630(*(undefined8 *)(param_1[0x22] + 0xf0)); if (iVar5 == 0) { FUN_1400a6d80(param_1[0x23],"DBResultQueue_Error.Log","DB Result Queue push error"); } pIVar3 = local_278; if (local_278 != (IUnknown *)0x0) { local_2e0 = 0; UVar7 = (*local_278->lpVtbl[0x12].AddRef)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } pIVar3 = local_278; if (local_2e0 != 0) { if (local_278 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar7 = (*local_278->lpVtbl[10].Release)(local_278); if ((int)UVar7 < 0) { _com_issue_errorex(UVar7,pIVar3,(_GUID *)&DAT_14029e038); } } if (local_278 != (IUnknown *)0x0) { (*local_278->lpVtbl->Release)(local_278); local_278 = (IUnknown *)0x0; } } local_210 = 0; local_208 = &DAT_14029e010; local_220 = &DAT_14029e010; local_218 = 0; local_228 = 0; Ordinal_9(local_240); Ordinal_9(local_258); if (local_270 != (longlong *)0x0) { (**(code **)(*local_270 + 0x10))(); } if (local_278 != (IUnknown *)0x0) { (*local_278->lpVtbl->Release)(local_278); } if (local_2d0 != (longlong *)0x0) { (**(code **)(*local_2d0 + 0x10))(); } return pIVar15; } /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); }