KeUnInitializeUmsThread
NTSTATUS __stdcall KeUnInitializeUmsThread(INT64 a1){
char v1;
__int64 v3;
unsigned int v4;
v1 = *(_BYTE *)(a1 + 3);
v3 = *(_QWORD *)(a1 + 496);
if( (v1 & 0x40) != 0 )
{
v4 = 30;
LABEL_5:
_interlockedbittestandreset((volatile signed __int32 *)a1, v4);
ExFreePoolWithTag((PVOID)v3, 0);
*(_QWORD *)(a1 + 496) = 0i64;
return 0;
}
if( v1 < 0 )
{
KeSetCurrentUmsTeb((_KTHREAD *)a1, *(_QWORD *)(a1 + 240));
KeRundownQueueEx((_KQUEUE *)(v3 + 32), 1u);
v4 = 31;
goto LABEL_5;
}
return -1073740004;
}Referenced by:
PspDetachThreadFromUmsCompletionList
PspInsertThread
PspUmsUnInitThread