MiGetControlAreaPtes
NTSTATUS __stdcall MiGetControlAreaPtes(_CONTROL_AREA *ControlArea){
union {unsigned int LongFlags;_MMSECTION_FLAGS Flags;} v1;
volatile int *p_ControlAreaLock;
unsigned __int64 v5;
_SUBSECTION *LastSubsection;
NTSTATUS v7;
v1.LongFlags = (unsigned int)ControlArea->u;
if( (v1.LongFlags & 0x20) != 0 || !ControlArea->FilePointer.Value || (v1.LongFlags & 0x400) != 0 )
return ControlArea->Segment->TotalNumberOfPtes;
p_ControlAreaLock = &ControlArea->ControlAreaLock;
v5 = (unsigned __int8)ExAcquireSpinLockShared((INT64 *)&ControlArea->ControlAreaLock);
LastSubsection = MiFindLastSubsection(ControlArea, 1ui64);
v7 = (LastSubsection->StartingSector | ((LastSubsection->u.SubsectionFlags._bf_0 & 0xFFC0) << 26))
+ LastSubsection->PtesInSubsection
- (LastSubsection->_bf_34 & 0x3FFFFFFF);
ExReleaseSpinLockSharedFromDpcLevel(p_ControlAreaLock);
__writecr8(v5);
return v7;
}Referenced by:
MiMapViewOfDataSection
MiPfPrepareSequentialReadList