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