MiReplaceSystemProtoPtesNode
NTSTATUS __stdcall MiReplaceSystemProtoPtesNode(_RTL_BALANCED_NODE *Node, _RTL_BALANCED_NODE *a2){
unsigned __int64 v4;
unsigned __int64 v5;
BOOL v6;
_RTL_BALANCED_NODE *Root;
_RTL_BALANCED_NODE *v8;
NTSTATUS result;
__int64 v10;
__int64 v11;
v10 = 0i64;
v4 = MiObtainProtoBaseFromNode(Node, &v10);
v5 = (unsigned __int8)ExAcquireSpinLockExclusive(&qword_140C4C880);
RtlAvlRemoveNode((UINT64 *)&RootPointer, (INT64 *)Node);
Node[1].Children[0] = (_RTL_BALANCED_NODE *)((unsigned __int64)Node[1].Children[0] & ~8ui64);
v6 = 0;
Root = RootPointer.Root;
if( RootPointer.Root )
{
while( 1 )
{
v11 = 0i64;
if( v4 < MiObtainProtoBaseFromNode(Root, &v11) )
{
v8 = Root->Children[0];
if( !Root->Children[0] )
{
v6 = 0;
break;
}
}
else
{
v8 = Root->Children[1];
if( !v8 )
{
v6 = 1;
break;
}
}
Root = v8;
}
}
RtlAvlInsertNodeEx(&RootPointer.Root, (UINT64)Root, v6, a2);
a2[1].Children[0] = (_RTL_BALANCED_NODE *)((unsigned __int64)a2[1].Children[0] | 8);
ExReleaseSpinLockExclusiveFromDpcLevel(&qword_140C4C880);
result = KiIrqlFlags;
__writecr8(v5);
return result;
}Referenced by:
MiAllocateFileExtents