MiInsertHotPatchRecord

VOID __stdcall MiInsertHotPatchRecord(_RTL_BALANCED_NODE **Tree, _RTL_BALANCED_NODE *a2, INT64 a3){
  INT64 *v3; 
  int v4; 
  _RTL_BALANCED_NODE *v5; 
  _ETHREAD *CurrentThread; 
  BOOL v8; 
  INT64 *v9; 
  int v10; 
  NTSTATUS v11; 
  INT64 v12; 

  v3 = 0i64;
  v4 = a3;
  v5 = a2;
  if( (_DWORD)a3 )
  {
    CurrentThread = 0i64;
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.SpecialApcDisable;
    ExAcquirePushLockExclusiveEx(&MiHotPatchListLock, 0i64);
    v5 = a2;
  }
  v8 = 0;
LABEL_5:
  v9 = (INT64 *)*Tree;
  v10 = 1;
  if( *Tree )
  {
    while( 1 )
    {
      v11 = MiCompareHotPatchNodes((INT64)v5, (INT64)v9);
      if( v11 <= 0 )
      {
        if( v11 >= 0 )
        {
          v3 = v9;
          RtlAvlRemoveNode((UINT64 *)Tree, v9);
          v5 = a2;
          goto LABEL_5;
        }
        v12 = *v9;
        if( !*v9 )
          break;
      }
      else
      {
        v12 = v9[1];
        if( !v12 )
        {
          v8 = 1;
          break;
        }
      }
      v9 = (INT64 *)v12;
      v5 = a2;
    }
  }
  RtlAvlInsertNodeEx(Tree, (UINT64)v9, v8, a2);
  if( MiHotPatchGeneration != -1 )
    v10 = MiHotPatchGeneration + 1;
  MiHotPatchGeneration = v10;
  if( !v4 )
  {
    if( (_InterlockedExchangeAdd64(&MiHotPatchListLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&MiHotPatchListLock);
    KeAbPostRelease(&MiHotPatchListLock);
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  if( v3 )
    ExFreePoolWithTag(v3, 0);
}

Referenced by:

MiLoadHotPatch
MiLoadHotPatchForUserSid
MmRegisterHotPatch