HvlpAffinityToHvProcessorSet
VOID __fastcall HvlpAffinityToHvProcessorSet(_KAFFINITY_EX *Affinity, _HV_GENERIC_SET *HvProcessorSet, UINT64 Size){
unsigned __int64 v3;
unsigned int v5;
int v6;
__int64 v7;
char v8;
unsigned __int64 v9;
_KAFFINITY_ENUMERATION_CONTEXT Context;
UINT64 ProcIndex;
v3 = (unsigned int)Size;
*(_DWORD *)(&Context.CurrentIndex + 1) = 0;
*(&Context.CurrentIndex + 3) = 0;
LODWORD(ProcIndex) = 0;
HvProcessorSet->ValidBanksMask = 0i64;
if( Affinity )
{
HvProcessorSet->Format = 0i64;
v5 = 0;
Context.CurrentMask = Affinity->Bitmap[0];
Context.CurrentIndex = 0;
Context.Affinity = Affinity;
while( 1 )
{
KeEnumerateNextProcessor(&ProcIndex, &Context);
if( v6 )
break;
v7 = (unsigned __int8)HvlpVirtualProcessorMapping[2 * (unsigned int)ProcIndex];
v8 = HvlpVirtualProcessorMapping[2 * (unsigned int)ProcIndex + 1];
if( (unsigned int)v7 >= v5 )
{
if( 8 * (unsigned __int64)(unsigned int)(v7 + 1) > v3 )
return;
memset(&HvProcessorSet->BankContents[v5], 0i64, 8 * (v7 - v5 + 1));
v5 = v7 + 1;
}
HvProcessorSet->BankContents[v7] |= 1i64 << v8;
}
if( v5 == 64 )
v9 = -1i64;
else
v9 = (1i64 << v5) - 1;
HvProcessorSet->ValidBanksMask = v9;
}
else
{
HvProcessorSet->Format = 1i64;
}
}Referenced by:
HvlMapDeviceInterrupt
HvlRetargetDeviceInterrupt
HvlpFastFlushAddressSpaceTbEx
HvlpFastFlushListTbEx
HvlpFastSendSyntheticClusterIpiEx
HvlpSlowFlushAddressSpaceTbEx
HvlpSlowFlushListTbEx
HvlpSlowSendSyntheticClusterIpiEx