sub_1405BC6E0
VOID __fastcall __noreturn sub_1405BC6E0(INT64 a1){
unsigned int v2;
_ETHREAD *CurrentThread;
__int16 *p_Object;
unsigned int v5;
UINT8 v6;
UINT8 v7;
__int64 v8;
__int64 v9;
unsigned int v10;
__int64 v11;
__int64 v12;
__int64 v13;
unsigned __int8 CurrentIrql;
int *v15;
__int64 v16;
unsigned __int64 v17;
_QWORD *v18;
int *v19;
char v20;
__int64 v21;
unsigned int v22;
unsigned int v23;
unsigned int v24;
char v25;
__int64 v26;
__int64 v27;
__int64 *v28;
__int64 v29;
__int64 v30;
bool v31;
__int64 v32;
__int64 v33;
IRP *Timeout;
__int64 v35;
__int64 *ThreadTerminationPort;
__int64 v37;
int v38[4];
__int16 Object;
char v40;
int v41;
__int64 v42[3];
__int64 v43;
union _LARGE_INTEGER Interval;
KeExitRetpoline();
ThreadTerminationPort = (__int64 *)PsQueryThreadTerminationPort();
v2 = ExGenRandom(1i64);
v31 = *(_QWORD *)(a1 + 8) == 1i64;
Interval.QuadPart = -1200000000i64 - v2 % 0x5F5E100ui64;
if( v31 )
KeRundownApcQueues((__int64)KeGetCurrentThread());
if( (unsigned int)ExGenRandom(1i64) % 0xA < 3 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 243);
}
p_Object = *(__int16 **)a1;
KeWaitForSingleObject(*(PVOID *)a1, Executive, 0, 0, 0i64);
v5 = ExGenRandom(1i64);
if( v5 % 0xA >= 5 )
{
KeResetEvent(p_Object, v5 / 0xA, v6, v7, Timeout);
}
else
{
Object = 0;
v42[1] = (__int64)v42;
p_Object = &Object;
v40 = 6;
v42[0] = (__int64)v42;
v41 = 0;
}
v8 = *(_QWORD *)(a1 + 16);
*(_QWORD *)(a1 + 16) = 0i64;
v9 = *(_QWORD *)(v8 + 32);
v10 = ExGenRandom(1i64);
v11 = v10 ^ 0x6A15A217BC2A27DBi64;
*ThreadTerminationPort = 0i64;
v12 = v8 ^ v11;
v13 = v9 ^ v11;
v35 = ((unsigned __int8)v10 ^ 0xDB) & 1;
while( 1 )
{
if( (v13 ^ v11) >> 47 == -1 || (v13 ^ v11) >> 47 == 0 )
{
(*(void(__fastcall **)(__int64, __int64, _QWORD, _QWORD))((v12 ^ v11) + 0x18))(
v12 ^ v11,
v13 ^ v11,
*(_QWORD *)((v12 ^ v11) + 0x28),
*(_QWORD *)((v12 ^ v11) + 0x30));
v13 = v11 ^ *(_QWORD *)((v12 ^ v11) + 0x20);
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v38[0] = 34539786;
v38[1] = 218497804;
v38[2] = 235143175;
v15 = v38;
v38[3] = 134284555;
v16 = 16i64;
v17 = v13 ^ v11 ^ *(_QWORD *)((v12 ^ v11) + 0x40) | 0xFFFF800000000000ui64;
v18 = (_QWORD *)v17;
v19 = v38;
v43 = __ROR8__(v17, (v13 ^ v11 ^ *(_BYTE *)((v12 ^ v11) + 0x40)) & 0x3F);
do
{
v20 = *(_BYTE *)v19;
v19 = (int *)((char *)v19 + 1);
*(_BYTE *)v15 = v20 ^ 0xA;
v15 = (int *)((char *)v15 + 1);
--v16;
}
while( v16 );
v21 = v43;
v22 = 16;
v23 = 25;
v24 = 0;
do
{
v25 = ~(unsigned __int8)*v18 & 0x3F;
*v18 = v17 + (KiWaitAlways ^ _byteswap_uint64(v21 ^ __ROL8__(KiWaitNever ^ *v18, KiWaitNever))) + v24;
v21 = (v17 + __ROL8__(__ROR8__(v24 ^ (unsigned __int64)(200 - v24), v25) ^ v21, v25)) ^ 0x3D406922;
v26 = v22;
do
{
v27 = __ROL8__(*v18, 4);
*v18 = *((unsigned __int8 *)v38 + (v27 & 0xF)) | v27 & 0xFFFFFFFFFFFFFFF0ui64;
--v26;
}
while( v26 );
++v18;
if( ++v24 == 25 )
{
if( *(_QWORD *)v17 != 0x85131481131482Ei64 )
{
*(v18 - 1) ^= *(_QWORD *)v17 ^ 0x85131481131482Ei64;
v23 += *((_DWORD *)v18 - 1);
*(v18 - 1) ^= *(_QWORD *)v17 ^ 0x85131481131482Ei64;
}
v22 = 1;
}
}
while( v24 < v23 );
v28 = ThreadTerminationPort;
v29 = *(_QWORD *)v17 ^ 0x85131481131482Ei64;
*(_BYTE *)(v17 + 3) = 17;
*(_BYTE *)(v17 + 2) = 49;
*(_BYTE *)(v17 + 1) = 72;
*(_BYTE *)v17 = 46;
((void(__fastcall *)(unsigned __int64, __int64, _QWORD, _QWORD))v17)(v17, v29, 0i64, 0i64);
__writecr8(CurrentIrql);
v30 = *v28;
v31 = *v28 == 0;
if( *v28 > 0 )
{
v32 = -v30;
*ThreadTerminationPort = 0i64;
v37 = v32;
(*(void(__fastcall **)(_QWORD))(v32 + 16))(*(_QWORD *)(v32 + 24));
memset((void *)v32, 0, 0x20ui64);
memset(&v37, 0, sizeof(v37));
v30 = *ThreadTerminationPort;
v31 = *ThreadTerminationPort == 0;
}
if( v31 )
{
do
{
if( v35 )
KeDelayExecutionThread(0, 0, &Interval);
else
KeWaitForSingleObject(p_Object, Executive, 0, 0, &Interval);
v30 = *ThreadTerminationPort;
}
while( !*ThreadTerminationPort );
}
v33 = *(_QWORD *)(v30 + 32);
v12 = v11 ^ v30;
*ThreadTerminationPort = 0i64;
v13 = v11 ^ v33;
if( v35 )
KeDelayExecutionThread(0, 0, &Interval);
else
KeWaitForSingleObject(p_Object, Executive, 0, 0, &Interval);
}
}Referenced by:
No references.