MiPrepareDriverForHotPatch

NTSTATUS __fastcall MiPrepareDriverForHotPatch(INT64 *a1, INT64 *a2, _DWORD *a3, INT64 a4){
  int *v7; 
  unsigned int i; 
  INT64 v9; 
  INT64 *v10; 
  NTSTATUS result; 
  INT64 *v12; 
  int v13; 
  INT64 v14; 

  v7 = (_DWORD *)((char *)a3 + *(unsigned int *)(a1[1] + 24));
  for( i = RtlGetHotPatchSize(a3); ; v7 = (int *)(v9 + 4i64 * (v13 & 0xFFF) * i) )
  {
    v13 = *v7;
    if( !*v7 )
      break;
    v9 = (INT64)(v7 + 1);
    v10 = a1;
    if( v13 < 0 )
      v10 = a2;
    LODWORD(v14) = v13;
    result = MiLockHotPatchPages(v10, v9, v13 & 0xFFF, i, v14);
    if( result < 0 )
      return result;
    if( (v13 & 0xFC000) == 376832 )
    {
      v12 = a2;
      LODWORD(v14) = v13;
      if( v13 < 0 )
        v12 = a1;
      result = MiLockHotPatchPages(v12, v9, v13 & 0xFFF, i, v14);
      if( result < 0 )
        return result;
    }
  }
  if( !a4 )
    return 0;
  result = MiLockHotPatchUndoPages(a1, a4);
  if( result >= 0 )
    return 0;
  return result;
}

Referenced by:

MiApplyDriverHotPatch