MiUnlockProtoPoolPage
VOID __stdcall MiUnlockProtoPoolPage(ULONG_PTR ProtoPagePfn, UINT8 PageIrql){
__int64 v2;
unsigned __int64 v3;
UINT8 v4;
UINT64 SpinCount;
LODWORD(SpinCount) = 0;
v2 = *(_QWORD *)&ProtoPagePfn;
v3 = PageIrql;
while( _interlockedbittestandset64((volatile signed __int32 *)(v2 + 24), 0x3Fui64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( *(__int64 *)(v2 + 24) < 0 );
}
*(_BYTE *)(v2 + 34) &= ~0x20u;
if( MiRemoveLockedPageCharge((_MMPFN *)v2) )
MiPfnReferenceCountIsZero((_MMPFN *)v2, (v2 - (__int64)MmGetPfnDb()) / 48, v4);
_InterlockedAnd64((volatile signed __int64 *)(v2 + 24), 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