sub_1405CA010
void __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;
INT64 v25;
unsigned int v26;
int SystemArgument1_high;
unsigned __int8 CurrentIrql;
__int64 v29;
__int64 v30;
unsigned __int64 v31;
NTSTATUS v32;
unsigned __int64 v33;
struct _KPRCB *CurrentPrcb;
void **DpcStack;
_ETHREAD *CurrentThread;
_KDPC *v37;
__int64 v38;
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;
v37 = 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(ExGenRandomDomainUserVisible) % 0x5F5E100ui64;
v26 = ExGenRandom(ExGenRandomDomainUserVisible);
KeSetCoalescableTimer((INT64)&Dpc[1], v25, 0i64, v26 % 0x2710, (INT64)Dpc);
if( v22 != Dpc[2].DeferredRoutine )
{
if( LODWORD(Dpc[2].SystemArgument2) )
{
SystemArgument1_high = HIDWORD(Dpc[2].SystemArgument1);
if( v4 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v29 = v8 & 0xFFFFFFFFFFFFF000ui64;
v30 = (v8 + v4 - 1) | 0xFFF;
v31 = (v8 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 1 )
{
v32 = VslVerifyPage(v29, 0);
v33 = CurrentIrql;
while( v32 == -1073741267 )
{
if( !SystemArgument1_high )
goto LABEL_31;
if( CurrentIrql > 1u )
goto LABEL_28;
v33 = CurrentIrql;
__writecr8(CurrentIrql);
KeGetCurrentIrql();
__writecr8(2ui64);
v32 = VslVerifyPage(v29, 0);
}
if( v32 < 0 )
break;
LABEL_28:
v29 += 4096i64;
v31 += 4096i64;
if( v31 == v30 )
{
__writecr8(v33);
return;
}
}
LABEL_31:
__writecr8(v33);
}
}
_disable();
CurrentPrcb = KeGetCurrentPrcb();
DpcStack = (void **)CurrentPrcb->DpcStack;
CurrentThread = CurrentPrcb->CurrentThread;
if( !CurrentPrcb->DpcRoutineActive || &v37 > (_KDPC **)DpcStack || &v37 < (_KDPC **)DpcStack - 3072 )
DpcStack = (void **)CurrentThread->Tcb.InitialStack;
*(_QWORD *)&CurrentThread->gap438[24] = 0i64;
CurrentThread->Win32StartAddress = 0i64;
ExTryAcquireSpinLockExclusiveAtDpcLevel(&PsLoadedModuleSpinLock);
v38 = 0xD147407EB1239169ui64;
CcAdjustBcbDepth(
(unsigned int)__ROR4__(150994945, 216),
__ROL8__(0xD147407EB1239169ui64, 71),
0i64,
v8,
(unsigned int)__ROL4__(1098907648, 74),
(__int64(__fastcall *)(__int64))KeBugCheckEx,
DpcStack);
JUMPOUT(0x1405CA37Di64);
}
}Referenced by:
No references.