VfCheckForResource
UINT64 __fastcall VfCheckForResource(VOID *p, UINT64 Size){
CHAR *v4;
UINT64 *v5;
void *v6;
UINT64 v8;
__int128 v9;
UINT64 v10;
v9 = 0i64;
if( !ViResourceInitialized )
return 0i64;
if( !(unsigned int)VfPoolIsInternalFree() && qword_140D49380 )
{
v10 = 0i64;
VfAvlInitializeLockContext((INT64)&v9, 1i64);
v4 = VfAvlLookupTreeNode(&ViResourceAvl, (INT64)&v9, (UINT64)p, Size);
v5 = (UINT64 *)v4;
if( v4 )
{
if( !ViResourcesAlreadyLoadedDrivers && (MmVerifierData & 0x800) != 0 )
VerifierBugCheckIfAppropriate(0xC4ui64, 0xD2ui64, *(_QWORD *)v4, (UINT64)p, Size, v8);
v10 = *v5;
}
VfAvlCleanupLockContext((INT64)&v9);
if( v10 )
{
_InterlockedIncrement(&ViResourceStaleNodes);
VfAvlInitializeLockContext((INT64)&v9, 0i64);
v6 = (void *)VfAvlDeleteTreeNode((INT64)&ViResourceAvl, (INT64)&v9, (UINT64)&v10, 0i64);
VfAvlCleanupLockContext((INT64)&v9);
if( v6 )
{
if( dword_140D49398 == 1 )
ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViAvlNodeLookaside, v6);
else
VfUtilFreePoolCheckIRQL(v6);
}
return 0i64;
}
}
return 1i64;
}Referenced by:
ExpCheckForResource