ExpCheckForWorker
VOID __stdcall ExpCheckForWorker(VOID *p, UINT64 Size){
char *BugCheckParameter4;
VOID **i;
VOID **NextPartition;
VOID **v6;
unsigned __int16 j;
__int64 v8;
__int64 v9;
char **v10;
unsigned __int8 CurrentIrql;
char **v12;
int k;
char *m;
BugCheckParameter4 = (char *)p + Size;
for( i = 0i64; ; i = v6 )
{
NextPartition = PsGetNextPartition(i);
v6 = NextPartition;
if( !NextPartition )
break;
if( NextPartition != (VOID **)PspSystemPartition || NextPartition[2] )
{
for( j = 0; j < (unsigned __int16)KeNumberNodes; ++j )
{
v8 = 0i64;
v9 = KeNodeBlock[j];
if( (_UNKNOWN *)v9 == (_UNKNOWN *)((char *)&KiNodeInit + 384 * j) )
v9 = 0i64;
do
{
v10 = *(char ***)(*(_QWORD *)(*((_QWORD *)v6[2] + 1) + 8i64 * *(unsigned __int16 *)(v9 + 146)) + v8);
if( ((unsigned __int8)v10 & 1) == 0 && v10 )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KiAcquireKobjectLockSafe(v10);
v12 = v10 + 3;
for( k = 0; k < 32; ++k )
{
for( m = *v12; m != (char *)&v10[2 * k + 3]; m = *(char **)m )
{
if( m >= p && m < BugCheckParameter4 )
KeBugCheckEx(0xE4u, 0i64, m, p, BugCheckParameter4);
}
v12 += 2;
}
_InterlockedAnd((volatile signed __int32 *)v10, 0xFFFFFF7F);
__writecr8(CurrentIrql);
}
v8 += 8i64;
}
while( v8 < 64 );
}
}
}
}Referenced by:
ExFreeHeapPool
ExpFreePoolChecks