Complete decompilation of the retail Asheron's Call client using Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions successfully decompiled in 75 seconds. Output: docs/research/decompiled/ (54 files, 688,567 lines of C) Key findings already identified: - CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270 (split direction formula with 0x0CCAC033 constants) - Motion command handlers at chunk_00510000.c (0x45000005 etc) - Motion interpreter at chunk_00520000.c - Portal space UI at chunk_004D0000.c and chunk_00560000.c Next: identify CPhysicsObj, CMotionInterp, collision, and movement functions by cross-referencing against ACE's C# port. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2936 lines
70 KiB
C
2936 lines
70 KiB
C
// Decompiled from acclient.exe — chunk 0x006C0000
|
|
// Ghidra 12.0.4 + pyghidra headless
|
|
|
|
// --- FUN_006c0010 at 0x006C0010 (size: 70) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006c0010(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_00808080;
|
|
|
|
param_1[3] = &PTR_FUN_00807d70;
|
|
|
|
param_1[4] = &PTR_LAB_00807d5c;
|
|
|
|
param_1[0x38] = &PTR_LAB_00807d38;
|
|
|
|
param_1[0x39] = &PTR_LAB_00807d24;
|
|
|
|
FUN_006bf700();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0060 at 0x006C0060 (size: 161) ---
|
|
|
|
|
|
void FUN_006c0060(int param_1,int *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_00808390;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_008083a0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_00808304;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = &DAT_00808350;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *param_2 == *piVar2;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
FUN_006c1ee0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (param_1 != 0) {
|
|
|
|
FUN_006c1e80(param_1 + 0x10,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
goto LAB_006c0093;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (param_1 != 0) {
|
|
|
|
FUN_006c1e80(param_1 + 0xc,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
LAB_006c0093:
|
|
|
|
FUN_006c1e80(0,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0110 at 0x006C0110 (size: 44) ---
|
|
|
|
|
|
void __fastcall FUN_006c0110(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x3c));
|
|
|
|
piVar1 = *(int **)(param_1 + 0x18);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
|
|
}
|
|
|
|
FUN_006c1e30();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c01c0 at 0x006C01C0 (size: 67) ---
|
|
|
|
|
|
undefined4 FUN_006c01c0(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x2c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
piVar1 = *(int **)(param_1 + 0xc);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 4))(piVar1);
|
|
|
|
}
|
|
|
|
*param_2 = *(undefined4 *)(param_1 + 0xc);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0210 at 0x006C0210 (size: 122) ---
|
|
|
|
|
|
int FUN_006c0210(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x2c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
iVar4 = 0;
|
|
|
|
if (*(int *)(param_1 + 8) != 0) {
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + -0xc) + 0x18))();
|
|
|
|
iVar5 = 0;
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
piVar2 = (int *)(**(code **)(*(int *)(param_1 + -0xc) + 0x1c))(iVar5);
|
|
|
|
if (((piVar2[6] != 0) && (iVar3 = (**(code **)(*piVar2 + 0x18))(), iVar3 < 0)) &&
|
|
|
|
(-1 < iVar4)) {
|
|
|
|
iVar4 = iVar3;
|
|
|
|
}
|
|
|
|
iVar5 = iVar5 + 1;
|
|
|
|
} while (iVar5 < iVar1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0290 at 0x006C0290 (size: 135) ---
|
|
|
|
|
|
int FUN_006c0290(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x2c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(param_1 + 8) == 0) {
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + -0xc) + 0x18))();
|
|
|
|
iVar4 = 0;
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
piVar2 = (int *)(**(code **)(*(int *)(param_1 + -0xc) + 0x1c))(iVar4);
|
|
|
|
if ((piVar2[6] != 0) && (iVar3 = (**(code **)(*piVar2 + 0x14))(), iVar3 < 0)) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
iVar4 = iVar4 + 1;
|
|
|
|
} while (iVar4 < iVar1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 8) = 1;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0320 at 0x006C0320 (size: 197) ---
|
|
|
|
|
|
int FUN_006c0320(int *param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)param_1[0xb];
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
param_1[5] = param_2;
|
|
|
|
param_1[6] = param_3;
|
|
|
|
if ((param_1[2] == 0) && (iVar1 = (**(code **)(*param_1 + 0x14))(param_1), iVar1 < 0)) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
if (param_1[2] != 2) {
|
|
|
|
iVar1 = (**(code **)(param_1[-3] + 0x18))();
|
|
|
|
iVar4 = 0;
|
|
|
|
if (0 < iVar1) {
|
|
|
|
do {
|
|
|
|
piVar2 = (int *)(**(code **)(param_1[-3] + 0x1c))(iVar4);
|
|
|
|
if ((piVar2[6] != 0) && (iVar3 = (**(code **)(*piVar2 + 0x1c))(param_2,param_3), iVar3 < 0))
|
|
|
|
{
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
iVar4 = iVar4 + 1;
|
|
|
|
} while (iVar4 < iVar1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[2] = 2;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0430 at 0x006C0430 (size: 78) ---
|
|
|
|
|
|
undefined4 FUN_006c0430(int param_1,undefined2 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (param_2 == (undefined2 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x30) == 0) {
|
|
|
|
*param_2 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_006c1ff0(param_2,*(int *)(param_1 + 0x30),0x80);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_2 + 0x80) = *(undefined4 *)(param_1 + 0x34);
|
|
|
|
piVar1 = *(int **)(param_1 + 0x34);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 4))(piVar1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0480 at 0x006C0480 (size: 161) ---
|
|
|
|
|
|
undefined4 FUN_006c0480(int param_1,undefined4 *param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
uint uVar5;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x2c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
*(undefined4 **)(param_1 + 0x34) = param_2;
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = (**(code **)*param_2)(param_2,&DAT_00808320,(undefined4 *)(param_1 + 0x38));
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
piVar1 = *(int **)(param_1 + 0x38);
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (*(void **)(param_1 + 0x30) != (void *)0x0) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x30));
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = 0;
|
|
|
|
}
|
|
|
|
if (param_3 != (undefined4 *)0x0) {
|
|
|
|
iVar2 = FUN_006c2070(param_3);
|
|
|
|
uVar5 = (iVar2 + 1) * 2;
|
|
|
|
puVar3 = (undefined4 *)thunk_FUN_005df0f5(uVar5);
|
|
|
|
*(undefined4 **)(param_1 + 0x30) = puVar3;
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
for (uVar4 = uVar5 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar3 = *param_3;
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
for (uVar5 = uVar5 & 3; uVar5 != 0; uVar5 = uVar5 - 1) {
|
|
|
|
*(undefined1 *)puVar3 = *(undefined1 *)param_3;
|
|
|
|
param_3 = (undefined4 *)((int)param_3 + 1);
|
|
|
|
puVar3 = (undefined4 *)((int)puVar3 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0530 at 0x006C0530 (size: 67) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c0530(int param_1,int param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0x44);
|
|
|
|
if (piVar1 == (int *)0x0) {
|
|
|
|
return 0x80004001;
|
|
|
|
}
|
|
|
|
if (param_2 == 1) {
|
|
|
|
uVar2 = (**(code **)(*piVar1 + 0xc))(piVar1,1,param_3,param_1 + 0xc);
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
uVar2 = (**(code **)(*piVar1 + 0xc))(piVar1,param_2,param_3,param_4);
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0600 at 0x006C0600 (size: 42) ---
|
|
|
|
|
|
LONG FUN_006c0600(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
|
|
|
|
LVar1 = InterlockedDecrement(param_1 + 5);
|
|
|
|
if ((LVar1 == 0) && (param_1 != (int *)0x0)) {
|
|
|
|
(**(code **)(*param_1 + 0x1c))(1);
|
|
|
|
}
|
|
|
|
return LVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0630 at 0x006C0630 (size: 63) ---
|
|
|
|
|
|
undefined4 FUN_006c0630(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0xc) + 0x14))();
|
|
|
|
if (iVar1 != *(int *)(param_1 + 0x10)) {
|
|
|
|
return 0x80040203;
|
|
|
|
}
|
|
|
|
if ((uint)(*(int *)(param_1 + 8) - *(int *)(param_1 + 4)) < param_2) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
*(uint *)(param_1 + 4) = *(int *)(param_1 + 4) + param_2;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0670 at 0x006C0670 (size: 48) ---
|
|
|
|
|
|
undefined4 FUN_006c0670(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 0xc) + 0x14))();
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = uVar1;
|
|
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 0xc) + 0x18))();
|
|
|
|
*(undefined4 *)(param_1 + 8) = uVar1;
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
FUN_006c3540();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0720 at 0x006C0720 (size: 42) ---
|
|
|
|
|
|
LONG FUN_006c0720(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
|
|
|
|
LVar1 = InterlockedDecrement(param_1 + 4);
|
|
|
|
if ((LVar1 == 0) && (param_1 != (int *)0x0)) {
|
|
|
|
(**(code **)(*param_1 + 0x1c))(1);
|
|
|
|
}
|
|
|
|
return LVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c08e0 at 0x006C08E0 (size: 29) ---
|
|
|
|
|
|
undefined4 FUN_006c08e0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
uVar1 = (**(code **)(**(int **)(param_1 + 8) + 0x10))();
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = uVar1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0900 at 0x006C0900 (size: 125) ---
|
|
|
|
|
|
void FUN_006c0900(int param_1,int *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar3 = &DAT_008083d0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (bVar4) {
|
|
|
|
if (param_1 != 0) {
|
|
|
|
FUN_006c1e80(param_1 + 0xc,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = &DAT_008082f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *param_2 == *piVar2;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
FUN_006c1ee0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (param_1 != 0) {
|
|
|
|
FUN_006c1e80(param_1 + 0x10,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_006c1e80(0,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c09c0 at 0x006C09C0 (size: 174) ---
|
|
|
|
|
|
int __thiscall FUN_006c09c0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x28))(param_2);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
(**(code **)(*param_1 + 0x2c))();
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x20))(param_2);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
param_1[6] = (int)param_2;
|
|
|
|
(**(code **)(*param_2 + 4))(param_2);
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x24))(param_2);
|
|
|
|
if ((-1 < iVar2) &&
|
|
|
|
(iVar2 = (**(code **)(*param_2 + 0x10))(param_2,param_1 + 3,param_2), -1 < iVar2)) {
|
|
|
|
iVar2 = (**(code **)(*param_1 + 0x30))(param_2);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_2 + 0x14))(param_2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (((-1 < iVar2) || (iVar2 == -0x7fffbffb)) || (iVar2 == -0x7ff8ffa9)) {
|
|
|
|
iVar2 = -0x7ffbfdd6;
|
|
|
|
}
|
|
|
|
(**(code **)(*param_1 + 0x2c))();
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
param_1[6] = 0;
|
|
|
|
}
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0a70 at 0x006C0A70 (size: 219) ---
|
|
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006c0abc) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006c0aca) */
|
|
|
|
|
|
|
|
int FUN_006c0a70(undefined4 param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined1 *puStack_1c;
|
|
|
|
undefined4 auStack_8 [2];
|
|
|
|
|
|
|
|
piVar1 = param_3;
|
|
|
|
iVar2 = (**(code **)(*param_3 + 0x14))();
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
puStack_1c = &stack0xfffffff4;
|
|
|
|
param_2 = 0;
|
|
|
|
iVar2 = 0;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0xc))(piVar1,1,¶m_2);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
do {
|
|
|
|
iVar3 = FUN_006c09c0(piVar1,auStack_8[0]);
|
|
|
|
if ((((iVar3 < 0) && (-1 < iVar2)) && (iVar3 != -0x7fffbffb)) &&
|
|
|
|
((iVar3 != -0x7ff8ffa9 && (iVar3 != -0x7ffbfdd6)))) {
|
|
|
|
iVar2 = iVar3;
|
|
|
|
}
|
|
|
|
FUN_006c3910(auStack_8[0]);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0xc))(piVar1,1,auStack_8,&puStack_1c);
|
|
|
|
} while (iVar3 == 0);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -0x7ffbfdf9;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0b50 at 0x006C0B50 (size: 215) ---
|
|
|
|
|
|
int __thiscall FUN_006c0b50(int param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
iVar2 = param_3;
|
|
|
|
local_8 = (int *)0x0;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
iVar1 = FUN_006c36f0();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar2 = FUN_006c09c0(param_2,param_3);
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local_4 = -0x7ffbfdf9;
|
|
|
|
param_3 = 0;
|
|
|
|
do {
|
|
|
|
if (param_3 == *(byte *)(param_1 + 0x26)) {
|
|
|
|
iVar1 = (**(code **)(*param_2 + 0x30))(param_2,&local_8);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + 0xc) + 0x30))(param_1 + 0xc,&local_8);
|
|
|
|
}
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
iVar1 = FUN_006c0a70(param_2,iVar2,local_8);
|
|
|
|
(**(code **)(*local_8 + 8))(local_8);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (((iVar1 != -0x7fffbffb) && (iVar1 != -0x7ff8ffa9)) && (iVar1 != -0x7ffbfdd6)) {
|
|
|
|
local_4 = iVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
} while ((int)param_3 < 2);
|
|
|
|
return local_4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0c30 at 0x006C0C30 (size: 26) ---
|
|
|
|
|
|
uint FUN_006c0c30(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
uVar1 = thunk_FUN_006c38b0(param_1);
|
|
|
|
return uVar1 & (-1 < (int)uVar1) - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0c80 at 0x006C0C80 (size: 26) ---
|
|
|
|
|
|
int FUN_006c0c80(LPCRITICAL_SECTION param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
HANDLE *ppvVar1;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar2;
|
|
|
|
LPCRITICAL_SECTION unaff_EBX;
|
|
|
|
LPCRITICAL_SECTION unaff_retaddr;
|
|
|
|
|
|
|
|
if ((param_2 == (int *)0x0) || (param_3 == 0)) {
|
|
|
|
return -0x7fffbffd;
|
|
|
|
}
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)param_1->SpinCount;
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (param_1->OwningThread != (HANDLE)0x0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfdfc;
|
|
|
|
}
|
|
|
|
if ((*(int *)(param_1[1].LockCount + 0x14) != 0) &&
|
|
|
|
(*(char *)((int)¶m_1[1].DebugInfo + 1) == '\0')) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfddc;
|
|
|
|
}
|
|
|
|
ppvVar1 = ¶m_1[-1].OwningThread;
|
|
|
|
iVar2 = (**(code **)((int)param_1[-1].OwningThread + 0x28))(param_2);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
LeaveCriticalSection(param_1);
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x20))(lpCriticalSection);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
param_1->OwningThread = param_2;
|
|
|
|
(**(code **)(*param_2 + 4))(param_2);
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x24))(unaff_retaddr);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x30))(param_2);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
LeaveCriticalSection(unaff_EBX);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(*(int *)param_1->OwningThread + 8))(param_1->OwningThread);
|
|
|
|
param_1->OwningThread = (HANDLE)0x0;
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
if (((-1 < iVar2) || (iVar2 == -0x7fffbffb)) || (iVar2 == -0x7ff8ffa9)) {
|
|
|
|
LeaveCriticalSection(unaff_retaddr);
|
|
|
|
return -0x7ffbfdd6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(unaff_retaddr);
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0c9a at 0x006C0C9A (size: 301) ---
|
|
|
|
|
|
int FUN_006c0c9a(LPCRITICAL_SECTION param_1,LPCRITICAL_SECTION param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
HANDLE *ppvVar1;
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar2;
|
|
|
|
LPCRITICAL_SECTION unaff_EBX;
|
|
|
|
int *unaff_EBP;
|
|
|
|
LPCRITICAL_SECTION p_Stack0000000c;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)param_2->SpinCount;
|
|
|
|
p_Stack0000000c = lpCriticalSection;
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (param_2->OwningThread != (HANDLE)0x0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfdfc;
|
|
|
|
}
|
|
|
|
if ((*(int *)(param_2[1].LockCount + 0x14) != 0) &&
|
|
|
|
(*(char *)((int)¶m_2[1].DebugInfo + 1) == '\0')) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfddc;
|
|
|
|
}
|
|
|
|
ppvVar1 = ¶m_2[-1].OwningThread;
|
|
|
|
iVar2 = (**(code **)((int)param_2[-1].OwningThread + 0x28))();
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
LeaveCriticalSection(param_2);
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x20))(p_Stack0000000c);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
param_2->OwningThread = unaff_EBP;
|
|
|
|
(**(code **)(*unaff_EBP + 4))();
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x24))(param_1);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
iVar2 = (**(code **)((int)*ppvVar1 + 0x30))();
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
LeaveCriticalSection(unaff_EBX);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
(**(code **)(*(int *)param_2->OwningThread + 8))(param_2->OwningThread);
|
|
|
|
param_2->OwningThread = (HANDLE)0x0;
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
(**(code **)((int)*ppvVar1 + 0x2c))();
|
|
|
|
if (((-1 < iVar2) || (iVar2 == -0x7fffbffb)) || (iVar2 == -0x7ff8ffa9)) {
|
|
|
|
LeaveCriticalSection(param_1);
|
|
|
|
return -0x7ffbfdd6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(param_1);
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0e00 at 0x006C0E00 (size: 91) ---
|
|
|
|
|
|
undefined4 FUN_006c0e00(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
|
|
|
|
if (param_2 == 0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x14);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
FUN_006c37e0(param_2,param_1 + 0x28);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_006c36d0();
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0x80040209;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0e60 at 0x006C0E60 (size: 110) ---
|
|
|
|
|
|
undefined4 FUN_006c0e60(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x1c) == 0) {
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = *(int *)(param_1 + 0x1c) + 0xc;
|
|
|
|
}
|
|
|
|
*param_2 = iVar1;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x1c);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
(**(code **)(*(int *)(iVar1 + 0xc) + 4))(iVar1 + 0xc);
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 8) != 0) {
|
|
|
|
FUN_006c1ff0(param_2 + 2,*(int *)(param_1 + 8),0x80);
|
|
|
|
param_2[1] = *(int *)(param_1 + 0x10);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*(undefined2 *)(param_2 + 2) = 0;
|
|
|
|
param_2[1] = *(int *)(param_1 + 0x10);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c0fa0 at 0x006C0FA0 (size: 58) ---
|
|
|
|
|
|
void __fastcall FUN_006c0fa0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0x9c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x9c) = 0;
|
|
|
|
}
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x14));
|
|
|
|
FUN_006c3850();
|
|
|
|
FUN_006c1e30();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1030 at 0x006C1030 (size: 117) ---
|
|
|
|
|
|
HRESULT FUN_006c1030(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
HRESULT HVar1;
|
|
|
|
LPVOID *ppv;
|
|
|
|
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return -0x7fffbffd;
|
|
|
|
}
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + -0x78);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
ppv = (LPVOID *)(param_1 + 4);
|
|
|
|
if (*(int *)(param_1 + 4) == 0) {
|
|
|
|
HVar1 = CoCreateInstance((IID *)&DAT_00808420,(LPUNKNOWN)0x0,1,(IID *)&DAT_00808370,ppv);
|
|
|
|
if (HVar1 < 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return HVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_2 = *ppv;
|
|
|
|
(**(code **)(*(int *)*ppv + 4))(*ppv);
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c10b0 at 0x006C10B0 (size: 80) ---
|
|
|
|
|
|
undefined4 FUN_006c10b0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + -0x78);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
piVar1 = *(int **)(param_1 + 4);
|
|
|
|
(**(code **)(*param_2 + 4))(param_2);
|
|
|
|
*(int **)(param_1 + 4) = param_2;
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 8) = param_2._0_1_;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1100 at 0x006C1100 (size: 49) ---
|
|
|
|
|
|
int __fastcall FUN_006c1100(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0x9c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x18))(piVar1);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
(**(code **)(**(int **)(param_1 + 0x9c) + 8))(*(int **)(param_1 + 0x9c));
|
|
|
|
*(undefined4 *)(param_1 + 0x9c) = 0;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1140 at 0x006C1140 (size: 339) ---
|
|
|
|
|
|
/* WARNING: Restarted to delay deadcode elimination for space: stack */
|
|
|
|
|
|
|
|
int FUN_006c1140(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int *unaff_EDI;
|
|
|
|
|
|
|
|
piVar1 = param_2;
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return -0x7fffbffd;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*(int *)(param_1 + -0x98) + 0x38))();
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)*piVar1)(piVar1,&DAT_00808380);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0x30;
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x3c))(piVar1);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 4;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x24))(piVar1);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 2;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x1c))(piVar1);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 1;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x14))(piVar1,param_1 + 0x20,param_1 + 0x28);
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 0x110;
|
|
|
|
}
|
|
|
|
iVar2 = (**(code **)(*piVar1 + 0x34))(piVar1,param_1 + 0x34);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 8;
|
|
|
|
}
|
|
|
|
(**(code **)(*piVar1 + 0xc))(piVar1,param_1 + 0x38);
|
|
|
|
uVar3 = (**(code **)(*piVar1 + 0x2c))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = uVar3;
|
|
|
|
uVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = uVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = (**(code **)(*unaff_EDI + 0x4c))(unaff_EDI,0x30,param_1 + 0x10);
|
|
|
|
(*(code *)param_2[2])(¶m_2);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((*(byte *)(param_1 + 0x18) & 8) != 0) &&
|
|
|
|
(iVar2 = (**(code **)(*(int *)(param_1 + -0x98) + 0x20))(*(undefined4 *)(param_1 + 0x34)),
|
|
|
|
iVar2 != 0)) {
|
|
|
|
*(undefined1 *)(param_1 + -0x74) = 1;
|
|
|
|
(**(code **)(*(int *)(param_1 + -0x8c) + 0x38))(param_1 + -0x8c);
|
|
|
|
piVar1 = *(int **)(*(int *)(param_1 + -0x70) + 0x44);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 0xc))(piVar1,3,0x8004022a,0);
|
|
|
|
}
|
|
|
|
return -0x7ffbfe00;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c12a0 at 0x006C12A0 (size: 82) ---
|
|
|
|
|
|
int FUN_006c12a0(int *param_1,int param_2,int param_3,int *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == 0) {
|
|
|
|
return -0x7fffbffd;
|
|
|
|
}
|
|
|
|
*param_4 = 0;
|
|
|
|
while( true ) {
|
|
|
|
if (param_3 < 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
param_3 = param_3 + -1;
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x18))(param_1,*(undefined4 *)(param_2 + *param_4 * 4));
|
|
|
|
if (iVar1 != 0) break;
|
|
|
|
*param_4 = *param_4 + 1;
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c13c0 at 0x006C13C0 (size: 37) ---
|
|
|
|
|
|
undefined4 FUN_006c13c0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x14);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
*(undefined1 *)(param_1 + 0x95) = 1;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c13f0 at 0x006C13F0 (size: 41) ---
|
|
|
|
|
|
undefined4 FUN_006c13f0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x14);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
*(undefined1 *)(param_1 + 0x95) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x18) = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1470 at 0x006C1470 (size: 461) ---
|
|
|
|
|
|
uint FUN_006c1470(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
int unaff_EBX;
|
|
|
|
int *piVar6;
|
|
|
|
int *piVar7;
|
|
|
|
int iVar8;
|
|
|
|
uint uVar9;
|
|
|
|
int *piVar10;
|
|
|
|
uint uVar11;
|
|
|
|
|
|
|
|
iVar8 = 0;
|
|
|
|
if (param_1 == (int *)0x0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)*param_1;
|
|
|
|
piVar7 = param_2;
|
|
|
|
uVar4 = (**(code **)(*param_2 + 0x1c))(param_2,*puVar1,puVar1[1],puVar1[2],puVar1[3]);
|
|
|
|
if (unaff_EBX != 0) {
|
|
|
|
puVar1 = (undefined4 *)*param_1;
|
|
|
|
uVar4 = (**(code **)(*param_2 + 0xc))
|
|
|
|
(param_2,*puVar1,puVar1[1],puVar1[2],puVar1[3],param_1[1],param_1[2]);
|
|
|
|
if ((-1 < (int)uVar4) && (uVar11 = 0, param_1[3] != 0)) {
|
|
|
|
while( true ) {
|
|
|
|
puVar1 = (undefined4 *)(param_1[4] + iVar8);
|
|
|
|
puVar2 = (undefined4 *)puVar1[5];
|
|
|
|
puVar3 = (undefined4 *)*param_1;
|
|
|
|
piVar10 = piVar7;
|
|
|
|
uVar4 = (**(code **)(*param_2 + 0x14))
|
|
|
|
(piVar7,*puVar3,puVar3[1],puVar3[2],puVar3[3],*puVar1,puVar1[1],puVar1[2],
|
|
|
|
puVar1[3],puVar1[4],*puVar2,puVar2[1],puVar2[2],puVar2[3],puVar1[6]);
|
|
|
|
if ((int)uVar4 < 0) break;
|
|
|
|
iVar5 = param_1[4];
|
|
|
|
uVar9 = 0;
|
|
|
|
piVar6 = piVar7;
|
|
|
|
if (*(int *)(iVar8 + 0x1c + iVar5) != 0) {
|
|
|
|
do {
|
|
|
|
piVar7 = piVar10;
|
|
|
|
piVar10 = (int *)(*(int *)(iVar8 + 0x20 + iVar5) + uVar9 * 8);
|
|
|
|
puVar1 = (undefined4 *)piVar10[1];
|
|
|
|
puVar2 = (undefined4 *)*piVar10;
|
|
|
|
puVar3 = (undefined4 *)*param_1;
|
|
|
|
piVar10 = piVar7;
|
|
|
|
uVar4 = (**(code **)(*piVar6 + 0x18))
|
|
|
|
(piVar7,*puVar3,puVar3[1],puVar3[2],puVar3[3],
|
|
|
|
*(undefined4 *)(iVar8 + iVar5),*puVar2,puVar2[1],puVar2[2],puVar2[3],
|
|
|
|
*puVar1,puVar1[1],puVar1[2],puVar1[3]);
|
|
|
|
if ((int)uVar4 < 0) goto LAB_006c1628;
|
|
|
|
iVar5 = param_1[4];
|
|
|
|
uVar9 = uVar9 + 1;
|
|
|
|
piVar6 = piVar7;
|
|
|
|
} while (uVar9 < *(uint *)(iVar8 + 0x1c + iVar5));
|
|
|
|
}
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
iVar8 = iVar8 + 0x24;
|
|
|
|
param_2 = piVar7;
|
|
|
|
piVar7 = piVar10;
|
|
|
|
if ((uint)param_1[3] <= uVar11) break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LAB_006c1628:
|
|
|
|
return uVar4 & (uVar4 == 0x80070002) - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1730 at 0x006C1730 (size: 139) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006c1730(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
*param_1 = &PTR_LAB_00808144;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = param_2;
|
|
|
|
param_1[5] = 1;
|
|
|
|
FUN_006c3520("Pin Cache");
|
|
|
|
(**(code **)(*(int *)(param_1[3] + 0xc) + 4))(param_1[3] + 0xc);
|
|
|
|
if (param_2 == 0) {
|
|
|
|
uVar1 = (**(code **)(*(int *)param_1[3] + 0x14))();
|
|
|
|
param_1[4] = uVar1;
|
|
|
|
uVar1 = (**(code **)(*(int *)param_1[3] + 0x18))();
|
|
|
|
param_1[2] = uVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
param_1[1] = *(undefined4 *)(param_2 + 4);
|
|
|
|
param_1[2] = *(undefined4 *)(param_2 + 8);
|
|
|
|
param_1[4] = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
FUN_006c3620(param_2 + 0x18);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c17c0 at 0x006C17C0 (size: 51) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006c17c0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte unaff_retaddr;
|
|
|
|
|
|
|
|
*param_1 = &PTR_LAB_00808144;
|
|
|
|
(**(code **)(*(int *)(param_1[3] + 0xc) + 8))((int *)(param_1[3] + 0xc));
|
|
|
|
FUN_006c36a0();
|
|
|
|
if ((unaff_retaddr & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1800 at 0x006C1800 (size: 103) ---
|
|
|
|
|
|
undefined4 FUN_006c1800(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
uVar2 = 0;
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 0xc) + 0x14))();
|
|
|
|
if (iVar1 != *(int *)(param_1 + 0x10)) {
|
|
|
|
*param_2 = 0;
|
|
|
|
return 0x80040203;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_005df0f5(0x30);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = FUN_006c1730(*(undefined4 *)(param_1 + 0xc),param_1);
|
|
|
|
}
|
|
|
|
*param_2 = iVar1;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
uVar2 = 0x8007000e;
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c19b0 at 0x006C19B0 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006c19b0(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
param_1[2] = param_2;
|
|
|
|
*param_1 = &PTR_LAB_00808164;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[4] = 1;
|
|
|
|
(**(code **)(*(int *)(param_2 + 0xc) + 4))((int *)(param_2 + 0xc));
|
|
|
|
if (param_2 == 0) {
|
|
|
|
uVar1 = (**(code **)(*(int *)param_1[2] + 0x10))();
|
|
|
|
param_1[3] = uVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
param_1[1] = *(undefined4 *)(param_2 + 4);
|
|
|
|
param_1[3] = *(undefined4 *)(param_2 + 0xc);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1a10 at 0x006C1A10 (size: 43) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006c1a10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte unaff_retaddr;
|
|
|
|
|
|
|
|
*param_1 = &PTR_LAB_00808164;
|
|
|
|
(**(code **)(*(int *)(param_1[2] + 0xc) + 8))((int *)(param_1[2] + 0xc));
|
|
|
|
if ((unaff_retaddr & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1a40 at 0x006C1A40 (size: 103) ---
|
|
|
|
|
|
undefined4 FUN_006c1a40(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
uVar2 = 0;
|
|
|
|
iVar1 = (**(code **)(**(int **)(param_1 + 8) + 0x10))();
|
|
|
|
if (iVar1 != *(int *)(param_1 + 0xc)) {
|
|
|
|
*param_2 = 0;
|
|
|
|
return 0x80040203;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_005df0f5(0x14);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = FUN_006c19b0(*(undefined4 *)(param_1 + 8),param_1);
|
|
|
|
}
|
|
|
|
*param_2 = iVar1;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
uVar2 = 0x8007000e;
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1ab0 at 0x006C1AB0 (size: 182) ---
|
|
|
|
|
|
int __thiscall
|
|
|
|
FUN_006c1ab0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5
|
|
|
|
,undefined4 *param_6,undefined4 param_7)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
FUN_006c1eb0(param_2,0);
|
|
|
|
*(undefined4 *)(param_1 + 0x1c) = param_7;
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = param_4;
|
|
|
|
*(undefined1 *)(param_1 + 0x24) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x25) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0x26) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x28) = param_3;
|
|
|
|
*(undefined4 *)(param_1 + 0x2c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = 1;
|
|
|
|
FUN_006c3890();
|
|
|
|
*(undefined4 *)(param_1 + 0x80) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x84) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x88) = 0xffffffff;
|
|
|
|
*(undefined4 *)(param_1 + 0x8c) = 0x7fffffff;
|
|
|
|
*(undefined4 *)(param_1 + 0x90) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x94) = 0x3ff00000;
|
|
|
|
if (param_6 != (undefined4 *)0x0) {
|
|
|
|
iVar1 = FUN_006c2070(param_6);
|
|
|
|
uVar4 = (iVar1 + 1) * 2;
|
|
|
|
puVar2 = (undefined4 *)thunk_FUN_005df0f5(uVar4);
|
|
|
|
*(undefined4 **)(param_1 + 0x14) = puVar2;
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
for (uVar3 = uVar4 >> 2; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
|
|
*puVar2 = *param_6;
|
|
|
|
param_6 = param_6 + 1;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
for (uVar4 = uVar4 & 3; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*(undefined1 *)puVar2 = *(undefined1 *)param_6;
|
|
|
|
param_6 = (undefined4 *)((int)param_6 + 1);
|
|
|
|
puVar2 = (undefined4 *)((int)puVar2 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1b70 at 0x006C1B70 (size: 153) ---
|
|
|
|
|
|
int FUN_006c1b70(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == 0) {
|
|
|
|
return -0x7fffbffd;
|
|
|
|
}
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x14);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfdfc;
|
|
|
|
}
|
|
|
|
if ((*(int *)(*(int *)(param_1 + 0x1c) + 0x14) != 0) && (*(char *)(param_1 + 0x19) == '\0')) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfddc;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006c0b50(param_2,param_3);
|
|
|
|
if (iVar1 < 0) {
|
|
|
|
(**(code **)(*(int *)(param_1 + -0xc) + 0x2c))();
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1c10 at 0x006C1C10 (size: 131) ---
|
|
|
|
|
|
int FUN_006c1c10(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
lpCriticalSection = *(LPCRITICAL_SECTION *)(param_1 + 0x14);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x1c) + 0x14) != 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7ffbfddc;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0xc) != 0) {
|
|
|
|
iVar1 = (**(code **)(*(int *)(param_1 + -0xc) + 0x2c))();
|
|
|
|
if (iVar1 < 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
(**(code **)(**(int **)(param_1 + 0xc) + 8))(*(int **)(param_1 + 0xc));
|
|
|
|
*(undefined4 *)(param_1 + 0xc) = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1ca0 at 0x006C1CA0 (size: 127) ---
|
|
|
|
|
|
uint FUN_006c1ca0(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(0x14);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
puVar1[2] = param_1 + -3;
|
|
|
|
*puVar1 = &PTR_LAB_00808164;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
puVar1[4] = 1;
|
|
|
|
(**(code **)(*param_1 + 4))(param_1);
|
|
|
|
uVar2 = (**(code **)(*(int *)puVar1[2] + 0x10))();
|
|
|
|
puVar1[3] = uVar2;
|
|
|
|
*param_2 = puVar1;
|
|
|
|
return (puVar1 != (undefined4 *)0x0) - 1 & 0x8007000e;
|
|
|
|
}
|
|
|
|
*param_2 = 0;
|
|
|
|
return 0x8007000e;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1d20 at 0x006C1D20 (size: 84) ---
|
|
|
|
|
|
int __thiscall
|
|
|
|
FUN_006c1d20(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5
|
|
|
|
,undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
FUN_006c1ab0(param_2,param_3,param_4,param_5,param_6,0);
|
|
|
|
*(undefined4 *)(param_1 + 0x9c) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0xa0) = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0xa1) = 0;
|
|
|
|
puVar2 = (undefined4 *)(param_1 + 0xa8);
|
|
|
|
for (iVar1 = 0xc; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1d80 at 0x006C1D80 (size: 75) ---
|
|
|
|
|
|
uint FUN_006c1d80(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
if (param_2 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_005df0f5(0x30);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = FUN_006c1730(param_1 + -0xc,0);
|
|
|
|
}
|
|
|
|
*param_2 = iVar1;
|
|
|
|
return (iVar1 != 0) - 1 & 0x8007000e;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1dd0 at 0x006C1DD0 (size: 94) ---
|
|
|
|
|
|
int __thiscall
|
|
|
|
FUN_006c1dd0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
|
|
undefined4 *param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006c1eb0(param_2,param_3);
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x18) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x20) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x28) = *param_5;
|
|
|
|
*(undefined4 *)(param_1 + 0x2c) = param_5[1];
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = param_5[2];
|
|
|
|
*(undefined4 *)(param_1 + 0x34) = param_5[3];
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = param_4;
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = 1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1e30 at 0x006C1E30 (size: 42) ---
|
|
|
|
|
|
void FUN_006c1e30(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)&DAT_00906744);
|
|
|
|
if ((LVar1 == 0) && (DAT_00906740 != (HMODULE)0x0)) {
|
|
|
|
FreeLibrary(DAT_00906740);
|
|
|
|
DAT_00906740 = (HMODULE)0x0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1e60 at 0x006C1E60 (size: 26) ---
|
|
|
|
|
|
void FUN_006c1e60(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (DAT_00906740 == (HMODULE)0x0) {
|
|
|
|
DAT_00906740 = LoadLibraryA("OleAut32.dll");
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1e80 at 0x006C1E80 (size: 33) ---
|
|
|
|
|
|
undefined4 FUN_006c1e80(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (param_2 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
*param_2 = param_1;
|
|
|
|
(**(code **)(*param_1 + 4))(param_1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1eb0 at 0x006C1EB0 (size: 40) ---
|
|
|
|
|
|
int __thiscall FUN_006c1eb0(int param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
InterlockedIncrement((LONG *)&DAT_00906744);
|
|
|
|
if (param_3 == 0) {
|
|
|
|
param_3 = param_1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 4) = param_3;
|
|
|
|
*(undefined4 *)(param_1 + 8) = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1ee0 at 0x006C1EE0 (size: 71) ---
|
|
|
|
|
|
undefined4 FUN_006c1ee0(int *param_1,int *param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
bool bVar3;
|
|
|
|
|
|
|
|
if (param_3 == (undefined4 *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar3 = true;
|
|
|
|
piVar2 = &DAT_007cc670;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar3 = *param_2 == *piVar2;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
} while (bVar3);
|
|
|
|
if (bVar3) {
|
|
|
|
*param_3 = param_1;
|
|
|
|
(**(code **)(*param_1 + 4))(param_1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
return 0x80004002;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1f30 at 0x006C1F30 (size: 31) ---
|
|
|
|
|
|
uint FUN_006c1f30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
InterlockedIncrement((LONG *)(param_1 + 8));
|
|
|
|
uVar1 = *(uint *)(param_1 + 8);
|
|
|
|
if (uVar1 < 2) {
|
|
|
|
uVar1 = 1;
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1f90 at 0x006C1F90 (size: 28) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006c1f90(undefined4 *param_1,BOOL param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
HANDLE pvVar1;
|
|
|
|
|
|
|
|
pvVar1 = CreateEventA((LPSECURITY_ATTRIBUTES)0x0,param_2,0,(LPCSTR)0x0);
|
|
|
|
*param_1 = pvVar1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1fb0 at 0x006C1FB0 (size: 14) ---
|
|
|
|
|
|
void __fastcall FUN_006c1fb0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((HANDLE)*param_1 != (HANDLE)0x0) {
|
|
|
|
CloseHandle((HANDLE)*param_1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1fc0 at 0x006C1FC0 (size: 34) ---
|
|
|
|
|
|
short * FUN_006c1fc0(short *param_1,short *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
short sVar1;
|
|
|
|
short *psVar2;
|
|
|
|
|
|
|
|
psVar2 = param_1;
|
|
|
|
do {
|
|
|
|
sVar1 = *param_2;
|
|
|
|
*param_1 = sVar1;
|
|
|
|
param_1 = param_1 + 1;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
} while (sVar1 != 0);
|
|
|
|
return psVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c1ff0 at 0x006C1FF0 (size: 55) ---
|
|
|
|
|
|
short * FUN_006c1ff0(short *param_1,short *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
short sVar1;
|
|
|
|
short *psVar2;
|
|
|
|
|
|
|
|
psVar2 = param_1;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
while (param_3 = param_3 + -1, param_3 != 0) {
|
|
|
|
sVar1 = *param_2;
|
|
|
|
*param_1 = sVar1;
|
|
|
|
param_1 = param_1 + 1;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
if (sVar1 == 0) {
|
|
|
|
return psVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
}
|
|
|
|
return psVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2030 at 0x006C2030 (size: 61) ---
|
|
|
|
|
|
int FUN_006c2030(ushort *param_1,ushort *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
ushort uVar1;
|
|
|
|
ushort uVar2;
|
|
|
|
|
|
|
|
do {
|
|
|
|
uVar1 = *param_1;
|
|
|
|
uVar2 = *param_2;
|
|
|
|
if (uVar1 != uVar2) {
|
|
|
|
return (uint)uVar1 - (uint)uVar2;
|
|
|
|
}
|
|
|
|
param_1 = param_1 + 1;
|
|
|
|
} while ((uVar1 != 0) && (param_2 = param_2 + 1, uVar2 != 0));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2070 at 0x006C2070 (size: 18) ---
|
|
|
|
|
|
void FUN_006c2070(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = -1;
|
|
|
|
do {
|
|
|
|
iVar1 = iVar1 + 1;
|
|
|
|
} while (*(short *)(param_1 + iVar1 * 2) != 0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2090 at 0x006C2090 (size: 781) ---
|
|
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x006c2290) */
|
|
|
|
|
|
|
|
undefined8
|
|
|
|
FUN_006c2090(int param_1,int param_2,int param_3,int param_4,uint param_5,uint param_6,uint param_7,
|
|
|
|
uint param_8)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
byte bVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint uVar7;
|
|
|
|
undefined4 extraout_ECX;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
uint uVar10;
|
|
|
|
uint uVar11;
|
|
|
|
uint uVar12;
|
|
|
|
bool bVar13;
|
|
|
|
bool bVar14;
|
|
|
|
bool bVar15;
|
|
|
|
ulonglong uVar16;
|
|
|
|
longlong lVar17;
|
|
|
|
longlong lVar18;
|
|
|
|
undefined8 uVar19;
|
|
|
|
int local_28;
|
|
|
|
int local_24;
|
|
|
|
uint local_20;
|
|
|
|
int local_1c;
|
|
|
|
|
|
|
|
if (param_2 < 0) {
|
|
|
|
bVar15 = param_1 != 0;
|
|
|
|
param_1 = -param_1;
|
|
|
|
local_1c = -(param_2 + (uint)bVar15);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_1c = param_2;
|
|
|
|
}
|
|
|
|
if (param_4 < 0) {
|
|
|
|
local_28 = -param_3;
|
|
|
|
local_24 = -(param_4 + (uint)(param_3 != 0));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_28 = param_3;
|
|
|
|
local_24 = param_4;
|
|
|
|
}
|
|
|
|
uVar3 = param_6;
|
|
|
|
uVar6 = param_5;
|
|
|
|
if ((int)param_6 < 0) {
|
|
|
|
uVar3 = -(param_6 + (param_5 != 0));
|
|
|
|
uVar6 = -param_5;
|
|
|
|
}
|
|
|
|
if ((param_2 < 1) && (param_2 < 0)) {
|
|
|
|
bVar1 = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar1 = 0;
|
|
|
|
}
|
|
|
|
if ((param_4 < 1) && (param_4 < 0)) {
|
|
|
|
bVar2 = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar2 = 0;
|
|
|
|
}
|
|
|
|
bVar15 = (bool)(bVar2 ^ bVar1);
|
|
|
|
uVar16 = __allmul(param_1,0,local_28,0);
|
|
|
|
uVar10 = (uint)uVar16;
|
|
|
|
lVar17 = __allmul(local_24,0,param_1,0);
|
|
|
|
lVar18 = __allmul(local_1c,0,local_28,0);
|
|
|
|
uVar16 = lVar17 + lVar18 + (uVar16 >> 0x20);
|
|
|
|
uVar11 = (uint)uVar16;
|
|
|
|
lVar17 = __allmul(local_24,0,local_1c,0);
|
|
|
|
uVar16 = lVar17 + (uVar16 >> 0x20);
|
|
|
|
if (param_7 == 0 && param_8 == 0) goto LAB_006c2265;
|
|
|
|
if (bVar15) {
|
|
|
|
local_20 = -param_7;
|
|
|
|
uVar7 = -(param_8 + (param_7 != 0));
|
|
|
|
if (((int)param_8 < 0) || (((int)param_8 < 1 && (param_7 == 0)))) {
|
|
|
|
LAB_006c21f3:
|
|
|
|
uVar12 = 0;
|
|
|
|
param_8 = uVar7;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar12 = 0xffffffff;
|
|
|
|
param_8 = uVar7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_20 = param_7;
|
|
|
|
uVar7 = param_8;
|
|
|
|
if ((0 < (int)param_8) || (-1 < (int)param_8)) goto LAB_006c21f3;
|
|
|
|
uVar12 = 0xffffffff;
|
|
|
|
}
|
|
|
|
bVar13 = CARRY4(uVar10,local_20);
|
|
|
|
uVar10 = uVar10 + local_20;
|
|
|
|
bVar14 = CARRY4(param_8,uVar11);
|
|
|
|
param_8 = param_8 + uVar11;
|
|
|
|
uVar11 = bVar13 + param_8;
|
|
|
|
uVar7 = (uint)bVar14 + (uint)CARRY4((uint)bVar13,param_8);
|
|
|
|
lVar17 = CONCAT44(uVar12 + CARRY4(uVar7,uVar12),uVar7 + uVar12);
|
|
|
|
lVar18 = uVar16 + lVar17;
|
|
|
|
uVar16 = uVar16 + lVar17;
|
|
|
|
if (lVar18 < 0) {
|
|
|
|
bVar15 = !bVar15;
|
|
|
|
uVar7 = ~uVar10;
|
|
|
|
uVar10 = uVar7 + 1;
|
|
|
|
uVar11 = ~uVar11 + (uint)(0xfffffffe < uVar7);
|
|
|
|
uVar7 = (uint)(uVar10 == 0 && uVar11 == 0);
|
|
|
|
uVar16 = CONCAT44(~(uint)((ulonglong)lVar18 >> 0x20) + (uint)CARRY4(~(uint)lVar18,uVar7),
|
|
|
|
~(uint)lVar18 + uVar7);
|
|
|
|
}
|
|
|
|
LAB_006c2265:
|
|
|
|
if (((int)param_6 < 1) && ((int)param_6 < 0)) {
|
|
|
|
bVar15 = !bVar15;
|
|
|
|
}
|
|
|
|
if (CONCAT44(uVar3,uVar6) <= uVar16) {
|
|
|
|
if (!bVar15) {
|
|
|
|
return 0x7fffffffffffffff;
|
|
|
|
}
|
|
|
|
return 0x8000000000000000;
|
|
|
|
}
|
|
|
|
if (uVar16 == 0) {
|
|
|
|
uVar19 = __aulldiv(uVar10,uVar11,uVar6,uVar3);
|
|
|
|
if (bVar15) {
|
|
|
|
return CONCAT44(-((int)((ulonglong)uVar19 >> 0x20) + (uint)((int)uVar19 != 0)),-(int)uVar19);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar3 == 0) {
|
|
|
|
iVar4 = __aulldvrm(uVar11,(int)uVar16,uVar6,0);
|
|
|
|
uVar19 = __aulldiv(uVar10,extraout_ECX,uVar6,0);
|
|
|
|
iVar9 = (int)uVar19;
|
|
|
|
iVar4 = iVar4 + (int)((ulonglong)uVar19 >> 0x20);
|
|
|
|
if (bVar15) {
|
|
|
|
bVar15 = iVar9 != 0;
|
|
|
|
iVar9 = -iVar9;
|
|
|
|
iVar4 = -(iVar4 + (uint)bVar15);
|
|
|
|
}
|
|
|
|
return CONCAT44(iVar4,iVar9);
|
|
|
|
}
|
|
|
|
uVar12 = 0;
|
|
|
|
uVar7 = 0;
|
|
|
|
param_5 = 0x40;
|
|
|
|
do {
|
|
|
|
uVar7 = uVar7 << 1 | uVar12 >> 0x1f;
|
|
|
|
uVar8 = (int)(uVar16 >> 0x20) << 1 | (uint)uVar16 >> 0x1f;
|
|
|
|
uVar12 = uVar12 * 2;
|
|
|
|
uVar5 = (uint)uVar16 * 2;
|
|
|
|
if ((int)uVar11 < 0) {
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
}
|
|
|
|
uVar11 = uVar11 << 1 | uVar10 >> 0x1f;
|
|
|
|
uVar10 = uVar10 << 1;
|
|
|
|
if ((uVar3 <= uVar8) && ((uVar3 < uVar8 || (uVar6 <= uVar5)))) {
|
|
|
|
bVar13 = uVar5 < uVar6;
|
|
|
|
uVar5 = uVar5 - uVar6;
|
|
|
|
uVar8 = (uVar8 - uVar3) - (uint)bVar13;
|
|
|
|
bVar13 = 0xfffffffe < uVar12;
|
|
|
|
uVar12 = uVar12 + 1;
|
|
|
|
uVar7 = uVar7 + bVar13;
|
|
|
|
}
|
|
|
|
uVar19 = CONCAT44(uVar7,uVar12);
|
|
|
|
uVar16 = CONCAT44(uVar8,uVar5);
|
|
|
|
param_5 = param_5 + -1;
|
|
|
|
} while (param_5 != 0);
|
|
|
|
if (bVar15) {
|
|
|
|
uVar19 = CONCAT44(-(uVar7 + (uVar12 != 0)),-uVar12);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar19;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c23a0 at 0x006C23A0 (size: 520) ---
|
|
|
|
|
|
DWORD FUN_006c23a0(HANDLE param_1,uint param_2,HWND param_3,UINT param_4,int param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
bool bVar1;
|
|
|
|
DWORD DVar2;
|
|
|
|
int iVar3;
|
|
|
|
HANDLE pvVar4;
|
|
|
|
DWORD DVar5;
|
|
|
|
UINT UVar6;
|
|
|
|
uint nCount;
|
|
|
|
uint dwMilliseconds;
|
|
|
|
WPARAM wParam;
|
|
|
|
LPARAM lParam;
|
|
|
|
DWORD local_30;
|
|
|
|
uint local_28;
|
|
|
|
HANDLE local_24;
|
|
|
|
int local_20;
|
|
|
|
tagMSG local_1c;
|
|
|
|
|
|
|
|
bVar1 = false;
|
|
|
|
local_30 = 0;
|
|
|
|
local_28 = 0;
|
|
|
|
local_24 = param_1;
|
|
|
|
local_20 = param_5;
|
|
|
|
if ((param_2 != 0xffffffff) && (param_2 != 0)) {
|
|
|
|
local_30 = GetTickCount();
|
|
|
|
}
|
|
|
|
nCount = (param_5 != 0) + 1;
|
|
|
|
DVar2 = WaitForMultipleObjects(nCount,&local_24,0,0);
|
|
|
|
if (nCount <= DVar2) {
|
|
|
|
do {
|
|
|
|
dwMilliseconds = param_2;
|
|
|
|
if (10 < param_2) {
|
|
|
|
dwMilliseconds = 10;
|
|
|
|
}
|
|
|
|
DVar2 = MsgWaitForMultipleObjects
|
|
|
|
(nCount,&local_24,0,dwMilliseconds,(uint)(param_3 != (HWND)0x0) * 8 + 0x40);
|
|
|
|
if ((DVar2 != nCount) && ((DVar2 != 0x102 || (dwMilliseconds == param_2)))) break;
|
|
|
|
if (param_3 != (HWND)0x0) {
|
|
|
|
iVar3 = PeekMessageA(&local_1c,param_3,param_4,param_4,1);
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
DispatchMessageA(&local_1c);
|
|
|
|
iVar3 = PeekMessageA(&local_1c,param_3,param_4,param_4,1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
PeekMessageA(&local_1c,(HWND)0x0,0,0,0);
|
|
|
|
if ((param_2 != 0xffffffff) && (param_2 != 0)) {
|
|
|
|
DVar2 = GetTickCount();
|
|
|
|
if (param_2 < DVar2 - local_30) {
|
|
|
|
param_2 = 0;
|
|
|
|
local_30 = DVar2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = param_2 - (DVar2 - local_30);
|
|
|
|
local_30 = DVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!bVar1) {
|
|
|
|
pvVar4 = GetCurrentThread();
|
|
|
|
local_28 = GetThreadPriority(pvVar4);
|
|
|
|
if (local_28 < 2) {
|
|
|
|
iVar3 = 2;
|
|
|
|
pvVar4 = GetCurrentThread();
|
|
|
|
SetThreadPriority(pvVar4,iVar3);
|
|
|
|
}
|
|
|
|
bVar1 = true;
|
|
|
|
}
|
|
|
|
DVar2 = WaitForMultipleObjects(nCount,&local_24,0,0);
|
|
|
|
} while (nCount <= DVar2);
|
|
|
|
if (bVar1) {
|
|
|
|
pvVar4 = GetCurrentThread();
|
|
|
|
SetThreadPriority(pvVar4,local_28);
|
|
|
|
DVar5 = GetQueueStatus(8);
|
|
|
|
if ((DVar5 >> 0x10 & 8) != 0) {
|
|
|
|
if (DAT_00906748 != 0) goto LAB_006c2571;
|
|
|
|
DAT_00906748 = RegisterWindowMessageA("AMUnblock");
|
|
|
|
UVar6 = DAT_00906748;
|
|
|
|
while (UVar6 != 0) {
|
|
|
|
LAB_006c2571:
|
|
|
|
UVar6 = PeekMessageA(&local_1c,(HWND)0xffffffff,DAT_00906748,DAT_00906748,1);
|
|
|
|
}
|
|
|
|
lParam = 0;
|
|
|
|
wParam = 0;
|
|
|
|
UVar6 = DAT_00906748;
|
|
|
|
DVar5 = GetCurrentThreadId();
|
|
|
|
PostThreadMessageA(DVar5,UVar6,wParam,lParam);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return DVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c25b0 at 0x006C25B0 (size: 150) ---
|
|
|
|
|
|
void FUN_006c25b0(UINT param_1,UINT param_2,LPTIMECALLBACK param_3,DWORD_PTR param_4,uint param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
BOOL BVar1;
|
|
|
|
_OSVERSIONINFOA local_94;
|
|
|
|
|
|
|
|
if (DAT_0090674d == '\0') {
|
|
|
|
local_94.dwOSVersionInfoSize = 0x94;
|
|
|
|
BVar1 = GetVersionExA(&local_94);
|
|
|
|
if ((BVar1 == 0) ||
|
|
|
|
((local_94.dwMajorVersion < 6 &&
|
|
|
|
((local_94.dwMajorVersion != 5 || (local_94.dwMinorVersion == 0)))))) {
|
|
|
|
DAT_0090674c = '\0';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
DAT_0090674c = '\x01';
|
|
|
|
}
|
|
|
|
DAT_0090674d = '\x01';
|
|
|
|
}
|
|
|
|
if (DAT_0090674c != '\0') {
|
|
|
|
param_5 = param_5 | 0x100;
|
|
|
|
}
|
|
|
|
timeSetEvent(param_1,param_2,param_3,param_4,param_5);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2650 at 0x006C2650 (size: 221) ---
|
|
|
|
|
|
uint FUN_006c2650(int *param_1,undefined4 param_2,int param_3,undefined4 param_4,int *param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
DWORD DVar4;
|
|
|
|
code *pcVar5;
|
|
|
|
int iVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int *unaff_ESI;
|
|
|
|
int *unaff_retaddr;
|
|
|
|
|
|
|
|
piVar2 = param_5;
|
|
|
|
if (param_5 == (int *)0x0) {
|
|
|
|
return 0x80004003;
|
|
|
|
}
|
|
|
|
*param_5 = 0;
|
|
|
|
if (param_3 != 0) {
|
|
|
|
return 0x8002802b;
|
|
|
|
}
|
|
|
|
if (*param_1 == 0) {
|
|
|
|
iVar3 = FUN_006c1e60();
|
|
|
|
puVar1 = PTR_FUN_00837388;
|
|
|
|
if ((iVar3 == 0) ||
|
|
|
|
(pcVar5 = (code *)(*(code *)PTR_FUN_00837388)(iVar3,"LoadRegTypeLib"), pcVar5 == (code *)0x0)
|
|
|
|
) {
|
|
|
|
LAB_006c2695:
|
|
|
|
DVar4 = GetLastError();
|
|
|
|
return DVar4 | 0x80070000;
|
|
|
|
}
|
|
|
|
iVar6 = (*pcVar5)(&DAT_008083e0,1,0,param_4,¶m_5);
|
|
|
|
if (iVar6 < 0) {
|
|
|
|
pcVar5 = (code *)(*(code *)puVar1)(iVar3,"LoadTypeLib");
|
|
|
|
if (pcVar5 == (code *)0x0) goto LAB_006c2695;
|
|
|
|
uVar7 = (*pcVar5)(L"control.tlb",¶m_5);
|
|
|
|
if ((int)uVar7 < 0) {
|
|
|
|
return uVar7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar7 = (**(code **)(*unaff_retaddr + 0x18))(unaff_retaddr,unaff_ESI,param_1);
|
|
|
|
(**(code **)(*unaff_ESI + 8))(unaff_ESI);
|
|
|
|
if ((int)uVar7 < 0) {
|
|
|
|
return uVar7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*piVar2 = *param_1;
|
|
|
|
(**(code **)(*(int *)*param_1 + 4))((int *)*param_1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2900 at 0x006C2900 (size: 59) ---
|
|
|
|
|
|
void __fastcall FUN_006c2900(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (param_1 == 8) {
|
|
|
|
param_1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_1 = param_1 + -4;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x10);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
}
|
|
|
|
if ((param_1 != 0) && (param_1 != -4)) {
|
|
|
|
FUN_006c1e30();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_006c1e30();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c29c0 at 0x006C29C0 (size: 90) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c29c0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 *puStack_c;
|
|
|
|
|
|
|
|
puVar2 = param_2;
|
|
|
|
*param_2 = 0;
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
puStack_c = ¶m_2;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x18))();
|
|
|
|
if (-1 < iVar3) {
|
|
|
|
puVar4 = &DAT_00807cbc;
|
|
|
|
iVar3 = (**(code **)*param_1)(param_1,&DAT_00807cbc,&puStack_c);
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
if (-1 < iVar3) {
|
|
|
|
*puVar2 = puVar4;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0x80004001;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c2a20 at 0x006C2A20 (size: 90) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c2a20(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 *puStack_c;
|
|
|
|
|
|
|
|
puVar2 = param_2;
|
|
|
|
*param_2 = 0;
|
|
|
|
piVar1 = (int *)param_1[6];
|
|
|
|
puStack_c = ¶m_2;
|
|
|
|
iVar3 = (**(code **)(*piVar1 + 0x18))();
|
|
|
|
if (-1 < iVar3) {
|
|
|
|
puVar4 = &DAT_00808340;
|
|
|
|
iVar3 = (**(code **)*param_1)(param_1,&DAT_00808340,&puStack_c);
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
if (-1 < iVar3) {
|
|
|
|
*puVar2 = puVar4;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0x80004001;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c30d0 at 0x006C30D0 (size: 114) ---
|
|
|
|
|
|
int __thiscall FUN_006c30d0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
undefined4 unaff_EBX;
|
|
|
|
undefined4 unaff_ESI;
|
|
|
|
undefined4 unaff_EDI;
|
|
|
|
undefined4 local_10 [2];
|
|
|
|
undefined1 local_8 [8];
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x1c);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
iVar1 = (**(code **)(*param_2 + 0x14))(param_2,local_10,local_8);
|
|
|
|
if (iVar1 < 0) {
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = unaff_EDI;
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = unaff_ESI;
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = unaff_EBX;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = local_10[0];
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = 0;
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3150 at 0x006C3150 (size: 117) ---
|
|
|
|
|
|
int __thiscall FUN_006c3150(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LPCRITICAL_SECTION lpCriticalSection;
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 7);
|
|
|
|
EnterCriticalSection(lpCriticalSection);
|
|
|
|
if (param_1[0x12] != 1) {
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x34))(param_1,param_2,0,param_1[0xe],param_1[0xf]);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x34))
|
|
|
|
(param_1,&DAT_008083f0,0,param_1[0x10],param_1[0x11],&DAT_008083f0);
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
LeaveCriticalSection(lpCriticalSection);
|
|
|
|
return -0x7fffbffb;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c31d0 at 0x006C31D0 (size: 47) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006c31d0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1c));
|
|
|
|
*(undefined4 *)(param_1 + 0x38) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x48) = 1;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x1c));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3200 at 0x006C3200 (size: 87) ---
|
|
|
|
|
|
int __fastcall FUN_006c3200(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int unaff_EBX;
|
|
|
|
int unaff_ESI;
|
|
|
|
undefined1 local_8 [8];
|
|
|
|
|
|
|
|
if (param_1[0x12] == 1) {
|
|
|
|
return -0x7fffbffb;
|
|
|
|
}
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x2c))(param_1,local_8);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 7));
|
|
|
|
param_1[0x10] = unaff_EBX;
|
|
|
|
param_1[0x11] = unaff_ESI;
|
|
|
|
param_1[0xe] = unaff_EBX;
|
|
|
|
param_1[0xf] = unaff_ESI;
|
|
|
|
LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 7));
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3260 at 0x006C3260 (size: 9) ---
|
|
|
|
|
|
void FUN_006c3260(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006c3266. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x28))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3270 at 0x006C3270 (size: 9) ---
|
|
|
|
|
|
void FUN_006c3270(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006c3276. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x4c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3280 at 0x006C3280 (size: 9) ---
|
|
|
|
|
|
void FUN_006c3280(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006c3286. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x2c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3290 at 0x006C3290 (size: 9) ---
|
|
|
|
|
|
void FUN_006c3290(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006c3296. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x30))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c32a0 at 0x006C32A0 (size: 75) ---
|
|
|
|
|
|
int FUN_006c32a0(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *unaff_ESI;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(*param_1 + 0x50))(param_2,0);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006c2a20(&stack0xfffffffc);
|
|
|
|
if (-1 < iVar1) {
|
|
|
|
iVar1 = FUN_006c3290(unaff_ESI,param_2);
|
|
|
|
(**(code **)(*unaff_ESI + 8))(unaff_ESI);
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3470 at 0x006C3470 (size: 124) ---
|
|
|
|
|
|
undefined4 * __thiscall
|
|
|
|
FUN_006c3470(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 *param_4,
|
|
|
|
int param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_006c1eb0(param_2,param_3);
|
|
|
|
param_1[5] = 0;
|
|
|
|
*param_1 = &PTR_LAB_00808238;
|
|
|
|
param_1[1] = &PTR_LAB_008081f0;
|
|
|
|
param_1[2] = &PTR_LAB_008081e0;
|
|
|
|
param_1[6] = param_5;
|
|
|
|
if (param_5 == 0) {
|
|
|
|
*param_4 = 0x80004003;
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_LAB_008082a0;
|
|
|
|
param_1[1] = &PTR_LAB_008081f0;
|
|
|
|
param_1[2] = &PTR_LAB_0080828c;
|
|
|
|
InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 7));
|
|
|
|
param_1[0xe] = 0;
|
|
|
|
param_1[0xf] = 0;
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
param_1[0x11] = 0;
|
|
|
|
param_1[0x12] = 1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c34f0 at 0x006C34F0 (size: 46) ---
|
|
|
|
|
|
int __thiscall FUN_006c34f0(int param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x14));
|
|
|
|
FUN_006c2900();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete((void *)(param_1 + -8));
|
|
|
|
}
|
|
|
|
return param_1 + -8;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3520 at 0x006C3520 (size: 28) ---
|
|
|
|
|
|
void __fastcall FUN_006c3520(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 10;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3540 at 0x006C3540 (size: 57) ---
|
|
|
|
|
|
void __fastcall FUN_006c3540(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
|
|
|
|
pvVar2 = (void *)*param_1;
|
|
|
|
while (pvVar2 != (void *)0x0) {
|
|
|
|
pvVar1 = *(void **)((int)pvVar2 + 4);
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
pvVar2 = pvVar1;
|
|
|
|
}
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3580 at 0x006C3580 (size: 41) ---
|
|
|
|
|
|
int __thiscall FUN_006c3580(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
iVar2 = *param_1;
|
|
|
|
while( true ) {
|
|
|
|
iVar1 = iVar2;
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar1 + 8) == param_2) break;
|
|
|
|
iVar2 = *param_1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
iVar2 = *(int *)(iVar1 + 4);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c35b0 at 0x006C35B0 (size: 104) ---
|
|
|
|
|
|
void __thiscall FUN_006c35b0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
puVar1 = (undefined4 *)param_1[5];
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
param_1[5] = puVar1[1];
|
|
|
|
param_1[4] = param_1[4] + -1;
|
|
|
|
if (puVar1 != (undefined4 *)0x0) goto LAB_006c35dd;
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
LAB_006c35dd:
|
|
|
|
puVar1[2] = param_2;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
*puVar1 = param_1[1];
|
|
|
|
if (param_1[1] == 0) {
|
|
|
|
*param_1 = puVar1;
|
|
|
|
param_1[1] = puVar1;
|
|
|
|
param_1[2] = param_1[2] + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1[1] + 4) = puVar1;
|
|
|
|
param_1[1] = puVar1;
|
|
|
|
param_1[2] = param_1[2] + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3620 at 0x006C3620 (size: 124) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c3620(undefined4 *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
uVar2 = *(undefined4 *)(iVar1 + 8);
|
|
|
|
puVar3 = (undefined4 *)param_1[5];
|
|
|
|
iVar1 = *(int *)(iVar1 + 4);
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
LAB_006c3650:
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_1[5] = puVar3[1];
|
|
|
|
param_1[4] = param_1[4] + -1;
|
|
|
|
if (puVar3 == (undefined4 *)0x0) goto LAB_006c3650;
|
|
|
|
}
|
|
|
|
puVar3[2] = uVar2;
|
|
|
|
puVar3[1] = 0;
|
|
|
|
*puVar3 = param_1[1];
|
|
|
|
if (param_1[1] == 0) {
|
|
|
|
*param_1 = puVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 **)(param_1[1] + 4) = puVar3;
|
|
|
|
}
|
|
|
|
param_1[1] = puVar3;
|
|
|
|
param_1[2] = param_1[2] + 1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c36a0 at 0x006C36A0 (size: 36) ---
|
|
|
|
|
|
void __fastcall FUN_006c36a0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
|
|
|
|
FUN_006c3540();
|
|
|
|
pvVar2 = *(void **)(param_1 + 0x14);
|
|
|
|
while (pvVar2 != (void *)0x0) {
|
|
|
|
pvVar1 = *(void **)((int)pvVar2 + 4);
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
pvVar2 = pvVar1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c36d0 at 0x006C36D0 (size: 27) ---
|
|
|
|
|
|
void __fastcall FUN_006c36d0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = param_1;
|
|
|
|
for (iVar1 = 0x12; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
param_1[10] = 1;
|
|
|
|
param_1[8] = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c36f0 at 0x006C36F0 (size: 52) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_006c36f0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_1;
|
|
|
|
piVar3 = &DAT_008079f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar4 = true;
|
|
|
|
piVar2 = param_1 + 0xb;
|
|
|
|
piVar3 = &DAT_008079f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar4 = *piVar2 == *piVar3;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar3 = piVar3 + 1;
|
|
|
|
} while (bVar4);
|
|
|
|
if (!bVar4) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3730 at 0x006C3730 (size: 170) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c3730(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
char *pcVar3;
|
|
|
|
int *piVar4;
|
|
|
|
char *pcVar5;
|
|
|
|
bool bVar6;
|
|
|
|
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_2;
|
|
|
|
piVar4 = &DAT_008079f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_1;
|
|
|
|
piVar4 = param_2;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_2 + 4;
|
|
|
|
piVar4 = &DAT_008079f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_1 + 4;
|
|
|
|
piVar4 = param_2 + 4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_2 + 0xb;
|
|
|
|
piVar4 = &DAT_008079f4;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
iVar1 = 4;
|
|
|
|
bVar6 = true;
|
|
|
|
piVar2 = param_1 + 0xb;
|
|
|
|
piVar4 = param_2 + 0xb;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *piVar2 == *piVar4;
|
|
|
|
piVar2 = piVar2 + 1;
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if ((!bVar6) || (iVar1 = param_1[0x10], iVar1 != param_2[0x10])) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
bVar6 = true;
|
|
|
|
pcVar3 = (char *)param_1[0x11];
|
|
|
|
pcVar5 = (char *)param_2[0x11];
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) break;
|
|
|
|
iVar1 = iVar1 + -1;
|
|
|
|
bVar6 = *pcVar3 == *pcVar5;
|
|
|
|
pcVar3 = pcVar3 + 1;
|
|
|
|
pcVar5 = pcVar5 + 1;
|
|
|
|
} while (bVar6);
|
|
|
|
if (!bVar6) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c37e0 at 0x006C37E0 (size: 103) ---
|
|
|
|
|
|
undefined4 FUN_006c37e0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
uint uVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
puVar2 = param_2;
|
|
|
|
puVar6 = param_1;
|
|
|
|
for (iVar3 = 0x12; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*puVar6 = *puVar2;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
if (param_2[0x10] != 0) {
|
|
|
|
puVar2 = CoTaskMemAlloc(param_2[0x10]);
|
|
|
|
param_1[0x11] = puVar2;
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
param_1[0x10] = 0;
|
|
|
|
return 0x8007000e;
|
|
|
|
}
|
|
|
|
uVar5 = param_1[0x10];
|
|
|
|
puVar6 = (undefined4 *)param_2[0x11];
|
|
|
|
for (uVar4 = uVar5 >> 2; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar2 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
for (uVar5 = uVar5 & 3; uVar5 != 0; uVar5 = uVar5 - 1) {
|
|
|
|
*(undefined1 *)puVar2 = *(undefined1 *)puVar6;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
puVar2 = (undefined4 *)((int)puVar2 + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar1 = (int *)param_1[0xf];
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 4))(piVar1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3850 at 0x006C3850 (size: 56) ---
|
|
|
|
|
|
void __fastcall FUN_006c3850(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x40) != 0) {
|
|
|
|
CoTaskMemFree(*(LPVOID *)(param_1 + 0x44));
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x3c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3890 at 0x006C3890 (size: 29) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006c3890(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = param_1;
|
|
|
|
for (iVar1 = 0x12; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
param_1[10] = 1;
|
|
|
|
param_1[8] = 1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c38b0 at 0x006C38B0 (size: 91) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006c38b0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_2 != param_1) {
|
|
|
|
if (*(int *)(param_1 + 0x40) != 0) {
|
|
|
|
CoTaskMemFree(*(LPVOID *)(param_1 + 0x44));
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x3c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_006c37e0(param_1,param_2);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
return 0x8007000e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006c3910 at 0x006C3910 (size: 71) ---
|
|
|
|
|
|
void FUN_006c3910(LPVOID param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
|
|
|
|
if (param_1 != (LPVOID)0x0) {
|
|
|
|
if (*(int *)((int)param_1 + 0x40) != 0) {
|
|
|
|
CoTaskMemFree(*(LPVOID *)((int)param_1 + 0x44));
|
|
|
|
*(undefined4 *)((int)param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)((int)param_1 + 0x44) = 0;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)((int)param_1 + 0x3c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)((int)param_1 + 0x3c) = 0;
|
|
|
|
}
|
|
|
|
CoTaskMemFree(param_1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- thunk_FUN_006c38b0 at 0x006C3960 (size: 5) ---
|
|
|
|
|
|
undefined4 __thiscall thunk_FUN_006c38b0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
if (param_2 != param_1) {
|
|
|
|
if (*(int *)(param_1 + 0x40) != 0) {
|
|
|
|
CoTaskMemFree(*(LPVOID *)(param_1 + 0x44));
|
|
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x44) = 0;
|
|
|
|
}
|
|
|
|
piVar1 = *(int **)(param_1 + 0x3c);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 8))(piVar1);
|
|
|
|
*(undefined4 *)(param_1 + 0x3c) = 0;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_006c37e0(param_1,param_2);
|
|
|
|
if (iVar2 < 0) {
|
|
|
|
return 0x8007000e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- Unwind@006c39c0 at 0x006C39C0 (size: 8) ---
|
|
|
|
|
|
void Unwind_006c39c0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00557e60();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- Unwind@006c39e0 at 0x006C39E0 (size: 11) ---
|
|
|
|
|
|
void Unwind_006c39e0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0042e590();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- Unwind@006c39eb at 0x006C39EB (size: 11) ---
|
|
|
|
|
|
void Unwind_006c39eb(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004011b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- Unwind@006c3a00 at 0x006C3A00 (size: 8) ---
|
|
|
|
|
|
void Unwind_006c3a00(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004011b0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|