ObDereferenceObjectDeferDeleteWithTag

VOID __stdcall ObDereferenceObjectDeferDeleteWithTag(PVOID Object, UINT64 Tag){
  signed __int64 v3; 
  bool v4; 
  signed __int64 BugCheckParameter4; 
  if( ObpTraceFlags )
    ObpPushStackInfo((INT64)Object - 48, 0, 1i64, (unsigned int)Tag);
  v3 = _InterlockedExchangeAdd64((volatile signed __int64 *)Object - 6, 0xFFFFFFFFFFFFFFFFui64);
  v4 = v3 <= 1;
  BugCheckParameter4 = v3 - 1;
  if( v4 )
  {
    if( *((_QWORD *)Object - 5) )
      KeBugCheckEx(
        0x18u,
        ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ (unsigned __int8)*((char *)Object - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)Object - 48) >> 8)],
        (ULONG_PTR)Object,
        3ui64,
        *((_QWORD *)Object - 5));
    if( BugCheckParameter4 < 0 )
      KeBugCheckEx(0x18u, 0i64, (ULONG_PTR)Object, 4ui64, BugCheckParameter4);
    ObpDeferObjectDeletion((INT64)Object - 48);
  }
}

Referenced by:

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