MiBeginPageAccessor
NTSTATUS __stdcall MiBeginPageAccessor(_RTL_BALANCED_NODE *Node, INT64 a2){
INT64 *v4;
_RTL_BALANCED_NODE *CurrentThread;
BOOL v6;
char v7;
bool v8;
_RTL_BALANCED_NODE *v9;
_RTL_BALANCED_NODE *v10;
_RTL_BALANCED_NODE **v11;
_RTL_BALANCED_NODE *v12;
if( (*(_BYTE *)(a2 + 34) & 8) != 0 )
return 0;
Node[1].Children[0] = (_RTL_BALANCED_NODE *)a2;
v4 = (INT64 *)((char *)&stru_140C4DB30 + 1920);
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 = (INT64 *)((char *)&stru_140C4DB30 + 1904);
ExAcquireSpinLockExclusiveAtDpcLevel(v4);
if( HIBYTE(Node[2].ParentValue) )
{
v9 = (_RTL_BALANCED_NODE *)*(&stru_140C4DB30 + 239);
if( *(&stru_140C4DB30 + 239) )
{
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 = (_RTL_BALANCED_NODE **)((char *)&stru_140C4DB30 + 1912);
goto LABEL_14;
}
v9 = (_RTL_BALANCED_NODE *)*(&stru_140C4DB30 + 241);
if( !*(&stru_140C4DB30 + 241) )
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 = (_RTL_BALANCED_NODE **)((char *)&stru_140C4DB30 + 1928);
LABEL_14:
RtlAvlInsertNodeEx(v11, (UINT64)v9, v6, Node);
BYTE4(Node[2].ParentValue) = 1;
ExReleaseSpinLockExclusiveFromDpcLevel(v4);
return 1;
}Referenced by:
MiGetSinglePageToZero
MiUnlinkNodeLargePages