KdRegisterDebuggerDataBlock

char __fastcall KdRegisterDebuggerDataBlock(__int64 a1, __int64 a2){
  unsigned __int8 v3; 
  unsigned __int64 v4; 
  __int64 *v5; 
  __int64 *v6; 
  char result; 
  __int64 *v8; 
  KeAcquireSpinLockRaiseToDpc(&KdpDataSpinLock, a2);
  v4 = v3;
  v5 = (__int64 *)KdpDebuggerDataListHead;
  while( v5 != &KdpDebuggerDataListHead )
  {
    v8 = v5;
    v5 = (__int64 *)*v5;
    if( v8 == (__int64 *)a2 || *((_DWORD *)v8 + 4) == 1195525195 )
    {
      KxReleaseSpinLock(&KdpDataSpinLock);
      result = 0;
      goto LABEL_5;
    }
  }
  *(_DWORD *)(a2 + 16) = 1195525195;
  *(_DWORD *)(a2 + 20) = 896;
  v6 = (__int64 *)qword_140C40578;
  if( *(__int64 **)qword_140C40578 != &KdpDebuggerDataListHead )
    __fastfail(3u);
  *(_QWORD *)a2 = &KdpDebuggerDataListHead;
  *(_QWORD *)(a2 + 8) = v6;
  *v6 = a2;
  qword_140C40578 = a2;
  KxReleaseSpinLock(&KdpDataSpinLock);
  result = 1;
LABEL_5:
  __writecr8(v4);
  return result;
}

Referenced by:

KdInitSystem