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