MiStartingOffsetNeedLock
NTSTATUS __stdcall MiStartingOffsetNeedLock(_SUBSECTION *Subsection, UINT64 SessionId){
_CONTROL_AREA *ControlArea;
unsigned int v3;
unsigned __int8 v5;
volatile int *p_ControlAreaLock;
NTSTATUS v7;
ControlArea = Subsection->ControlArea;
v3 = SessionId;
if( (Subsection->ControlArea->u.LongFlags & 0x20) != 0 || !ControlArea->FilePointer.Value )
{
v5 = 17;
p_ControlAreaLock = &ControlArea->ControlAreaLock;
}
else
{
p_ControlAreaLock = &ControlArea->ControlAreaLock;
v5 = ExAcquireSpinLockShared((INT64 *)&ControlArea->ControlAreaLock);
}
v7 = MiStartingOffset(Subsection, Subsection->SubsectionBase, v3);
if( v5 != 17 )
{
ExReleaseSpinLockSharedFromDpcLevel(p_ControlAreaLock);
__writecr8(v5);
}
return v7;
}Referenced by:
MiPfPrepareReadList