MiObtainProtoReference

INT64 __fastcall MiObtainProtoReference(INT64 a1, CHAR a2){
  INT64 result; 
  UINT64 SpinCount; 
  if( (a2 & 1) != 0 )
  {
    MiLockNestedPageAtDpcInline(a1);
  }
  else
  {
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 24), 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *(__int64 *)(a1 + 24) < 0 );
    }
  }
  MiAddLockedPageCharge(a1, 1);
  result = 0x7FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)(a1 + 24), 0x7FFFFFFFFFFFFFFFui64);
  return result;
}

Referenced by:

MiCopyDataPageToImagePage
MiCopyFileOnlyGlobalSubsectionPage
MiCopyImageExtentContents
MiFinishMdlForMappedFileFault
MiFlushSectionInternal
MiHandleCollidedFault
MiIdealClusterPage
MiPfPutPagesInTransition
MiResolvePageFileFault
MiTranslatePageForCopy
MiWalkEntireImage