server-re/decomp/DBCServer_Release_x64/full/functions/0x1400a5bf0.c

339 lines
10 KiB
C

/* 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;
}