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