ViDevObjRemove
VOID __stdcall ViDevObjRemove(_DEVICE_OBJECT *DeviceObject){
void *v2;
CHAR *v3;
UINT64 v4;
__int128 v5;
v5 = 0i64;
if( ViDevObjInitialized )
{
v2 = 0i64;
VfAvlInitializeLockContext((INT64)&v5, 0i64);
v3 = VfAvlLookupTreeNode(&ViDevObjAvl, (INT64)&v5, (UINT64)DeviceObject, 0i64);
if( v3 )
{
if( (*((_DWORD *)v3 + 4) & 1) != 0 && (MmVerifierData & 0x800) != 0 )
VerifierBugCheckIfAppropriate(0xC4ui64, 0xDBui64, (UINT64)DeviceObject, 0i64, 0i64, v4);
v2 = (void *)VfAvlDeleteTreeNode((INT64)&ViDevObjAvl, (INT64)&v5, (UINT64)DeviceObject, 0i64);
}
VfAvlCleanupLockContext((INT64)&v5);
if( v2 )
{
if( dword_140D4A548 == 1 )
ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViAvlNodeLookaside, v2);
else
VfUtilFreePoolCheckIRQL(v2);
}
}
}Referenced by:
VfIoDeleteDevice