ObDereferenceObjectDeferDeleteWithTag

NTSTATUS __fastcall ObDereferenceObjectDeferDeleteWithTag(UINT64 a1, INT64 a2){
  signed __int64 v3; 
  bool v4; 
  void *BugCheckParameter4; 

  if( ObpTraceFlags )
    ObpPushStackInfo((_OBJECT_HEADER *)(a1 - 48), 0, 1ui64, (unsigned int)a2);
  v3 = _InterlockedExchangeAdd64((volatile signed __int64 *)(a1 - 48), 0xFFFFFFFFFFFFFFFFui64);
  v4 = v3 <= 1;
  BugCheckParameter4 = (void *)(v3 - 1);
  if( v4 )
  {
    if( *(_QWORD *)(a1 - 40) )
      KeBugCheckEx(
        0x18u,
        (PVOID)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *(unsigned __int8 *)(a1 - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)(a1 - 48) >> 8)],
        (PVOID)a1,
        (PVOID)3,
        *(PVOID *)(a1 - 40));
    if( (__int64)BugCheckParameter4 < 0 )
      KeBugCheckEx(0x18u, 0i64, (PVOID)a1, (PVOID)4, BugCheckParameter4);
    ObpDeferObjectDeletion((_OBJECT_HEADER *)(a1 - 48));
  }
  return(int)BugCheckParameter4;
}

Referenced by:

CcChangeBackingFileObject
CcDereferenceSharedCacheMapFileObject
CcInitializeCacheMapEx
ExDeleteResourceLite
ExFreeHeapPool
ExReinitializeResourceLite
ExReturnPoolQuota
FsRtlpClearOwner
IopBoostThreadCallback
IopCallDriverReference
KiAbProcessContextSwitch
KiAbProcessThreadLocks
KiMonitorCacheErrata
MmChangeSectionBackingFile
PspChargeProcessWakeCounter
PspRevertContainerImpersonation
VrpDestroyNamespaceNode
VrpFreeKeyContext