ObpFreeWorkItemBlock

INT64 __fastcall ObpFreeWorkItemBlock(struct SLIST_ENTRY *P){
  _ETHREAD *CurrentThread; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 243);
  ExAcquirePushLockExclusiveEx((UINT64)&ObpStackTraceLock, 0i64);
  if( (ObpTraceFlags & 0x73) != 0 && (unsigned __int16)ObpWorkItemFreeList < 0x1F4u )
    RtlpInterlockedPushEntrySList((PSLIST_HEADER)&ObpWorkItemFreeList, P);
  else
    ExFreePoolWithTag(P, 0x7452624Fu);
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&ObpStackTraceLock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)&ObpStackTraceLock);
  KeAbPostRelease(&ObpStackTraceLock);
  return KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
}

Referenced by:

ObpPushStackInfoQueue