ObFastReplaceObject

VOID *__stdcall ObFastReplaceObject(_EX_FAST_REF *FastRef, VOID *Object, UINT64 a3){
  __int64 v5; 
  volatile signed __int64 *v6; 
  unsigned int v7; 
  PVOID *v8; 
  void *BugCheckParameter4; 

  if( Object )
    ObReferenceObjectExWithTag(Object, 0xFui64, a3);
  v5 = _InterlockedExchange64(
         (volatile __int64 *)FastRef,
         ((unsigned __int64)Object | 0xF) & -(__int64)(Object != 0i64));
  v6 = (volatile signed __int64 *)(v5 & 0xFFFFFFFFFFFFFFF0ui64);
  if( (v5 & 0xFFFFFFFFFFFFFFF0ui64) != 0 )
  {
    v7 = v5 & 0xF;
    if( v7 )
    {
      v8 = (PVOID *)(v6 - 6);
      ObpTraceObjectDereferenceIfActive((_OBJECT_HEADER *)(v6 - 6), v7, 0x746C6644ui64);
      BugCheckParameter4 = (void *)(_InterlockedExchangeAdd64(v6 - 6, -v7) - v7);
      if( (__int64)BugCheckParameter4 <= 0 )
      {
        if( v8[1] )
          KeBugCheckEx(
            0x18u,
            (PVOID)ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ *((unsigned __int8 *)v8 + 24) ^ (unsigned __int64)BYTE1(v8)],
            (PVOID)v6,
            (PVOID)6,
            v8[1]);
        if( (__int64)BugCheckParameter4 < 0 )
          KeBugCheckEx(0x18u, 0i64, (PVOID)v6, (PVOID)5, BugCheckParameter4);
        ObpDeferObjectDeletion((_OBJECT_HEADER *)(v6 - 6));
      }
    }
  }
  return(VOID *)v6;
}

Referenced by:

CcChangeBackingFileObject
CcDeleteSharedCacheMap
MiCreateImageFileMap
MiCreateImageOrDataSection
MiSegmentDelete
MmChangeSectionBackingFile
PsShutdownSystem
SeDeassignPrimaryToken
SeExchangePrimaryToken