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