VerifierExDeleteResourceLite

INT64 __fastcall VerifierExDeleteResourceLite(_ERESOURCE *Resource){
  unsigned __int64 v1; 
  void *v3; 
  INT64 result; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  UINT64 v8; 
  __int128 v9; 
  v1 = 0i64;
  v9 = 0i64;
  if( ViResourceInitialized && qword_140D49380 )
  {
    v3 = 0i64;
    VfAvlInitializeLockContext((INT64)&v9, 0i64);
    if( VfAvlLookupTreeNode(&ViResourceAvl, (INT64)&v9, (UINT64)Resource, 0i64) )
    {
      v3 = (void *)VfAvlDeleteTreeNode((INT64)&ViResourceAvl, (INT64)&v9, (UINT64)Resource, 0i64);
    }
    else if( !ViResourceNotTracked && !ViResourcesAlreadyLoadedDrivers && (MmVerifierData & 0x800) != 0 )
    {
      VerifierBugCheckIfAppropriate(0xC4ui64, 0xD1ui64, (UINT64)Resource, 0i64, 0i64, v8);
    }
    VfAvlCleanupLockContext((INT64)&v9);
    if( v3 )
    {
      if( dword_140D49398 == 1 )
        ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViAvlNodeLookaside, v3);
      else
        VfUtilFreePoolCheckIRQL(v3);
    }
  }
  LODWORD(result) = ((__int64(__fastcall *)(_ERESOURCE *))pXdvExDeleteResourceLite)(Resource);
  if( (MmVerifierData & 0x800) != 0 && (int)result >= 0 )
  {
    v5 = &Resource[1] >= Resource ? 0xD : 0;
    if( (&Resource[1] >= Resource ? 0xD : 0) != 0 )
    {
      if( Resource <= &Resource[1]
        && (Resource > (_ERESOURCE *)&MmBadPointer || &Resource[-1].SpinLock + v5 < (unsigned __int64 *)&MmBadPointer) )
      {
        v6 = &Resource[1] >= Resource ? 0xC : 0;
        do
          v1 += 2i64;
        while( v1 < v6 );
        v7 = 8 * v6;
        memset64(Resource, (unsigned __int64)MmBadPointer, v7 >> 3);
        Resource = (_ERESOURCE *)((char *)Resource + v7);
      }
      while( v1 < v5 )
      {
        ++v1;
        Resource->SystemResourcesList.Flink = (_LIST_ENTRY *)MmBadPointer;
        Resource = (_ERESOURCE *)((char *)Resource + 8);
      }
    }
  }
  return(unsigned int)result;
}

Referenced by:

No references.