ObpDeferPushRefDerefInfo

VOID __stdcall ObpDeferPushRefDerefInfo(
        _OBJECT_HEADER *ObjectHeader,
        UINT8 IsRef,
        UINT16 NumTraces,
        UINT64 StackSequence,
        _OBJECT_REF_TRACE *Stack,
        UINT64 Tag){
  int v7; 
  PSLIST_ENTRY v10; 
  _QWORD *p_Next; 
  signed __int64 v12; 
  signed __int64 i; 

  v7 = StackSequence;
  v10 = RtlpInterlockedPopEntrySList(&ObpWorkItemFreeList);
  if( v10 )
  {
    p_Next = &v10[1].Next;
    HIDWORD(v10[2].Next) = Tag;
    *((_QWORD *)&v10[1].Next + 1) = ObjectHeader;
    LOBYTE(v10[2].Next) = IsRef;
    WORD1(v10[2].Next) = NumTraces;
    *((_DWORD *)&v10[2].Next + 2) = v7;
    *(_OBJECT_REF_TRACE *)&v10[3].Next = *Stack;
    v12 = qword_140C25A18;
    v10[1].Next = (_SLIST_ENTRY *)qword_140C25A18;
    for( i = _InterlockedCompareExchange64(&qword_140C25A18, (signed __int64)&v10[1], v12);
          i != v12;
          i = _InterlockedCompareExchange64(&qword_140C25A18, (signed __int64)p_Next, i) )
    {
      v12 = i;
      *p_Next = i;
    }
    if( !v12 )
      ExQueueWorkItem(&stru_140C25A20, CriticalWorkQueue);
  }
}

Referenced by:

ObpPushStackInfo