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.