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