KeRemoveUmsThreadCidOwnership

NTSTATUS __stdcall KeRemoveUmsThreadCidOwnership(INT64 a1, CHAR a2){
  _ETHREAD *CurrentThread; 
  signed __int64 v3; 
  signed __int64 v4; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  _m_prefetchw((const void *)(a1 + 1272));
  v3 = *(_QWORD *)(a1 + 1272);
  do
  {
    v4 = v3;
    v3 = _InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 1272), v3 & 3, v3);
  }
  while( v4 != v3 );
  if( !a2 || (void *)(v3 & 0xFFFFFFFFFFFFFFFCui64) == CurrentThread->Cid.UniqueThread )
    return 0;
  else
    return -1073740004;
}

Referenced by:

KeUpdateUmsThreadState
PspDisassociateUmsThreadFromPrimary