VerifierExInitializeResourceLite

INT64 __fastcall VerifierExInitializeResourceLite(_ERESOURCE *Resource){
  int v2; 
  CHAR *v3; 
  void *v4; 
  UINT64 v6; 
  __int128 v7; 
  v7 = 0i64;
  VfUtilSynchronizationObjectSanityChecks(Resource, 0x68ui64);
  v2 = ((__int64(__fastcall *)(_ERESOURCE *))pXdvExInitializeResourceLite)(Resource);
  if( v2 >= 0 )
  {
    if( (MmVerifierData & 0x800) != 0 )
    {
      if( !ViResourceInitialized )
        return(unsigned int)v2;
      v3 = VfAvlReserveNode((INT64)&ViResourceAvl, (INT64)Resource, 0i64);
      if( !v3 )
        goto LABEL_4;
      v4 = 0i64;
      VfAvlInitializeLockContext((INT64)&v7, 0i64);
      if( VfAvlLookupTreeNode(&ViResourceAvl, (INT64)&v7, (UINT64)Resource, 0i64) )
      {
        if( !ViResourcesAlreadyLoadedDrivers && (MmVerifierData & 0x800) != 0 )
          VerifierBugCheckIfAppropriate(0xC4ui64, 0xD0ui64, (UINT64)Resource, 0i64, 0i64, v6);
        _InterlockedAdd(&ViResourceStaleNodes, 1u);
        v4 = (void *)VfAvlDeleteTreeNode((INT64)&ViResourceAvl, (INT64)&v7, (UINT64)Resource, 0i64);
      }
      VfAvlInsertReservedTreeNode((INT64)&ViResourceAvl, (INT64)&v7, (UINT64 *)v3);
      VfAvlCleanupLockContext((INT64)&v7);
      if( v4 )
      {
        if( dword_140D49398 == 1 )
          ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViAvlNodeLookaside, v4);
        else
          VfUtilFreePoolCheckIRQL(v4);
      }
    }
    else if( !ViResourceNotTracked )
    {
LABEL_4:
      _InterlockedExchange(&ViResourceNotTracked, 1);
    }
  }
  return(unsigned int)v2;
}

Referenced by:

No references.