#include "../uefi_headers/Uefi.h"
// ==================================================================
// DXE Event and Timer Services
// Source: MdeModulePkg/Core/Dxe/Event/Event.c
// ==================================================================
// SetTimer
// SetTimer -- Set a timer event (timer delta)
//
unsigned __int64 __fastcall SetTimer(__int16 n512, __int64 n8, __int64 sub_A488, __int64 *i, __int64 *a5)
{
if ( (n512 & 0x300) != 0 && (((n8 - 4) & 0xFFFFFFFFFFFFFFF3uLL) != 0 || n8 == 12) ) /*0xaa1c*/
return 0x8000000000000002uLL; /*0xaa1e*/
else
return RegRegister(n512, n8, sub_A488, (__int64)i, 0, a5); /*0xaa3a*/
}
// SignalEvent
// SignalEvent -- Signal an event
//
unsigned __int64 __fastcall SignalEvent(int n513, __int64 n12, __int64 a3, __int64 a4, __int64 *a5, __int64 *a6)
{
if ( (n513 & 0x300) != 0 && (((n12 - 4) & 0xFFFFFFFFFFFFFFF3uLL) != 0 || n12 == 12) ) /*0xaa5c*/
return 0x8000000000000002uLL; /*0xaa5e*/
else
return RegRegister((unsigned __int16)n513, n12, a3, a4, a5, a6); /*0xaa69*/
}
// CoreCreateEvent
// CoreCreateEvent / CreateEventEx -- Create and register a new event
//
unsigned __int64 __fastcall CoreCreateEvent(int n513, __int64 a2, __int64 a3, __int64 a4, __int64 *a5, __int64 *a6)
{
double v6; // xmm3_8
__int64 v8; // r14
int n513_1; // edi
unsigned __int64 n0x20; // rax
__int64 *v13; // rsi
__int64 *v14; // rax
unsigned int n6; // ecx
char *Info_19; // rax
__int64 v17; // r8
__int64 Info; // rbx
__int64 v19; // rdx
__int64 v20; // r8
__int64 v21; // rdx
__int64 v22; // r8
v8 = a3; /*0xaa94*/
n513_1 = n513; /*0xaa9a*/
if ( !a6 ) /*0xaa9f*/
return 0x8000000000000002uLL; /*0xaa9f*/
n0x20 = 0; /*0xaab0*/
while ( n513 != *(_DWORD *)((char *)&unk_1EB20 + n0x20) ) /*0xaabc*/
{
n0x20 += 4LL; /*0xaabe*/
if ( n0x20 >= 0x20 ) /*0xaac6*/
return 0x8000000000000002uLL; /*0xaac6*/
}
v13 = a5; /*0xaaca*/
if ( a5 ) /*0xaad7*/
{
if ( n513 == 513 || n513 == 1610613250 ) /*0xaae4*/
return 0x8000000000000002uLL; /*0xaae4*/
if ( Assert_103((__int64)a5, (__int64)&qword_226B0, a3, v6) ) /*0xaaf0*/
{
n513_1 = 513; /*0xaaf9*/
}
else if ( Assert_103((__int64)a5, (__int64)&unk_22720, a3, v6) ) /*0xab07*/
{
n513_1 = 1610613250; /*0xab10*/
}
}
else if ( n513 == 513 ) /*0xab16*/
{
v13 = &qword_226B0; /*0xab18*/
}
else
{
v14 = (__int64 *)&unk_22720; /*0xab26*/
if ( n513 != 1610613250 ) /*0xab2f*/
v14 = 0; /*0xab2f*/
v13 = v14; /*0xab33*/
}
if ( (n513_1 & 0x300) != 0 ) /*0xab3c*/
{
if ( !v8 || (unsigned __int64)(a2 - 5) > 0x19 ) /*0xab4f*/
return 0x8000000000000002uLL; /*0xaaab*/
}
else
{
a2 = 0; /*0xab56*/
v8 = 0; /*0xab59*/
a4 = 0; /*0xab5c*/
}
n6 = 6; /*0xab66*/
if ( (n513_1 & 0x40000000) == 0 ) /*0xab71*/
n6 = 4; /*0xab73*/
Info_19 = GetInfo_19(n6, 0xB8u, a3, v6); /*0xab78*/
Info = (__int64)Info_19; /*0xab7d*/
if ( !Info_19 ) /*0xab83*/
return 0x8000000000000009uLL; /*0xab85*/
*(_QWORD *)Info_19 = 1953396325; /*0xab94*/
*((_DWORD *)Info_19 + 2) = n513_1; /*0xab9b*/
*((_QWORD *)Info_19 + 4) = a2; /*0xab9e*/
*((_QWORD *)Info_19 + 5) = v8; /*0xaba2*/
*((_QWORD *)Info_19 + 6) = a4; /*0xaba6*/
if ( v13 ) /*0xabad*/
{
Assert_108((_QWORD *)Info_19 + 7, (__int64)v13, v17, v6); /*0xabb6*/
*(_BYTE *)(Info + 88) |= 1u; /*0xabbb*/
}
*a6 = Info; /*0xabbf*/
Assert_3(0x80000, "Registering Notify Function %p; Type = 0x%X\n", *(const void **)(Info + 40), *(_DWORD *)(Info + 8)); /*0xabd7*/
if ( (n513_1 & 0x40000000) != 0 ) /*0xabde*/
{
*(_DWORD *)(Info + 96) = n513_1; /*0xabe0*/
*(_QWORD *)(Info + 104) = a2; /*0xabea*/
*(_QWORD *)(Info + 112) = v8; /*0xabee*/
*(_QWORD *)(Info + 120) = a4; /*0xabf2*/
*(_QWORD *)(Info + 128) = Info; /*0xabf6*/
Assert_53(off_22838 + 2, (_QWORD *)(Info + 136), v20, v6); /*0xac08*/
}
DxeGetInfo_8((__int64)&unk_26088, v19, v20, v6); /*0xac14*/
if ( (n513_1 & 0x200) != 0 ) /*0xac1d*/
Assert_54((__int64 *)&i_6, (__int64 *)(Info + 16), v22, v6); /*0xac2a*/
DxeGetInfo_10((__int64)&unk_26088, v21, v22, v6); /*0xac36*/
return 0; /*0xac4c*/
}
// CheckEvent
// CheckEvent / WaitForEvent -- Check if event is signaled
//
unsigned __int64 __fastcall CheckEvent(_UNKNOWN **i, __int64 a2, __int64 a3, double a4)
{
__int64 v6; // rdx
__int64 v7; // r8
bool v8; // zf
__int64 v9; // rdx
__int64 v10; // r8
__int64 v11; // rdx
__int64 v12; // r8
if ( !i || *i != (_UNKNOWN *)1953396325 ) /*0xac7d*/
return 0x8000000000000002uLL; /*0xac6a*/
DxeGetInfo_8((__int64)&unk_26088, a2, a3, a4); /*0xac86*/
if ( !*((_DWORD *)i + 3) ) /*0xac8b*/
{
v8 = ((_DWORD)i[1] & 0x200) == 0; /*0xac91*/
*((_DWORD *)i + 3) = 1; /*0xac98*/
if ( !v8 ) /*0xac9f*/
{
if ( ((_BYTE)i[11] & 1) != 0 ) /*0xaca5*/
{
DxeGetInfo_10((__int64)&unk_26088, v6, v7, a4); /*0xacae*/
DxeGetInfo_2((__int64)(i + 7), v9, v10, a4); /*0xacb7*/
DxeGetInfo_8((__int64)&unk_26088, v11, v12, a4); /*0xacc3*/
}
else
{
DxeGetInfo_5(i, v6, v7, a4); /*0xaccd*/
}
}
}
DxeGetInfo_10((__int64)&unk_26088, v6, v7, a4); /*0xacd9*/
return 0; /*0xace0*/
}
// CloseEvent
// CloseEvent -- Close/destroy an event
//
unsigned __int64 __fastcall CloseEvent(__int64 i, __int64 a2, __int64 a3, double a4)
{
unsigned __int64 v6; // rdi
__int64 v7; // rdx
__int64 v8; // r8
__int64 v9; // rdx
__int64 v10; // r8
if ( !i || *(_QWORD *)i != 1953396325 || (*(_DWORD *)(i + 8) & 0x200) != 0 ) /*0xad16*/
return 0x8000000000000002uLL; /*0xacfa*/
v6 = 0x8000000000000006uLL; /*0xad1c*/
if ( !*(_DWORD *)(i + 12) && (*(_DWORD *)(i + 8) & 0x100) != 0 ) /*0xad2f*/
{
DxeGetInfo_8((__int64)&unk_26088, a2, a3, a4); /*0xad38*/
if ( !*(_DWORD *)(i + 12) ) /*0xad3d*/
DxeGetInfo_5((_UNKNOWN **)i, v7, v8, a4); /*0xad46*/
DxeGetInfo_10((__int64)&unk_26088, v7, v8, a4); /*0xad52*/
}
if ( *(_DWORD *)(i + 12) ) /*0xad57*/
{
DxeGetInfo_8((__int64)&unk_26088, a2, a3, a4); /*0xad64*/
if ( *(_DWORD *)(i + 12) ) /*0xad69*/
{
*(_DWORD *)(i + 12) = 0; /*0xad6f*/
v6 = 0; /*0xad73*/
}
DxeGetInfo_10((__int64)&unk_26088, v9, v10, a4); /*0xad7c*/
}
return v6; /*0xad89*/
}
// CoreCreatePropertiesTable
// CoreCreateEvent (TPL notify) -- Event creation with TPL notify function
//
__int64 __fastcall CoreCreatePropertiesTable(_QWORD *a1, char *src, char *p_n6, unsigned __int64 count)
{
double v4; // xmm3_8
_QWORD *v7; // rax
unsigned __int64 v8; // rdx
_QWORD *v9; // r14
__int64 v10; // r9
int n6_2; // r10d
char v12; // r11
unsigned __int64 v13; // r15
__int64 v14; // rdi
__int64 v15; // rsi
int n6; // r12d
_QWORD *v17; // r8
int n6_1; // eax
unsigned __int64 v19; // rcx
int n5; // eax
__int64 v21; // rdx
unsigned __int64 v22; // rcx
unsigned __int64 v23; // rcx
char dst[8]; // [rsp+20h] [rbp-30h] BYREF
unsigned __int64 v26; // [rsp+28h] [rbp-28h]
unsigned __int64 v27; // [rsp+38h] [rbp-18h]
__int64 v28; // [rsp+40h] [rbp-10h]
MemConfig_1(dst, p_n6, 0x28u, v4); /*0xafc1*/
v7 = a1 + 6; /*0xafca*/
v8 = v26; /*0xafce*/
v9 = (_QWORD *)a1[6]; /*0xafd2*/
v10 = v28; /*0xafd5*/
n6_2 = *(_DWORD *)dst; /*0xafd9*/
v12 = byte_280B8; /*0xafdd*/
v13 = v26 + (v27 << 12); /*0xafe8*/
v14 = 0; /*0xafeb*/
v15 = 0; /*0xafed*/
n6 = 6; /*0xafef*/
while ( v9 != v7 )
{
v17 = v9 - 1; /*0xaffc*/
if ( *((_DWORD *)v9 - 2) != 1129467977 ) /*0xb007*/
{
Assert_7( /*0xb01c*/
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\PropertiesTable.c",
364,
(__int64)"CR has Bad Signature",
v4);
v10 = v28; /*0xb021*/
v7 = a1 + 6; /*0xb025*/
v8 = v26; /*0xb029*/
v17 = v9; /*0xb02d*/
n6_2 = *(_DWORD *)dst; /*0xb030*/
v12 = byte_280B8; /*0xb034*/
}
v9 = (_QWORD *)*v9; /*0xb03b*/
if ( v8 <= v17[3] )
{
*((_QWORD *)src + 1) = v8; /*0xb047*/
n6_1 = 6; /*0xb04b*/
*((_QWORD *)src + 2) = 0; /*0xb04e*/
if ( !v12 ) /*0xb052*/
n6_1 = n6_2; /*0xb052*/
*(_DWORD *)src = n6_1; /*0xb056*/
v19 = (((v17[3] - v8) & 0xFFF) != 0) + ((v17[3] - v8) >> 12); /*0xb071*/
*((_QWORD *)src + 3) = v19; /*0xb07c*/
*((_QWORD *)src + 4) = v10 | 0x4000; /*0xb080*/
if ( v19 ) /*0xb087*/
{
src += count; /*0xb089*/
++v15; /*0xb08d*/
}
n5 = 5; /*0xb093*/
if ( !v12 ) /*0xb098*/
n5 = n6_2; /*0xb098*/
*(_DWORD *)src = n5; /*0xb09c*/
*((_QWORD *)src + 1) = v17[3]; /*0xb0a2*/
*((_QWORD *)src + 2) = 0; /*0xb0a9*/
v21 = ((v17[4] & 0xFFFLL) != 0) + (v17[4] >> 12); /*0xb0bb*/
*((_QWORD *)src + 3) = v21; /*0xb0c7*/
*((_QWORD *)src + 4) = v10 & 0xFFFFFFFFFFFDBFFFuLL | 0x20000; /*0xb0d0*/
if ( v21 ) /*0xb0d7*/
{
src += count; /*0xb0d9*/
++v15; /*0xb0dd*/
}
v26 = v17[3] + (v17[4] & 0xFFFFFFFFFFFFF000uLL) + ((v17[4] & 0xFFFLL) != 0 ? 0x1000 : 0);
v8 = v26; /*0xb108*/
v27 = ((v13 - v26) >> 12) + (((v13 - v26) & 0xFFF) != 0); /*0xb124*/
if ( !v27 ) /*0xb128*/
break; /*0xb128*/
v7 = a1 + 6; /*0xb12a*/
}
}
v22 = a1[3] + a1[4]; /*0xb133*/
if ( v8 < v22 ) /*0xb13e*/
{
*((_QWORD *)src + 2) = 0; /*0xb143*/
*((_QWORD *)src + 1) = v8; /*0xb147*/
if ( !v12 ) /*0xb14b*/
n6 = n6_2; /*0xb14b*/
v23 = v22 - v8; /*0xb14f*/
*(_DWORD *)src = n6; /*0xb159*/
LOBYTE(v14) = (v23 & 0xFFF) != 0; /*0xb15c*/
*((_QWORD *)src + 3) = (v23 >> 12) + v14; /*0xb16c*/
++v15; /*0xb170*/
*((_QWORD *)src + 4) = v10 | 0x4000; /*0xb173*/
}
return v15; /*0xb18b*/
}