ExAllocateCacheAwarePushLock
_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *__stdcall ExAllocateCacheAwarePushLock(UINT64 Flags){
char v1;
int v2;
unsigned int v3;
VOID **PoolWithTag;
_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *v5;
VOID **v6;
VOID **v7;
_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *v8;
__int64 v9;
_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *v10;
unsigned int v12;
unsigned int v13;
struct _KPRCB *v14;
UINT16 v15;
_QWORD *PoolWithTagFromNode;
_QWORD *v17;
INT64 v18;
unsigned int v19;
_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *v20;
_GROUP_AFFINITY Affinity;
_GROUP_AFFINITY PreviousAffinity;
v1 = 0;
v2 = Flags & 1;
Affinity = 0i64;
v3 = v2 != 0 ? 512 : 1;
PreviousAffinity = 0i64;
PoolWithTag = ExAllocatePoolWithTag(v3, 0x100ui64, 1885563984i64);
v5 = (_EX_PUSH_LOCK_CACHE_AWARE_LEGACY *)PoolWithTag;
if( !PoolWithTag )
return 0i64;
memset(PoolWithTag, 0i64, 0x100u);
if( KeNumberNodes == 1 )
{
v6 = ExAllocatePoolWithTag(v3, 0x1000ui64, 1818455120i64);
v7 = v6;
if( v6 )
{
memset(v6, 0i64, 0x1000u);
v8 = v5;
v9 = 32i64;
do
{
*v7 = 0i64;
*((_BYTE *)v7 + 8) = 1;
v7[2] = v5;
*(_QWORD *)v8 = v7;
v7 += 16;
v8 += 2;
--v9;
}
while( v9 );
return v5;
}
v10 = 0i64;
}
else
{
v12 = KeNumberProcessors_0;
v13 = 0;
v19 = KeNumberProcessors_0;
v20 = v5;
while( 1 )
{
v14 = v13 >= v12 ? KeGetCurrentPrcb() : KeGetPrcb(v13);
v15 = v14->ParentNode->Affinity.Reserved[0];
if( v2 )
{
LODWORD(v18) = 0;
PoolWithTagFromNode = ExpAllocatePoolWithTagFromNode(0x200ui64, 0x80u, 0x6C636C50ui64, v15, v18);
}
else
{
KeQueryNodeActiveAffinity(v15, &Affinity, 0i64);
if( v1 )
{
KeSetSystemGroupAffinityThread(&Affinity, 0i64);
}
else
{
KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
v1 = 1;
}
PoolWithTagFromNode = ExAllocatePoolWithTag(v3, 0x80ui64, 1818455120i64);
}
v17 = PoolWithTagFromNode;
if( !PoolWithTagFromNode )
break;
memset(PoolWithTagFromNode, 0i64, 0x80u);
++v13;
v17[2] = v5;
*(_QWORD *)v20 = v17;
v20 += 2;
if( v13 >= 0x20 )
{
v10 = v5;
v5 = 0i64;
goto LABEL_25;
}
v12 = v19;
}
v10 = 0i64;
LABEL_25:
if( v1 )
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
}
if( v5 )
ExFreeCacheAwarePushLock((ULONG_PTR *)v5);
return v10;
}Referenced by:
No references.