/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1400a5bf0 FUN_1400a5bf0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ IID * FUN_1400a5bf0(undefined8 *param_1,undefined8 param_2,longlong param_3) { uchar *puVar1; IUnknown *pIVar2; IUnknown *This; undefined2 uVar3; ULONG UVar4; int iVar5; HRESULT HVar6; ulong uVar7; undefined4 uVar8; undefined8 *puVar9; undefined8 uVar10; undefined8 uVar11; longlong lVar12; void *_Dst; IID *riid; IID *pIVar13; IID *pIVar14; undefined1 auStackY_2a8 [32]; char local_278 [4]; uint local_274; IID *local_270; longlong *local_268; LPUNKNOWN local_260; undefined8 local_258; undefined8 *local_250; IUnknown *local_248; longlong *local_240; undefined4 local_238; undefined1 local_228 [24]; undefined1 local_210 [24]; undefined4 local_1f8; undefined1 *local_1f0; undefined4 local_1e8; undefined8 local_1e0; undefined1 *local_1d8; undefined8 local_1c8; undefined1 local_1c0; undefined8 local_1b8; undefined1 local_1b0; undefined8 local_1a8; undefined1 local_1a0; undefined8 local_198; undefined1 local_190; undefined1 local_188 [40]; undefined8 local_160; IID local_158 [16]; undefined2 local_52; ulonglong local_48; local_160 = 0xfffffffffffffffe; local_48 = DAT_1403463c0 ^ (ulonglong)auStackY_2a8; pIVar2 = *(IUnknown **)*param_1; local_258 = param_2; local_250 = param_1; if (pIVar2 == (IUnknown *)0x0) { LAB_1400a5c7f: iVar5 = FUN_1400a80c0(param_1); if (iVar5 == 0) { FUN_1400a8040(param_1,param_2,0); return (IID *)0x0; } } else { local_274 = 0; UVar4 = (*pIVar2->lpVtbl[0xb].AddRef)(pIVar2); if ((int)UVar4 < 0) { _com_issue_errorex(UVar4,pIVar2,(_GUID *)&DAT_14029e018); } if (local_274 == 0) goto LAB_1400a5c7f; } local_268 = (longlong *)0x0; iVar5 = FUN_140001990(&local_268); if ((iVar5 < 0) && (iVar5 != -0x7fffbffe)) { /* WARNING: Subroutine does not return */ FUN_140218220(iVar5); } local_248 = (IUnknown *)0x0; local_240 = (longlong *)0x0; Ordinal_8(local_228); Ordinal_8(local_210); pIVar2 = local_248; if ((local_248 != (IUnknown *)0x0) && (local_248 = (IUnknown *)0x0, pIVar2 != (IUnknown *)0x0)) { (*pIVar2->lpVtbl->Release)(pIVar2); } local_1d8 = &DAT_14029e010; local_1f0 = &DAT_14029e010; local_1e8 = 0; local_1e0 = 0; if (local_248 != (IUnknown *)0x0) { (*local_248->lpVtbl->Release)(local_248); } HVar6 = CoCreateInstance((IID *)&DAT_14029e088,(LPUNKNOWN)0x0,0x17,(IID *)&DAT_14029dfb0, &local_260); if (HVar6 < 0) { LAB_1400a5da4: local_248 = (IUnknown *)0x0; } else { HVar6 = OleRun(local_260); if (-1 < HVar6) { HVar6 = (*local_260->lpVtbl->QueryInterface)(local_260,(IID *)&DAT_14029e078,&local_248); } (*local_260->lpVtbl->Release)(local_260); if (HVar6 < 0) goto LAB_1400a5da4; } local_1f8 = 2; local_238 = 1; local_278[0] = '\x01'; puVar9 = (undefined8 *)FUN_140001f40(*param_1,&local_270); FUN_140001700(&local_268,*puVar9,"dbo.up_read_realtimeevent"); if (local_270 != (IID *)0x0) { (**(code **)(*(longlong *)local_270 + 0x10))(); } puVar9 = (undefined8 *)FUN_1400016c0(&local_268,&local_270); This = local_248; pIVar2 = (IUnknown *)*puVar9; if (local_248 != pIVar2) { local_248 = pIVar2; if (pIVar2 != (IUnknown *)0x0) { (*pIVar2->lpVtbl->AddRef)(pIVar2); } if (This != (IUnknown *)0x0) { (*This->lpVtbl->Release)(This); } } if (local_270 != (IID *)0x0) { (**(code **)(*(longlong *)local_270 + 0x10))(); } pIVar2 = local_248; if (local_248 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_274 = local_274 & 0xffff0000; UVar4 = (*local_248->lpVtbl[6].Release)(local_248); if ((int)UVar4 < 0) { _com_issue_errorex(UVar4,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_274 == -1) { uVar3 = 0x133; } else { while( true ) { pIVar2 = local_248; if (local_248 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } local_274 = local_274 & 0xffff0000; UVar4 = (*local_248->lpVtbl[6].Release)(local_248); if ((int)UVar4 < 0) { _com_issue_errorex(UVar4,pIVar2,(_GUID *)&DAT_14029e038); } if ((short)local_274 == -1) break; local_158[0].Data1 = 0; local_158[0].Data2 = 0; local_158[0].Data3 = 0; memset(local_158[0].Data4,0,0x100); uVar10 = FUN_140002290(&local_248,local_188,&DAT_1402a82fc,local_278); FUN_140199590(uVar10); uVar7 = FUN_140063af0(uVar10); local_158[0].Data1 = uVar7; Ordinal_9(local_188); uVar10 = FUN_140002290(&local_248,local_188,"value",local_278); FUN_140199590(uVar10); uVar8 = FUN_140063af0(uVar10); local_158[0].Data2 = (short)uVar8; local_158[0].Data3 = (short)((uint)uVar8 >> 0x10); Ordinal_9(local_188); uVar10 = FUN_140002290(&local_248,local_188,"information",local_278); FUN_140063de0(uVar10,&local_270); FUN_14016d8c0(); pIVar14 = (IID *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { pIVar14 = (IID *)0x0; } if (local_270 != (IID *)PTR_DAT_1403440a0) { uVar10 = FUN_14016d8c0(); local_1c0 = 0; local_1c8 = uVar10; FUN_14016db50(uVar10); local_1c0 = 1; if (((pIVar14 != (IID *)0x0) && (pIVar14 != (IID *)PTR_DAT_1403440a0)) && (pIVar14[-1].Data4 != (uchar *)0x0)) { uVar11 = FUN_14016d8c0(); local_190 = 0; local_198 = uVar11; FUN_14016db50(uVar11); local_190 = 1; puVar1 = pIVar14[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar14[-1].Data4); } FUN_14016dbe0(uVar11); local_190 = 0; } pIVar14 = local_270; if (((local_270 != (IID *)PTR_DAT_1403440a0) && (local_270 != (IID *)0x0)) && (local_270 != (IID *)0x8)) { *(int *)(local_270[-1].Data4 + 4) = *(int *)(local_270[-1].Data4 + 4) + 1; } FUN_14016dbe0(uVar10); local_1c0 = 0; } riid = pIVar14; if (pIVar14 == (IID *)0x0) { riid = (IID *)PTR_DAT_1403440a0; } wcsncpy((wchar_t *)local_158[0].Data4,(wchar_t *)riid,0x7f); if (((pIVar14 != (IID *)0x0) && (pIVar14 != (IID *)PTR_DAT_1403440a0)) && (pIVar14[-1].Data4 != (uchar *)0x0)) { uVar10 = FUN_14016d8c0(); local_1b0 = 0; local_1b8 = uVar10; FUN_14016db50(uVar10); local_1b0 = 1; puVar1 = pIVar14[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar14[-1].Data4); } FUN_14016dbe0(uVar10); local_1b0 = 0; } pIVar14 = local_270; if (((local_270 != (IID *)0x0) && (local_270 != (IID *)PTR_DAT_1403440a0)) && (pIVar13 = local_270 + -1, pIVar13->Data4 != (uchar *)0x0)) { uVar10 = FUN_14016d8c0(); local_1a0 = 0; local_1a8 = uVar10; FUN_14016db50(uVar10); local_1a0 = 1; puVar1 = pIVar14[-1].Data4 + 4; *(int *)puVar1 = *(int *)puVar1 + -1; if (*(int *)puVar1 == 0) { FUN_14016d970(pIVar13->Data4); } FUN_14016dbe0(uVar10); local_1a0 = 0; } local_270 = (IID *)PTR_DAT_1403440a0; Ordinal_9(local_188); local_52 = 0; pIVar14 = *(IID **)(param_3 + 0x16); if ((local_158 < pIVar14) && (*(IID **)(param_3 + 0xe) <= local_158)) { lVar12 = (longlong)local_158 - (longlong)*(IID **)(param_3 + 0xe); riid = SUB168(SEXT816(0xf83e0f83e0f83e1) * SEXT816(lVar12),8); if (pIVar14 == *(IID **)(param_3 + 0x1e)) { FUN_140049980(param_3 + 0xe); } pIVar13 = (IID *)((lVar12 / 0x108) * 0x108 + *(longlong *)(param_3 + 0xe)); _Dst = *(void **)(param_3 + 0x16); if (_Dst != (void *)0x0) { LAB_1400a623d: pIVar14 = (IID *)0x108; memcpy(_Dst,pIVar13,0x108); riid = pIVar13; } } else { if (pIVar14 == *(IID **)(param_3 + 0x1e)) { FUN_140049980(param_3 + 0xe); } _Dst = *(void **)(param_3 + 0x16); if (_Dst != (void *)0x0) { pIVar13 = local_158; goto LAB_1400a623d; } } pIVar2 = local_248; *(longlong *)(param_3 + 0x16) = *(longlong *)(param_3 + 0x16) + 0x108; if (local_248 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } HVar6 = (*local_248->lpVtbl[0xc].QueryInterface)(local_248,riid,(void **)pIVar14); if (HVar6 < 0) { _com_issue_errorex(HVar6,pIVar2,(_GUID *)&DAT_14029e038); } } pIVar14 = (IID *)0x1; if (local_278[0] != '\0') goto LAB_1400a62a9; uVar3 = 0x134; } *(undefined2 *)(param_3 + 0xc) = uVar3; pIVar14 = (IID *)0x0; LAB_1400a62a9: pIVar2 = local_248; if (local_248 != (IUnknown *)0x0) { local_274 = 0; UVar4 = (*local_248->lpVtbl[0x12].AddRef)(local_248); if ((int)UVar4 < 0) { _com_issue_errorex(UVar4,pIVar2,(_GUID *)&DAT_14029e038); } pIVar2 = local_248; if (local_274 != 0) { if (local_248 == (IUnknown *)0x0) { /* WARNING: Subroutine does not return */ FUN_140218220(0x80004003); } UVar4 = (*local_248->lpVtbl[10].Release)(local_248); if ((int)UVar4 < 0) { _com_issue_errorex(UVar4,pIVar2,(_GUID *)&DAT_14029e038); } } if (local_248 != (IUnknown *)0x0) { (*local_248->lpVtbl->Release)(local_248); local_248 = (IUnknown *)0x0; } } local_1e0 = 0; local_1d8 = &DAT_14029e010; local_1f0 = &DAT_14029e010; local_1e8 = 0; local_1f8 = 0; Ordinal_9(local_210); Ordinal_9(local_228); if (local_240 != (longlong *)0x0) { (**(code **)(*local_240 + 0x10))(); } if (local_248 != (IUnknown *)0x0) { (*local_248->lpVtbl->Release)(local_248); } if (local_268 != (longlong *)0x0) { (**(code **)(*local_268 + 0x10))(); } return pIVar14; }