KiInitializeMutant

VOID __stdcall KiInitializeMutant(_KMUTANT *Mutant, UINT8 InitialOwner, UINT8 DisableCount){
  char v3; 
  char v5; 
  unsigned __int8 v7; 
  _ETHREAD *CurrentThread; 
  unsigned __int8 CurrentIrql; 
  _LIST_ENTRY *Blink; 
  _LIST_ENTRY *p_MutantListEntry; 
  _BYTE *v12; 
  UINT64 SpinCount; 
  UINT8 v14; 

  v14 = DisableCount;
  *(_OWORD *)Mutant->gap0 = 0i64;
  v5 = v3;
  *(_OWORD *)&Mutant->gap0[16] = 0i64;
  *(_OWORD *)&Mutant->MutantListEntry.Blink = 0i64;
  *(_QWORD *)&Mutant->MutantFlags = 0i64;
  Mutant->gap0[0] = 2;
  if( InitialOwner )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    Mutant->OwnerThread = CurrentThread;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&CurrentThread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( CurrentThread->Tcb.ThreadLock );
    }
    Blink = CurrentThread->Tcb.MutantListHead.Blink;
    p_MutantListEntry = &Mutant->MutantListEntry;
    if( Blink->Flink != &CurrentThread->Tcb.MutantListHead )
      __fastfail(3u);
    p_MutantListEntry->Flink = &CurrentThread->Tcb.MutantListHead;
    Mutant->MutantListEntry.Blink = Blink;
    Blink->Flink = p_MutantListEntry;
    CurrentThread->Tcb.MutantListHead.Blink = p_MutantListEntry;
    KiReleaseThreadLockSafe((INT64)CurrentThread);
    __writecr8(CurrentIrql);
  }
  else
  {
    *(_DWORD *)&Mutant->gap0[4] = 1;
  }
  v7 = v14;
  *(_QWORD *)&Mutant->gap0[16] = &Mutant->gap0[8];
  *(_QWORD *)&Mutant->gap0[8] = &Mutant->gap0[8];
  Mutant->MutantFlags &= ~1u;
  Mutant->ApcDisable = v7;
  if( (v5 & 1) != 0 )
  {
    Mutant->MutantFlags |= 2u;
    if( InitialOwner )
    {
      v12 = KeAbPreAcquire(Mutant, 0i64, 1ui64);
      if( v12 )
        v12[26] |= 1u;
    }
  }
}

Referenced by:

EtwpInitializeRegistration
ExpProfileInitialization
KeInitializeMutant
KeInitializeMutantEx
KeInitializeMutex
LdrpInitMuiCrits
PnpInitializeDeviceEvents
ViInitSystemPhase0
sub_140A5D438