server-re/decomp/AgentManager_Release_x64/full/functions/0x14001ad00.c
2026-10-15 09:58:24 -04:00

184 lines
5.2 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14001ad00 FUN_14001ad00
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_14001ad00(longlong param_1,int param_2,uint *param_3)
{
int *piVar1;
LPCWSTR pWVar2;
undefined8 uVar3;
LPCWSTR pWVar4;
int iVar5;
longlong *plVar6;
char *****pppppcVar7;
longlong lVar8;
uint uVar9;
uint uVar10;
ulonglong uVar11;
uint uVar12;
uint uVar13;
uint uVar14;
uint uVar15;
undefined1 auStack_3a8 [32];
uint local_388;
uint local_380;
uint local_378;
uint local_370;
int local_368;
LPCWSTR local_360;
undefined8 local_358;
int *local_350;
undefined1 local_348;
char ****local_340 [2];
char ***local_330;
char ***local_328;
undefined1 local_318;
undefined7 uStack_317;
undefined8 local_308;
ulonglong local_300;
undefined1 local_2f0 [6];
ushort local_2ea;
undefined1 local_2e0 [8];
ushort local_2d8;
undefined1 local_2d0 [2];
ushort local_2ce;
undefined1 local_2c0 [12];
ushort local_2b4;
undefined1 local_2b0 [10];
ushort local_2a6;
ushort local_2a0 [8];
void *local_290 [3];
ulonglong local_278;
undefined4 local_268;
undefined4 local_264;
char local_260 [520];
ulonglong local_58;
local_358 = 0xfffffffffffffffe;
local_58 = DAT_14016f5a0 ^ (ulonglong)auStack_3a8;
local_368 = param_2;
memset(local_260,0,0x200);
local_268 = 0x208;
local_264 = 0x4e26;
local_328 = (char ***)0xf;
local_330 = (char ***)0x0;
local_340[0] = (char ****)((ulonglong)local_340[0] & 0xffffffffffffff00);
plVar6 = FUN_140010200((longlong *)local_290,&DAT_140175048);
pppppcVar7 = (char *****)FUN_1400102b0((undefined8 *)&local_318,plVar6);
if (local_340 != pppppcVar7) {
if ((char ****)0xf < local_328) {
operator_delete(local_340[0]);
}
local_328 = (char ***)0xf;
local_330 = (char ***)0x0;
local_340[0] = (char ****)((ulonglong)local_340[0] & 0xffffffffffffff00);
if (pppppcVar7[3] < (char ****)0x10) {
memmove(local_340,pppppcVar7,(longlong)pppppcVar7[2] + 1);
}
else {
local_340[0] = *pppppcVar7;
*pppppcVar7 = (char ****)0x0;
}
local_330 = (char ***)pppppcVar7[2];
local_328 = (char ***)pppppcVar7[3];
pppppcVar7[3] = (char ****)0xf;
pppppcVar7[2] = (char ****)0x0;
*(undefined1 *)pppppcVar7 = 0;
}
if (0xf < local_300) {
operator_delete((void *)CONCAT71(uStack_317,local_318));
}
local_300 = 0xf;
local_308 = 0;
local_318 = 0;
if (0xf < local_278) {
operator_delete(local_290[0]);
}
FUN_14000c480((ulonglong *)local_340,"<register-server>",0x11);
FUN_14000f580((longlong *)local_340,(ulonglong)*param_3,"code");
FUN_14000f580((longlong *)local_340,(ulonglong)param_3[1],"processid");
FUN_14000f580((longlong *)local_340,(ulonglong)param_3[2],"type");
FUN_14000f580((longlong *)local_340,(ulonglong)param_3[3],"world");
FUN_14000f580((longlong *)local_340,(ulonglong)param_3[4],"version");
FUN_14000fa00((longlong *)local_340,(LPCWSTR)(param_3 + 8),"name");
uVar3 = *(undefined8 *)(param_3 + 6);
lVar8 = (**(code **)(PTR_PTR_14016f508 + 0x18))(&PTR_PTR_14016f508);
local_360 = (LPCWSTR)(lVar8 + 0x18);
iVar5 = Ordinal_185(uVar3,local_2c0);
uVar14 = 0xffffffff;
uVar15 = (uint)local_2b4;
if (iVar5 == 0) {
uVar15 = uVar14;
}
iVar5 = Ordinal_185(uVar3,local_2b0);
uVar13 = (uint)local_2a6;
if (iVar5 == 0) {
uVar13 = uVar14;
}
iVar5 = Ordinal_185(uVar3,local_2e0);
uVar12 = (uint)local_2d8;
if (iVar5 == 0) {
uVar12 = uVar14;
}
iVar5 = Ordinal_185(uVar3,local_2f0);
uVar10 = (uint)local_2ea;
if (iVar5 == 0) {
uVar10 = uVar14;
}
iVar5 = Ordinal_185(uVar3,local_2d0);
uVar9 = (uint)local_2ce;
if (iVar5 == 0) {
uVar9 = uVar14;
}
iVar5 = Ordinal_185(uVar3,local_2a0);
uVar11 = (ulonglong)local_2a0[0];
if (iVar5 == 0) {
uVar11 = 0xffffffff;
}
local_388 = uVar10;
local_380 = uVar12;
local_378 = uVar13;
local_370 = uVar15;
FUN_14001c310((longlong *)&local_360,L"%d-%d-%d %d:%d:%d",uVar11,(ulonglong)uVar9);
pWVar4 = local_360;
FUN_14000fa00((longlong *)local_340,local_360,"starttime");
FUN_14000c480((ulonglong *)local_340,"</register-server>",0x12);
if (local_330 < (char ****)0x400) {
pppppcVar7 = local_340;
if ((char ****)0xf < local_328) {
pppppcVar7 = (char *****)local_340[0];
}
strncpy(local_260,(char *)pppppcVar7,(size_t)local_330);
}
else {
printf("PWE_RESP_REGISTER_SERVER - Msg Size Full!\n");
}
lVar8 = *(longlong *)(param_1 + 0x58);
if (lVar8 != 0) {
piVar1 = (int *)(lVar8 + 0x70);
local_350 = piVar1;
FUN_14003d040(piVar1);
local_348 = 1;
lVar8 = FUN_14003c450(lVar8,local_368);
if (lVar8 != 0) {
Ordinal_19(*(undefined8 *)(lVar8 + 8),&local_268,0x208,0);
}
FUN_14003d0d0((longlong)piVar1);
}
LOCK();
pWVar2 = pWVar4 + -4;
iVar5 = *(int *)pWVar2;
*(int *)pWVar2 = *(int *)pWVar2 + -1;
UNLOCK();
if (iVar5 + -1 < 1) {
(**(code **)(**(longlong **)(pWVar4 + -0xc) + 8))();
}
if ((char ****)0xf < local_328) {
operator_delete(local_340[0]);
}
return;
}