sub_1405CA010
UINT8 __fastcall sub_1405CA010(KDPC *Dpc){
__int64 ProcessorHistory_low;
unsigned __int8 *v3;
__int64 v4;
char SystemArgument1;
unsigned __int64 DeferredContext;
int v7;
__int64 v8;
_QWORD *v9;
char *v10;
unsigned __int64 v11;
unsigned int i;
__int64 v13;
unsigned __int64 v14;
__int64 v15;
__int64 v16;
unsigned int v17;
unsigned __int64 v18;
__int64 v19;
char *v20;
int v21;
void(__fastcall *v22)(_KDPC *, void *, void *, void *);
unsigned __int8 *v23;
__int64 v24;
unsigned __int64 v25;
unsigned int v26;
UINT8 result;
int SystemArgument1_high;
unsigned __int8 CurrentIrql;
unsigned __int64 v30;
__int64 v31;
unsigned __int64 v32;
NTSTATUS v33;
unsigned __int64 v34;
struct _KPRCB *CurrentPrcb;
void **v36;
_QWORD *v37;
KDPC *v38;
__int64 v39;
KeExitRetpoline();
ProcessorHistory_low = LODWORD(Dpc[2].ProcessorHistory);
v3 = *(unsigned __int8 **)&Dpc[2].TargetInfoAsUlong;
v4 = ProcessorHistory_low;
SystemArgument1 = (char)Dpc[2].SystemArgument1;
DeferredContext = (unsigned __int64)Dpc[2].DeferredContext;
LOBYTE(v7) = SystemArgument1;
v38 = Dpc;
v8 = (__int64)Dpc[2].DpcListEntry.Next + *(unsigned int *)v3;
v9 = (_QWORD *)v8;
v10 = (char *)v8;
if( v8 < (unsigned __int64)(ProcessorHistory_low + v8) )
{
do
{
_mm_prefetchnta(v10);
v10 += 64;
}
while( (unsigned __int64)v10 < ProcessorHistory_low + v8 );
}
v11 = DeferredContext;
for( i = (unsigned int)ProcessorHistory_low >> 7; i; --i )
{
v13 = 8i64;
do
{
v14 = v11 ^ *v9;
v15 = v9[1];
v9 += 2;
v11 = __ROL8__(__ROL8__(v14, v7) ^ v15, v7);
--v13;
}
while( v13 );
v16 = __ROL8__(DeferredContext ^ ((unsigned __int64)v9 - v8), 17);
v7 = ((unsigned __int8)((((v16 ^ DeferredContext ^ ((unsigned __int64)v9 - v8))
* (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v16 ^ DeferredContext ^ ((_BYTE)v9 - v8)) ^ (unsigned __int8)v7) & 0x3F;
if( !v7 )
LOBYTE(v7) = 1;
}
v17 = ProcessorHistory_low & 0x7F;
if( v17 >= 8 )
{
v18 = (unsigned __int64)v17 >> 3;
do
{
v11 = __ROL8__(*v9++ ^ v11, v7);
v17 -= 8;
--v18;
}
while( v18 );
}
for( ; v17; --v17 )
{
v19 = *(unsigned __int8 *)v9;
v9 = (_QWORD *)((char *)v9 + 1);
v11 = __ROL8__(v19 ^ v11, v7);
}
v20 = (char *)v3;
if( v3 < v3 + 12 )
{
do
{
_mm_prefetchnta(v20);
v20 += 64;
}
while( v20 < (char *)v3 + 12 );
}
v21 = 4;
v22 = (void(__fastcall *)(_KDPC *, void *, void *, void *))__ROL8__(v11 ^ *(_QWORD *)v3, SystemArgument1);
v23 = v3 + 8;
do
{
v24 = *v23++;
v22 = (void(__fastcall *)(_KDPC *, void *, void *, void *))__ROL8__(v24 ^ (unsigned __int64)v22, SystemArgument1);
--v21;
}
while( v21 );
v25 = -1200000000i64 - (unsigned int)ExGenRandom(1i64) % 0x5F5E100ui64;
v26 = ExGenRandom(1i64);
result = KeSetCoalescableTimer((PKTIMER)&Dpc[1], (LARGE_INTEGER)v25, 0, v26 % 0x2710, Dpc);
if( v22 != Dpc[2].DeferredRoutine )
{
if( LODWORD(Dpc[2].SystemArgument2) )
{
SystemArgument1_high = HIDWORD(Dpc[2].SystemArgument1);
if( v4 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v30 = v8 & 0xFFFFFFFFFFFFF000ui64;
v31 = (v8 + v4 - 1) | 0xFFF;
v32 = (v8 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v33 = VslVerifyPage(v30, 0i64);
v34 = CurrentIrql;
while( v33 == -1073741267 )
{
if( !SystemArgument1_high )
goto LABEL_31;
if( CurrentIrql > 1u )
goto LABEL_28;
v34 = CurrentIrql;
__writecr8(CurrentIrql);
KeGetCurrentIrql();
__writecr8(2ui64);
v33 = VslVerifyPage(v30, 0i64);
}
if( v33 < 0 )
break;
LABEL_28:
result = 0;
v30 += 4096i64;
v32 += 4096i64;
if( v32 == v31 )
{
__writecr8(v34);
return result;
}
}
LABEL_31:
__writecr8(v34);
}
}
_disable();
CurrentPrcb = KeGetCurrentPrcb();
v36 = (void **)*((_QWORD *)CurrentPrcb + 1570);
v37 = (_QWORD *)*((_QWORD *)CurrentPrcb + 1);
if( !*((_BYTE *)CurrentPrcb + 12586) || &v38 > (KDPC **)v36 || &v38 < (KDPC **)v36 - 3072 )
v36 = (void **)v37[5];
v37[138] = 0i64;
v37[154] = 0i64;
ExTryAcquireSpinLockExclusiveAtDpcLevel((INT64 *)PsLoadedModuleSpinLock);
v39 = 0xD147407EB1239169ui64;
CcAdjustBcbDepth(
(unsigned int)__ROR4__(150994945, 216),
__ROL8__(0xD147407EB1239169ui64, 71),
0i64,
v8,
(unsigned int)__ROL4__(1098907648, 74),
(__int64(__fastcall *)(__int64))KeBugCheckEx,
v36);
JUMPOUT(0x1405CA37Di64);
}
return result;
}Referenced by:
No references.