MiUnlockProtoPoolPage
VOID __fastcall MiUnlockProtoPoolPage(_MMPFN *ProtoPagePfn, UINT64 PageIrql){
unsigned __int64 v3;
UINT8 *v4;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
v3 = (unsigned __int8)PageIrql;
while( _interlockedbittestandset64((volatile signed __int32 *)ProtoPagePfn + 6, 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *((__int64 *)ProtoPagePfn + 3) < 0 );
}
*((_BYTE *)ProtoPagePfn + 34) &= ~0x20u;
if( (unsigned int)MiRemoveLockedPageCharge((INT64)ProtoPagePfn) )
MiPfnReferenceCountIsZero(ProtoPagePfn, (ProtoPagePfn - MmGetPfnDb()) / 48, v4);
_InterlockedAnd64((volatile signed __int64 *)ProtoPagePfn + 3, 0x7FFFFFFFFFFFFFFFui64);
if( (_BYTE)v3 != 17 )
__writecr8(v3);
}Referenced by:
MiAllocateInPageSupport
MiAnyProtosAreMapped
MiConvertPrivateToProto
MiConvertStandbyToProto
MiCopyDataPageToImagePage
MiCopyFileOnlyGlobalSubsectionPage
MiCopyHeaderIfResident
MiCopyImageExtentContents
MiDeleteMergedPte
MiDeletePerSessionProtos
MiDeleteSubsectionPages
MiEliminateStaleExtents
MiEnableLargeSubsection
MiFinishHardFault
MiFlushSectionInternal
MiGetPageProtection
MiHandleCollidedFault
MiHandleTransitionFault
MiIdealClusterPage
MiInitializeDynamicPfns
MiInitializeImageProtos
MiInitializeProtoPfn
MiInsertLargeVadMapping
MiIsSubsectionClean
MiLockCode
MiMakeImageReadOnly
MiMakePageAvoidRead
MiMigratePfn
MiPfPutPagesInTransition
MiPurgeFileOnlyPfn
MiPurgeImageSection
MiPurgeSubsection
MiReleasePageFileSectionInfo
MiReplaceLockedPage
MiResolveDemandZeroFault
MiResolveMappedFileFault
MiResolvePageFileFault
MiResolveProtoCombine
MiResolveProtoPteFault
MiResolveTransitionFault
MiSectionCreated
MiSoftFaultMappedView
MiTranslatePageForCopy
MiWaitForCollidedFaultComplete
MiWaitForPageWriteCompletion
MiWalkEntireImage
MiWalkVaRange
MiZeroCfgSystemWideBitmapWorker
MmCheckCachedPageStates
MmCopyMemory
MmCopyToCachedPage
MmPurgeSection