ObpFreeWorkItemBlock
VOID __stdcall ObpFreeWorkItemBlock(_OBTRACE_WORK_ITEM_BLOCK *WorkItemBlock){
_ETHREAD *CurrentThread;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.SpecialApcDisable;
ExAcquirePushLockExclusiveEx(&stru_140C25A40, 0i64);
if( (ObpTraceFlags & 0x73) != 0 && LOWORD(ObpWorkItemFreeList.Alignment) < 0x1F4u )
RtlpInterlockedPushEntrySList(&ObpWorkItemFreeList, (PSLIST_ENTRY)WorkItemBlock);
else
ExFreePoolWithTag(WorkItemBlock, 0x7452624Fu);
if( (_InterlockedExchangeAdd64(&stru_140C25A40._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&stru_140C25A40);
KeAbPostRelease(&stru_140C25A40);
KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}Referenced by:
ObpPushStackInfoQueue