339 lines
10 KiB
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;
|
|
}
|
|
|