KdRegisterDebuggerDataBlock

UINT8 __stdcall KdRegisterDebuggerDataBlock(UINT64 Tag, _DBGKD_DEBUG_DATA_HEADER64 *DataHeader, UINT64 Size){
  unsigned __int64 v4; 
  __int64 *v5; 
  _DBGKD_DEBUG_DATA_HEADER64 **v6; 
  UINT8 result; 
  _DBGKD_DEBUG_DATA_HEADER64 *v8; 

  v4 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140CF2E80 + 609);
  v5 = (__int64 *)KdpDebuggerDataListHead;
  while( v5 != &KdpDebuggerDataListHead )
  {
    v8 = (_DBGKD_DEBUG_DATA_HEADER64 *)v5;
    v5 = (__int64 *)*v5;
    if( v8 == DataHeader || v8->OwnerTag == 1195525195 )
    {
      KxReleaseSpinLock((UINT64 *)&stru_140CF2E80 + 609);
      result = 0;
      goto LABEL_5;
    }
  }
  DataHeader->OwnerTag = 1195525195;
  DataHeader->Size = 896;
  v6 = (_DBGKD_DEBUG_DATA_HEADER64 **)qword_140C40578;
  if( *(__int64 **)qword_140C40578 != &KdpDebuggerDataListHead )
    __fastfail(3u);
  DataHeader->List.Flink = (unsigned __int64)&KdpDebuggerDataListHead;
  DataHeader->List.Blink = (unsigned __int64)v6;
  *v6 = DataHeader;
  qword_140C40578 = (__int64)DataHeader;
  KxReleaseSpinLock((UINT64 *)&stru_140CF2E80 + 609);
  result = 1;
LABEL_5:
  __writecr8(v4);
  return result;
}

Referenced by:

KdInitSystem