MiReleaseFaultCharges

NTSTATUS __stdcall MiReleaseFaultCharges(PVOID BugCheckParameter2){
  _CONTROL_AREA *v1; 
  UINT64 v3; 
  _MI_CROSS_PARTITION_CHARGES *v4; 
  _BOOL8 v5; 
  UINT8 v6; 
  union {unsigned int LongFlags;_MMSECTION_FLAGS Flags;} v7; 
  UINT64 v8; 
  NTSTATUS result; 

  v1 = *(_CONTROL_AREA **)BugCheckParameter2;
  v3 = 0i64;
  v4 = 0i64;
  v5 = *(_QWORD *)(*(_QWORD *)BugCheckParameter2 + 64i64) != 0i64;
  v6 = ExAcquireSpinLockExclusive((INT64 *)(*(_QWORD *)BugCheckParameter2 + 72i64));
  v7.LongFlags = (unsigned int)v1->u;
  if( (v7.LongFlags & 0x20) == 0 && v1->FilePointer.Value && (v7.LongFlags & 0x400) == 0 )
  {
    LODWORD(v8) = MiDecrementSubsections((_SUBSECTION *)BugCheckParameter2, (_SUBSECTION *)BugCheckParameter2, 4ui64);
    v3 = v8;
  }
  --v1->NumberOfMappedViews;
  if( v3 )
    v4 = *(_MI_CROSS_PARTITION_CHARGES **)(*(&stru_140C4DB30 + 267) + 8i64 * (v1->u1.Flags._bf_0 & 0x3FF));
  MiCheckControlArea(v1, v6);
  if( v3 )
    MiReturnCrossPartitionSectionCharges(v4, v5, v3);
  return result;
}

Referenced by:

MiFaultGetFileExtents
MmAccessFault