MiInitializeSystemChannelOrdering
VOID __stdcall MiInitializeSystemChannelOrdering(_MI_PARTITION *Partition, UINT64 NodeNumber){
int v2;
_MI_NODE_INFORMATION *v3;
UINT64 *v4;
__int64 i;
__int64 v6;
unsigned int v7;
__int64 v8;
unsigned int v9;
unsigned __int8 *PowerAttribute;
unsigned int v11;
unsigned __int8 *v12;
unsigned int v13;
unsigned __int8 *v14;
v2 = NodeNumber;
v3 = &Partition->Core.NodeInformation[(unsigned int)NodeNumber];
v4 = (UINT64 *)MxFreeDescriptor[(unsigned int)NodeNumber];
if( v4[1] )
v3->PowerAttribute[MiPageToChannel(*v4)] = 2;
for( i = *(&stru_140C4DB30 + 28); *(_QWORD *)i != -1i64; i += 16i64 )
{
if( *(unsigned __int16 *)(i + 10) == v2 )
{
v6 = *(unsigned __int16 *)(i + 12);
if( *(_BYTE *)(i + 14) )
{
if( v3->PowerAttribute[v6] != 2 )
v3->PowerAttribute[v6] = 1;
}
else
{
v3->PowerAttribute[v6] = 2;
}
}
}
v7 = MmNumberOfChannels;
v8 = 0i64;
v9 = 0;
if( MmNumberOfChannels )
{
PowerAttribute = v3->PowerAttribute;
do
{
if( *PowerAttribute == 2 )
{
v3->ChannelOrdering[v8] = v9;
v3->LockedChannelOrdering[v8] = v9;
v8 = (unsigned int)(v8 + 1);
}
++v9;
++PowerAttribute;
}
while( v9 < v7 );
}
v11 = 0;
if( v7 )
{
v12 = v3->PowerAttribute;
do
{
if( *v12 == 1 )
{
v3->ChannelOrdering[v8] = v11;
v3->LockedChannelOrdering[v8] = v11;
v8 = (unsigned int)(v8 + 1);
}
++v11;
++v12;
}
while( v11 < v7 );
}
v13 = 0;
if( v7 )
{
v14 = v3->PowerAttribute;
do
{
if( !*v14 )
{
v3->ChannelOrdering[v8] = v13;
v3->LockedChannelOrdering[v8] = v13;
v8 = (unsigned int)(v8 + 1);
}
++v13;
++v14;
}
while( v13 < v7 );
}
}Referenced by:
MiInitializeChannelOrdering