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