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.