/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400a2250 FUN_1400a2250 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ bool FUN_1400a2250(undefined8 *param_1,undefined8 param_2) { longlong *plVar1; IUnknown *pIVar2; undefined8 *puVar3; IUnknown *This; int iVar4; HRESULT HVar5; ULONG UVar6; int iVar7; int iVar8; int iVar9; int iVar10; int iVar11; longlong lVar12; undefined8 *puVar13; undefined8 uVar14; IID *riid; longlong *plVar15; longlong lVar16; ulonglong *puVar17; bool bVar18; undefined1 auStackY_288 [32]; char local_258 [4]; uint local_254; undefined1 local_250 [24]; int local_238; undefined4 uStack_234; longlong *local_230; IUnknown *local_228; longlong *local_220; undefined4 local_218; undefined1 local_208 [24]; undefined1 local_1f0 [24]; undefined4 local_1d8; undefined1 *local_1d0; undefined4 local_1c8; undefined8 local_1c0; undefined1 *local_1b8; undefined4 local_1a8; undefined4 uStack_1a4; longlong lStack_1a0; undefined8 local_198; undefined8 uStack_190; undefined8 local_188; undefined8 uStack_180; undefined8 local_178; undefined8 uStack_170; undefined8 local_168; undefined8 uStack_160; undefined8 local_158; int local_148; int local_144; int local_140; int local_13c; int local_138; int local_134; int local_130; int local_12c; int local_128; int local_124; int local_120; undefined8 *local_118; longlong local_110; undefined1 local_108 [40]; undefined8 local_e0; uint local_d8 [2]; undefined8 local_d0; longlong lStack_c8; undefined8 local_c0; undefined8 uStack_b8; undefined8 local_b0; undefined8 uStack_a8; undefined8 local_a0; undefined8 uStack_98; undefined4 local_90; undefined4 uStack_8c; undefined4 uStack_88; undefined4 uStack_84; undefined8 local_80; longlong *local_78; ulonglong local_70; undefined1 local_60; longlong local_58; undefined4 local_50; undefined8 local_48; undefined8 local_40; ulonglong local_38; local_e0 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStackY_288; local_230 = (longlong *)0x0; local_118 = param_1; iVar4 = FUN_140001990(&local_230); if ((iVar4 < 0) && (iVar4 != -0x7fffbffe)) { /* WARNING: Subroutine does not return */ FUN_140218220(iVar4); } local_228 = (IUnknown *)0x0; local_220 = (longlong *)0x0; Ordinal_8(local_208); Ordinal_8(local_1f0); pIVar2 = local_228; if ((local_228 != (IUnknown *)0x0) && (local_228 = (IUnknown *)0x0, pIVar2 != (IUnknown *)0x0)) { (*pIVar2->lpVtbl->Release)(pIVar2); } local_1b8 = &DAT_14029e010; local_1d0 = &DAT_14029e010; local_1c8 = 0; local_1c0 = 0; if (local_228 != (IUnknown *)0x0) { (*local_228->lpVtbl->Release)(local_228); } HVar5 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0, (LPVOID *)&local_238); if (HVar5 < 0) { LAB_1400a239c: local_228 = (IUnknown *)0x0; } else { HVar5 = OleRun((LPUNKNOWN)CONCAT44(uStack_234,local_238)); if (-1 < HVar5) { HVar5 = (*(code *)**(undefined8 **)CONCAT44(uStack_234,local_238)) ((undefined8 *)CONCAT44(uStack_234,local_238),&DAT_14029e078,&local_228); } (**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))(); if (HVar5 < 0) goto LAB_1400a239c; } local_1d8 = 2; bVar18 = true; local_218 = 1; local_258[0] = '\x01'; pIVar2 = *(IUnknown **)*param_1; if (pIVar2 != (IUnknown *)0x0) { local_254 = 0; UVar6 = (*pIVar2->lpVtbl[0xb].AddRef)(pIVar2); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e018); } if (local_254 != 0) goto LAB_1400a252c; } iVar4 = FUN_1400a80c0(param_1); if (iVar4 == 0) { FUN_1400a8040(param_1,param_2,0); pIVar2 = local_228; if (local_228 != (IUnknown *)0x0) { local_254 = 0; UVar6 = (*local_228->lpVtbl[0x12].AddRef)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } pIVar2 = local_228; if (local_254 != 0) { if (local_228 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar6 = (*local_228->lpVtbl[10].Release)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } } if (local_228 != (IUnknown *)0x0) { (*local_228->lpVtbl->Release)(local_228); local_228 = (IUnknown *)0x0; } } local_1c0 = 0; local_1b8 = &DAT_14029e010; local_1d0 = &DAT_14029e010; local_1c8 = 0; local_1d8 = 0; Ordinal_9(local_1f0); Ordinal_9(local_208); if (local_220 != (longlong *)0x0) { (**(code **)(*local_220 + 0x10))(); } if (local_228 != (IUnknown *)0x0) { (*local_228->lpVtbl->Release)(local_228); } if (local_230 != (longlong *)0x0) { (**(code **)(*local_230 + 0x10))(); } return false; } LAB_1400a252c: puVar17 = &DAT_1402a81a0; lVar16 = 0x28; do { lVar12 = lVar16 / 2; if (puVar17[lVar12] < 0xb) { puVar17 = puVar17 + lVar12 + 1; lVar12 = lVar16 + (-1 - lVar12); } lVar16 = lVar12; } while (0 < lVar12); if (puVar17 == (ulonglong *)"dbo.up_read_realtimeevent") { puVar17 = (ulonglong *)&UNK_1402a82d8; } local_70 = *puVar17; local_78 = (longlong *)0x0; local_60 = 0; local_58 = 0; local_50 = 0x3f800000; local_48 = 0; local_40 = 0; puVar13 = (undefined8 *)FUN_140001f40(*param_1,&local_238); FUN_140001700(&local_230,*puVar13,"dbo.up_get_duel_info_statistics"); if ((longlong *)CONCAT44(uStack_234,local_238) != (longlong *)0x0) { (**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))(); } puVar13 = (undefined8 *)FUN_1400016c0(&local_230,&local_238); This = local_228; pIVar2 = (IUnknown *)*puVar13; if (local_228 != pIVar2) { local_228 = pIVar2; if (pIVar2 != (IUnknown *)0x0) { (*pIVar2->lpVtbl->AddRef)(pIVar2); } if (This != (IUnknown *)0x0) { (*This->lpVtbl->Release)(This); } } if ((longlong *)CONCAT44(uStack_234,local_238) != (longlong *)0x0) { (**(code **)(*(longlong *)CONCAT44(uStack_234,local_238) + 0x10))(); } pIVar2 = local_228; if (local_228 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_254 = local_254 & 0xffff0000; UVar6 = (*local_228->lpVtbl[6].Release)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_254 == -1) { LAB_1400a2eaf: FUN_14009f490(&local_78); if (local_78 != (longlong *)0x0) { plVar1 = local_78 + local_70; for (plVar15 = local_78; plVar15 != plVar1; plVar15 = plVar15 + 1) { puVar13 = (undefined8 *)*plVar15; *plVar15 = 0; while (puVar13 != (undefined8 *)0x0) { puVar3 = (undefined8 *)*puVar13; operator_delete(puVar13); puVar13 = puVar3; } } operator_delete(local_78); local_78 = (longlong *)0x0; } pIVar2 = local_228; if (local_228 != (IUnknown *)0x0) { local_254 = 0; UVar6 = (*local_228->lpVtbl[0x12].AddRef)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } pIVar2 = local_228; if (local_254 != 0) { if (local_228 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar6 = (*local_228->lpVtbl[10].Release)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } } if (local_228 != (IUnknown *)0x0) { (*local_228->lpVtbl->Release)(local_228); local_228 = (IUnknown *)0x0; } } local_1c0 = 0; local_1b8 = &DAT_14029e010; local_1d0 = &DAT_14029e010; local_1c8 = 0; local_1d8 = 0; Ordinal_9(local_1f0); Ordinal_9(local_208); if (local_220 != (longlong *)0x0) { (**(code **)(*local_220 + 0x10))(); } if (local_228 != (IUnknown *)0x0) { (*local_228->lpVtbl->Release)(local_228); } if (local_230 != (longlong *)0x0) { (**(code **)(*local_230 + 0x10))(); } return bVar18; } LAB_1400a26a0: do { pIVar2 = local_228; if (local_228 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_254 = local_254 & 0xffff0000; UVar6 = (*local_228->lpVtbl[6].Release)(local_228); if ((int)UVar6 < 0) { _com_issue_errorex(UVar6,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_254 == -1) { bVar18 = local_258[0] != '\0'; goto LAB_1400a2eaf; } local_1a8 = 0; lStack_1a0 = 0; local_198 = 0; uStack_190 = 0; local_188 = 0; uStack_180 = 0; local_178 = 0; uStack_170 = 0; local_168 = 0; uStack_160 = 0; local_158 = 0; uVar14 = FUN_140002290(&local_228,local_108,"char_class",local_258); FUN_140199590(uVar14); local_254 = FUN_140063af0(uVar14); Ordinal_9(local_108); uVar14 = FUN_140002290(&local_228,local_250,"duel_exp",local_258); FUN_140199590(uVar14); lStack_1a0 = FUN_140199670(uVar14); local_110 = lStack_1a0; Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"duel_point",local_258); FUN_140199590(uVar14); local_130 = FUN_140063af0(uVar14); local_198 = CONCAT44(local_198._4_4_,local_130); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"duel_disconnect",local_258); FUN_140199590(uVar14); local_144 = FUN_140063af0(uVar14); local_198 = CONCAT44(local_144,(undefined4)local_198); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"total_win",local_258); FUN_140199590(uVar14); local_13c = FUN_140063af0(uVar14); uStack_190 = CONCAT44(uStack_190._4_4_,local_13c); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"total_lose",local_258); FUN_140199590(uVar14); local_120 = FUN_140063af0(uVar14); uStack_190 = CONCAT44(local_120,(undefined4)uStack_190); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"pvp_win",local_258); FUN_140199590(uVar14); local_124 = FUN_140063af0(uVar14); local_188 = CONCAT44(local_188._4_4_,local_124); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"pvp_lose",local_258); FUN_140199590(uVar14); local_140 = FUN_140063af0(uVar14); local_188 = CONCAT44(local_140,(undefined4)local_188); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"team_win",local_258); FUN_140199590(uVar14); local_128 = FUN_140063af0(uVar14); uStack_180 = CONCAT44(uStack_180._4_4_,local_128); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"team_lose",local_258); FUN_140199590(uVar14); local_12c = FUN_140063af0(uVar14); uStack_180 = CONCAT44(local_12c,(undefined4)uStack_180); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"leader_win",local_258); FUN_140199590(uVar14); local_138 = FUN_140063af0(uVar14); local_178 = CONCAT44(local_178._4_4_,local_138); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"leader_lose",local_258); FUN_140199590(uVar14); local_134 = FUN_140063af0(uVar14); local_178 = CONCAT44(local_134,(undefined4)local_178); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"tag_win",local_258); FUN_140199590(uVar14); local_148 = FUN_140063af0(uVar14); uStack_170 = CONCAT44(uStack_170._4_4_,local_148); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"tag_lose",local_258); FUN_140199590(uVar14); local_238 = FUN_140063af0(uVar14); uStack_170 = CONCAT44(local_238,(undefined4)uStack_170); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"death_win",local_258); FUN_140199590(uVar14); iVar4 = FUN_140063af0(uVar14); local_168 = CONCAT44(local_168._4_4_,iVar4); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"death_lose",local_258); FUN_140199590(uVar14); iVar7 = FUN_140063af0(uVar14); local_168 = CONCAT44(iVar7,(undefined4)local_168); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"ladder_win",local_258); FUN_140199590(uVar14); iVar8 = FUN_140063af0(uVar14); uStack_160 = CONCAT44(uStack_160._4_4_,iVar8); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"ladder_lose",local_258); FUN_140199590(uVar14); iVar9 = FUN_140063af0(uVar14); uStack_160 = CONCAT44(iVar9,(undefined4)uStack_160); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"duel_ladder_point",local_258); FUN_140199590(uVar14); iVar10 = FUN_140063af0(uVar14); local_158 = CONCAT44(local_158._4_4_,iVar10); Ordinal_9(local_250); uVar14 = FUN_140002290(&local_228,local_250,"duel_ladder_exp",local_258); FUN_140199590(uVar14); iVar11 = FUN_140063af0(uVar14); local_158 = CONCAT44(iVar11,(undefined4)local_158); Ordinal_9(local_250); pIVar2 = local_228; if (local_58 != 0) { riid = (IID *)((ulonglong)(longlong)(int)local_254 % local_70); for (puVar13 = (undefined8 *)local_78[(longlong)riid]; puVar13 != (undefined8 *)0x0; puVar13 = (undefined8 *)*puVar13) { if (local_254 == *(uint *)(puVar13 + 1)) { if (puVar13 != (undefined8 *)0x0) { *(int *)(puVar13 + 2) = *(int *)(puVar13 + 2) + 1; puVar13[3] = puVar13[3] + local_110; *(int *)(puVar13 + 4) = *(int *)(puVar13 + 4) + local_130; *(int *)((longlong)puVar13 + 0x24) = *(int *)((longlong)puVar13 + 0x24) + local_144; *(int *)(puVar13 + 5) = *(int *)(puVar13 + 5) + local_13c; *(int *)((longlong)puVar13 + 0x2c) = *(int *)((longlong)puVar13 + 0x2c) + local_120; *(int *)(puVar13 + 6) = *(int *)(puVar13 + 6) + local_124; *(int *)((longlong)puVar13 + 0x34) = *(int *)((longlong)puVar13 + 0x34) + local_140; *(int *)(puVar13 + 7) = *(int *)(puVar13 + 7) + local_128; *(int *)((longlong)puVar13 + 0x3c) = *(int *)((longlong)puVar13 + 0x3c) + local_12c; *(int *)(puVar13 + 8) = *(int *)(puVar13 + 8) + local_138; *(int *)((longlong)puVar13 + 0x44) = *(int *)((longlong)puVar13 + 0x44) + local_134; *(int *)(puVar13 + 9) = *(int *)(puVar13 + 9) + local_148; *(int *)((longlong)puVar13 + 0x4c) = *(int *)((longlong)puVar13 + 0x4c) + local_238; *(int *)(puVar13 + 10) = *(int *)(puVar13 + 10) + iVar4; *(int *)((longlong)puVar13 + 0x54) = *(int *)((longlong)puVar13 + 0x54) + iVar7; *(int *)(puVar13 + 0xb) = *(int *)(puVar13 + 0xb) + iVar8; *(int *)((longlong)puVar13 + 0x5c) = *(int *)((longlong)puVar13 + 0x5c) + iVar9; *(int *)(puVar13 + 0xc) = *(int *)(puVar13 + 0xc) + iVar10; *(int *)((longlong)puVar13 + 100) = *(int *)((longlong)puVar13 + 100) + iVar11; if (local_228 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } HVar5 = (*local_228->lpVtbl[0xc].QueryInterface) (local_228,riid,(void **)(longlong)(int)local_254); if (HVar5 < 0) { _com_issue_errorex(HVar5,pIVar2,(_GUID *)&DAT_14029e038); } goto LAB_1400a26a0; } break; } } } local_1a8 = 1; local_d8[0] = local_254; local_d0 = CONCAT44(uStack_1a4,1); lStack_c8 = lStack_1a0; local_c0 = local_198; uStack_b8 = uStack_190; local_b0 = local_188; uStack_a8 = uStack_180; local_a0 = local_178; uStack_98 = uStack_170; local_90 = (undefined4)local_168; uStack_8c = local_168._4_4_; uStack_88 = (undefined4)uStack_160; uStack_84 = uStack_160._4_4_; local_80 = local_158; if (local_58 == 0) { FUN_1400a5420(&local_78,local_108,local_d8); } else { FUN_1400a52f0(&local_78,local_250,local_d8,local_d8); } } while( true ); }