VerifierExInitializeResourceLite

NTSTATUS __stdcall VerifierExInitializeResourceLite(_ERESOURCE *Resource){
  NTSTATUS v2; 
  _VF_AVL_TREE_NODE *v3; 
  VOID *v4; 
  UINT64 v6; 
  _VF_AVL_LOCK_CONTEXT Context[6]; 

  *(_OWORD *)Context = 0i64;
  VfUtilSynchronizationObjectSanityChecks(Resource, 0x68u);
  v2 = ((__int64(__fastcall *)(_ERESOURCE *))pXdvExInitializeResourceLite)(Resource);
  if( v2 >= 0 )
  {
    if( (MmVerifierData & 0x800) != 0 )
    {
      if( !ViResourceInitialized )
        return v2;
      v3 = VfAvlReserveNode(&ViResourceAvl, Resource, 0i64);
      if( !v3 )
        goto LABEL_4;
      v4 = 0i64;
      VfAvlInitializeLockContext(Context, Exclusive);
      if( VfAvlLookupTreeNode(&ViResourceAvl, Context, Resource, 0i64) )
      {
        if( !ViResourcesAlreadyLoadedDrivers && (MmVerifierData & 0x800) != 0 )
          VerifierBugCheckIfAppropriate(0xC4ui64, 0xD0u, (ULONG_PTR)Resource, 0, 0, v6);
        _InterlockedAdd(&ViResourceStaleNodes, 1u);
        v4 = VfAvlDeleteTreeNode(&ViResourceAvl, Context, Resource, 0i64);
      }
      VfAvlInsertReservedTreeNode(&ViResourceAvl, Context, v3);
      VfAvlCleanupLockContext(Context);
      if( v4 )
      {
        if( ViResourceAvl.u1.NodeSize == 1 )
          ExFreeToNPagedLookasideList(&ViAvlNodeLookaside, v4);
        else
          VfUtilFreePoolCheckIRQL(v4);
      }
    }
    else if( !ViResourceNotTracked )
    {
LABEL_4:
      _InterlockedExchange(&ViResourceNotTracked, 1);
    }
  }
  return v2;
}

Referenced by:

No references.