MiBeginPageAccessor
INT64 __stdcall MiBeginPageAccessor(RTL_BALANCED_NODE *Node, INT64 a2){
LONG *v4;
_RTL_BALANCED_NODE *CurrentThread;
bool v6;
char v7;
bool v8;
RTL_BALANCED_NODE *v9;
RTL_BALANCED_NODE *v10;
unsigned __int64 *v11;
RTL_BALANCED_NODE *v12;
if( (*(_BYTE *)(a2 + 34) & 8) != 0 )
return 0i64;
Node[1].Children[0] = (_RTL_BALANCED_NODE *)a2;
v4 = &dword_140C4E2B0;
CurrentThread = (_RTL_BALANCED_NODE *)KeGetCurrentThread();
v6 = 0;
Node[2].Children[1] = CurrentThread;
v7 = *(_BYTE *)(a2 + 34);
*(_QWORD *)(a2 + 16) = Node;
*(_BYTE *)(a2 + 34) = v7 | 8;
v8 = HIBYTE(Node[2].ParentValue) == 0;
Node[1].Children[1] = 0i64;
*(_WORD *)((char *)&Node[2].ParentValue + 5) = 0;
if( !v8 )
v4 = &dword_140C4E2A0;
ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)v4);
if( HIBYTE(Node[2].ParentValue) )
{
v9 = (RTL_BALANCED_NODE *)qword_140C4E2A8;
if( qword_140C4E2A8 )
{
while( 1 )
{
if( CurrentThread >= v9[2].Children[1] )
{
v12 = v9->Children[1];
if( !v12 )
{
v6 = 1;
break;
}
}
else
{
v12 = v9->Children[0];
if( !v9->Children[0] )
break;
}
v9 = v12;
}
}
v11 = (unsigned __int64 *)&qword_140C4E2A8;
goto LABEL_14;
}
v9 = RootPointer;
if( !RootPointer )
goto LABEL_13;
while( Node < v9 )
{
v10 = v9->Children[0];
if( !v9->Children[0] )
goto LABEL_13;
LABEL_9:
v9 = v10;
}
v10 = v9->Children[1];
if( v10 )
goto LABEL_9;
v6 = 1;
LABEL_13:
v11 = (unsigned __int64 *)&RootPointer;
LABEL_14:
RtlAvlInsertNodeEx(v11, (__int64)v9, v6, Node);
BYTE4(Node[2].ParentValue) = 1;
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v4);
return 1i64;
}Referenced by:
MiGetSinglePageToZero
MiUnlinkNodeLargePages