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.