MiUnapplyDriverHotPatch

INT64 __fastcall MiUnapplyDriverHotPatch(INT64 a1, INT64 rdx0){
  unsigned int v2; 
  INT64 v5; 
  void *v6; 
  int v7; 
  void *v8; 
  INT64 v10[2]; 
  char v11[12]; 
  int v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  int a2; 
  v2 = *(_DWORD *)(a1 + 64);
  a2 = 0;
  *(_QWORD *)&v11[4] = 0i64;
  v12 = 0;
  v14 = 0i64;
  v16 = 0i64;
  v10[0] = a1;
  v5 = *(_QWORD *)(a1 + 48);
  v10[1] = 0i64;
  v13 = 0i64;
  v6 = 0i64;
  v15 = 0i64;
  *(_QWORD *)v11 = (v2 >> 12) + ((v2 & 0xFFF) != 0);
  v7 = VslDetermineHotPatchUndoTableSize(v5, &a2);
  if( v7 >= 0 )
  {
    v7 = a2;
    if( a2 )
    {
      LODWORD(v8) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
      v6 = v8;
      if( v8 )
      {
        v7 = VslObtainHotPatchUndoTable(*(PVOID *)(a1 + 48));
        if( v7 >= 0 )
        {
          v7 = MiPrepareDriverPatchState((INT64)v10);
          if( v7 >= 0 )
          {
            v7 = MiLockHotPatchUndoPages(v10, (INT64)v6);
            if( v7 >= 0 )
              v7 = VslRevertHotPatch(*(_QWORD *)(a1 + 48), 0i64, 0i64);
          }
        }
      }
      else
      {
        v7 = -1073741670;
      }
    }
  }
  MiUnlockDriverPages((UINT64 *)v10);
  if( v6 )
    ExFreePoolWithTag(v6, 0);
  if( v7 >= 0 )
    *(_QWORD *)(rdx0 + 120) = 0i64;
  return(unsigned int)v7;
}

Referenced by:

MiApplyHotPatchToDriver