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