PspClearProcessThreadCidRefs
VOID __stdcall PspClearProcessThreadCidRefs(_ETHREAD *CurrentThread, PVOID Cid, PVOID Object){
INT64 v3;
_HANDLE_TABLE_ENTRY *v6;
volatile unsigned __int64 LowValue;
_HANDLE_TABLE *v8;
unsigned int v9;
int v10[8];
__int128 v11;
PVOID v12;
--*((_WORD *)CurrentThread + 243);
v6 = ExMapHandleToPointer(PspCidTable, Cid, Object, v3, v11, *((INT64 *)&v11 + 1), v12);
v11 = 0i64;
LowValue = v6->LowValue;
*(_QWORD *)&v11 = v6->LowValue & 0xFFFFFFFFFFFE0001ui64;
v6->LowValue = v11;
v8 = PspCidTable;
v9 = (unsigned __int16)(LowValue >> 1);
_InterlockedExchangeAdd64(&v6->VolatileLowValue, 1ui64);
_InterlockedOr(v10, 0);
if( v8->HandleContentionEvent.Value )
ExfUnblockPushLock(&v8->HandleContentionEvent, 0i64);
KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
if( v9 )
ObDereferenceObjectEx(Object, v9);
}Referenced by:
PspExitThread
PspRundownSingleProcess