MiUnapplyDriverHotPatch

NTSTATUS __stdcall MiUnapplyDriverHotPatch(INT64 a1, INT64 a2){
  unsigned int v2; 
  __int64 v5; 
  void *Pool; 
  NTSTATUS v7; 
  INT64 v9[2]; 
  char v10[12]; 
  int v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  UINT64 v16; 

  v2 = *(_DWORD *)(a1 + 64);
  LODWORD(v16) = 0;
  *(_QWORD *)&v10[4] = 0i64;
  v11 = 0;
  v13 = 0i64;
  v15 = 0i64;
  v9[0] = a1;
  v5 = *(_QWORD *)(a1 + 48);
  v9[1] = 0i64;
  v12 = 0i64;
  Pool = 0i64;
  v14 = 0i64;
  *(_QWORD *)v10 = (v2 >> 12) + ((v2 & 0xFFF) != 0);
  v7 = VslDetermineHotPatchUndoTableSize(v5, &v16);
  if( v7 >= 0 )
  {
    v7 = v16;
    if( (_DWORD)v16 )
    {
      Pool = MiAllocatePool(256i64, (unsigned int)v16, 0x54555048ui64);
      if( Pool )
      {
        v7 = VslObtainHotPatchUndoTable(*(PVOID *)(a1 + 48));
        if( v7 >= 0 )
        {
          v7 = MiPrepareDriverPatchState((INT64)v9);
          if( v7 >= 0 )
          {
            v7 = MiLockHotPatchUndoPages(v9, (INT64)Pool);
            if( v7 >= 0 )
              v7 = VslRevertHotPatch(*(_QWORD *)(a1 + 48), 0i64, 0i64);
          }
        }
      }
      else
      {
        v7 = -1073741670;
      }
    }
  }
  MiUnlockDriverPages((UINT64 *)v9);
  if( Pool )
    ExFreePoolWithTag(Pool, 0);
  if( v7 >= 0 )
    *(_QWORD *)(a2 + 120) = 0i64;
  return v7;
}

Referenced by:

MiApplyHotPatchToDriver