/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400a63f0 FUN_1400a63f0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ IID * FUN_1400a63f0(undefined8 *param_1,undefined8 param_2,longlong param_3) { uchar *puVar1; IUnknown *pIVar2; IUnknown *This; ULONG UVar3; int iVar4; HRESULT HVar5; undefined8 *puVar6; undefined8 uVar7; undefined8 uVar8; longlong lVar9; void *_Dst; IID *riid; IID *pIVar10; IID *pIVar11; undefined1 auStackY_228 [32]; char local_1f8 [4]; uint local_1f4; IID *local_1f0; longlong *local_1e8; LPUNKNOWN local_1e0; undefined8 local_1d8; undefined8 *local_1d0; IUnknown *local_1c8; longlong *local_1c0; undefined4 local_1b8; undefined1 local_1a8 [24]; undefined1 local_190 [24]; undefined4 local_178; undefined1 *local_170; undefined4 local_168; undefined8 local_160; undefined1 *local_158; undefined8 local_148; undefined1 local_140; undefined8 local_138; undefined1 local_130; undefined8 local_128; undefined1 local_120; undefined8 local_118; undefined1 local_110; undefined1 local_108 [40]; undefined8 local_e0; IID local_d8 [8]; undefined2 local_56; ulonglong local_48; local_e0 = 0xfffffffffffffffe; local_48 = DAT_1403463c0 ^ (ulonglong)auStackY_228; pIVar2 = *(IUnknown **)*param_1; local_1d8 = param_2; local_1d0 = param_1; if (pIVar2 == (IUnknown *)0x0) { LAB_1400a647f: iVar4 = FUN_1400a80c0(param_1); if (iVar4 == 0) { FUN_1400a8040(param_1,param_2,0); return (IID *)0x0; } } else { local_1f4 = 0; UVar3 = (*pIVar2->lpVtbl[0xb].AddRef)(pIVar2); if ((int)UVar3 < 0) { _com_issue_errorex(UVar3,pIVar2,(_GUID *)&DAT_14029e018); } if (local_1f4 == 0) goto LAB_1400a647f; } local_1e8 = (longlong *)0x0; iVar4 = FUN_140001990(&local_1e8); if ((iVar4 < 0) && (iVar4 != -0x7fffbffe)) { /* WARNING: Subroutine does not return */ FUN_140218220(iVar4); } local_1c8 = (IUnknown *)0x0; local_1c0 = (longlong *)0x0; Ordinal_8(local_1a8); Ordinal_8(local_190); pIVar2 = local_1c8; if ((local_1c8 != (IUnknown *)0x0) && (local_1c8 = (IUnknown *)0x0, pIVar2 != (IUnknown *)0x0)) { (*pIVar2->lpVtbl->Release)(pIVar2); } local_158 = &DAT_14029e010; local_170 = &DAT_14029e010; local_168 = 0; local_160 = 0; if (local_1c8 != (IUnknown *)0x0) { (*local_1c8->lpVtbl->Release)(local_1c8); } HVar5 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0, &local_1e0); if (HVar5 < 0) { LAB_1400a65a4: local_1c8 = (IUnknown *)0x0; } else { HVar5 = OleRun(local_1e0); if (-1 < HVar5) { HVar5 = (*local_1e0->lpVtbl->QueryInterface)(local_1e0,(IID *)&DAT_14029e078,&local_1c8); } (*local_1e0->lpVtbl->Release)(local_1e0); if (HVar5 < 0) goto LAB_1400a65a4; } local_178 = 2; local_1b8 = 1; local_1f8[0] = '\x01'; puVar6 = (undefined8 *)FUN_140001f40(*param_1,&local_1f0); FUN_140001700(&local_1e8,*puVar6,"dbo.up_read_world_server"); if (local_1f0 != (IID *)0x0) { (**(code **)(*(longlong *)local_1f0 + 0x10))(); } puVar6 = (undefined8 *)FUN_1400016c0(&local_1e8,&local_1f0); This = local_1c8; pIVar2 = (IUnknown *)*puVar6; if (local_1c8 != pIVar2) { local_1c8 = pIVar2; if (pIVar2 != (IUnknown *)0x0) { (*pIVar2->lpVtbl->AddRef)(pIVar2); } if (This != (IUnknown *)0x0) { (*This->lpVtbl->Release)(This); } } if (local_1f0 != (IID *)0x0) { (**(code **)(*(longlong *)local_1f0 + 0x10))(); } pIVar2 = local_1c8; if (local_1c8 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_1f4 = local_1f4 & 0xffff0000; UVar3 = (*local_1c8->lpVtbl[6].Release)(local_1c8); if ((int)UVar3 < 0) { _com_issue_errorex(UVar3,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_1f4 != -1) { while( true ) { pIVar2 = local_1c8; if (local_1c8 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_1f4 = local_1f4 & 0xffff0000; UVar3 = (*local_1c8->lpVtbl[6].Release)(local_1c8); if ((int)UVar3 < 0) { _com_issue_errorex(UVar3,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_1f4 == -1) break; local_d8[0].Data1 = 0; memset(&local_d8[0].Data2,0,0x80); uVar7 = FUN_140002290(&local_1c8,local_108,"World",local_1f8); FUN_140199590(uVar7); local_d8[0].Data1 = FUN_140063af0(uVar7); Ordinal_9(local_108); uVar7 = FUN_140002290(&local_1c8,local_108,&DAT_1402a6218,local_1f8); FUN_140063de0(uVar7,&local_1f0); FUN_14016d8c0(); pIVar11 = (IID *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { pIVar11 = (IID *)0x0; } if (local_1f0 != (IID *)PTR_DAT_1403440a0) { uVar7 = FUN_14016d8c0(); local_140 = 0; local_148 = uVar7; FUN_14016db50(uVar7); local_140 = 1; if (((pIVar11 != (IID *)0x0) && (pIVar11 != (IID *)PTR_DAT_1403440a0)) && (pIVar11[-1].Data4 != (uchar *)0x0)) { uVar8 = FUN_14016d8c0(); local_110 = 0; local_118 = uVar8; FUN_14016db50(uVar8); local_110 = 1; puVar1 = pIVar11[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar11[-1].Data4); } FUN_14016dbe0(uVar8); local_110 = 0; } pIVar11 = local_1f0; if (((local_1f0 != (IID *)PTR_DAT_1403440a0) && (local_1f0 != (IID *)0x0)) && (local_1f0 != (IID *)0x8)) { *(int *)(local_1f0[-1].Data4 + 4) = *(int *)(local_1f0[-1].Data4 + 4) + 1; } FUN_14016dbe0(uVar7); local_140 = 0; } riid = pIVar11; if (pIVar11 == (IID *)0x0) { riid = (IID *)PTR_DAT_1403440a0; } wcsncpy((wchar_t *)&local_d8[0].Data2,(wchar_t *)riid,0x3f); if (((pIVar11 != (IID *)0x0) && (pIVar11 != (IID *)PTR_DAT_1403440a0)) && (pIVar11[-1].Data4 != (uchar *)0x0)) { uVar7 = FUN_14016d8c0(); local_130 = 0; local_138 = uVar7; FUN_14016db50(uVar7); local_130 = 1; puVar1 = pIVar11[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar11[-1].Data4); } FUN_14016dbe0(uVar7); local_130 = 0; } pIVar11 = local_1f0; if (((local_1f0 != (IID *)0x0) && (local_1f0 != (IID *)PTR_DAT_1403440a0)) && (pIVar10 = local_1f0 + -1, pIVar10->Data4 != (uchar *)0x0)) { uVar7 = FUN_14016d8c0(); local_120 = 0; local_128 = uVar7; FUN_14016db50(uVar7); local_120 = 1; puVar1 = pIVar11[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar10->Data4); } FUN_14016dbe0(uVar7); local_120 = 0; } local_1f0 = (IID *)PTR_DAT_1403440a0; Ordinal_9(local_108); local_56 = 0; pIVar11 = *(IID **)(param_3 + 0x16); if ((local_d8 < pIVar11) && (*(IID **)(param_3 + 0xe) <= local_d8)) { lVar9 = (longlong)local_d8 - (longlong)*(IID **)(param_3 + 0xe); riid = SUB168(SEXT816(0xf83e0f83e0f83e1) * SEXT816(lVar9),8); if (pIVar11 == *(IID **)(param_3 + 0x1e)) { FUN_140049a40(param_3 + 0xe); } pIVar10 = (IID *)((lVar9 / 0x84) * 0x84 + *(longlong *)(param_3 + 0xe)); _Dst = *(void **)(param_3 + 0x16); if (_Dst != (void *)0x0) { LAB_1400a69f3: pIVar11 = (IID *)0x84; memcpy(_Dst,pIVar10,0x84); riid = pIVar10; } } else { if (pIVar11 == *(IID **)(param_3 + 0x1e)) { FUN_140049a40(param_3 + 0xe); } _Dst = *(void **)(param_3 + 0x16); if (_Dst != (void *)0x0) { pIVar10 = local_d8; goto LAB_1400a69f3; } } pIVar2 = local_1c8; *(longlong *)(param_3 + 0x16) = *(longlong *)(param_3 + 0x16) + 0x84; if (local_1c8 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } HVar5 = (*local_1c8->lpVtbl[0xc].QueryInterface)(local_1c8,riid,(void **)pIVar11); if (HVar5 < 0) { _com_issue_errorex(HVar5,pIVar2,(_GUID *)&DAT_14029e038); } } pIVar11 = (IID *)0x1; if (local_1f8[0] != '\0') goto LAB_1400a6a53; } *(undefined2 *)(param_3 + 0xc) = 0; pIVar11 = (IID *)0x0; LAB_1400a6a53: pIVar2 = local_1c8; if (local_1c8 != (IUnknown *)0x0) { local_1f4 = 0; UVar3 = (*local_1c8->lpVtbl[0x12].AddRef)(local_1c8); if ((int)UVar3 < 0) { _com_issue_errorex(UVar3,pIVar2,(_GUID *)&DAT_14029e038); } pIVar2 = local_1c8; if (local_1f4 != 0) { if (local_1c8 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar3 = (*local_1c8->lpVtbl[10].Release)(local_1c8); if ((int)UVar3 < 0) { _com_issue_errorex(UVar3,pIVar2,(_GUID *)&DAT_14029e038); } } if (local_1c8 != (IUnknown *)0x0) { (*local_1c8->lpVtbl->Release)(local_1c8); local_1c8 = (IUnknown *)0x0; } } local_160 = 0; local_158 = &DAT_14029e010; local_170 = &DAT_14029e010; local_168 = 0; local_178 = 0; Ordinal_9(local_190); Ordinal_9(local_1a8); if (local_1c0 != (longlong *)0x0) { (**(code **)(*local_1c0 + 0x10))(); } if (local_1c8 != (IUnknown *)0x0) { (*local_1c8->lpVtbl->Release)(local_1c8); } if (local_1e8 != (longlong *)0x0) { (**(code **)(*local_1e8 + 0x10))(); } return pIVar11; }