HalpRegisterDeviceInUse

NTSTATUS __stdcall HalpRegisterDeviceInUse(DEBUG_DEVICE_DESCRIPTOR *Device){
  KD_NAMESPACE_ENUM NameSpace; 
  unsigned int v4; 
  void *Memory; 
  __int64 v6; 
  __int64 *v7; 
  NameSpace = Device->NameSpace;
  if( NameSpace != KdNameSpaceNone )
  {
    if( (unsigned int)NameSpace > KdNameSpaceACPI )
      return -1073741811;
    if( !HalpFindDevice((__int64)Device) )
    {
      v4 = Device->NameSpacePathLength + 2;
      if( HalpMmLoaderBlock )
        Memory = HalpMmAllocateMemory(Device->NameSpacePathLength + 274);
      else
        Memory = ExAllocatePoolWithTag(PagedPool, Device->NameSpacePathLength + 274, 0x206C6148ui64);
      v6 = (__int64)Memory;
      if( !Memory )
        return -1073741670;
      memset((INT64)Memory, 0i64);
      *(_QWORD *)(v6 + 16) = v6 + 24;
      *(_OWORD *)(v6 + 24) = *(_OWORD *)&Device->Bus;
      *(_OWORD *)(v6 + 40) = *(_OWORD *)&Device->ProgIf;
      *(_OWORD *)(v6 + 56) = *(_OWORD *)&Device->BaseAddress[0].TranslatedAddress;
      *(_OWORD *)(v6 + 72) = *(_OWORD *)&Device->BaseAddress[1].Type;
      *(_OWORD *)(v6 + 88) = *(_OWORD *)&Device->BaseAddress[1].Length;
      *(_OWORD *)(v6 + 104) = *(_OWORD *)&Device->BaseAddress[2].TranslatedAddress;
      *(_OWORD *)(v6 + 120) = *(_OWORD *)&Device->BaseAddress[3].Type;
      *(_OWORD *)(v6 + 136) = *(_OWORD *)&Device->BaseAddress[3].Length;
      *(_OWORD *)(v6 + 152) = *(_OWORD *)&Device->BaseAddress[4].TranslatedAddress;
      *(_OWORD *)(v6 + 168) = *(_OWORD *)&Device->BaseAddress[5].Type;
      *(_OWORD *)(v6 + 184) = *(_OWORD *)&Device->BaseAddress[5].Length;
      *(_OWORD *)(v6 + 200) = *(_OWORD *)&Device->Memory.MaxEnd.LowPart;
      *(_OWORD *)(v6 + 216) = *(_OWORD *)&Device->Memory.Length;
      *(_OWORD *)(v6 + 232) = *(_OWORD *)&Device->OemData;
      *(_OWORD *)(v6 + 248) = *(_OWORD *)&Device->NameSpacePath;
      *(_DEBUG_TRANSPORT_DATA *)(v6 + 264) = Device->TransportData;
      if( Device->NameSpace == KdNameSpaceACPI && Device->NameSpacePath )
      {
        *(_QWORD *)(*(_QWORD *)(v6 + 16) + 224i64) = *(_QWORD *)(v6 + 16) + 248i64;
        wcscpy_s(*(PWCHAR *)(*(_QWORD *)(v6 + 16) + 224i64), (unsigned __int64)v4 >> 1, Device->NameSpacePath);
      }
      v7 = (__int64 *)qword_140C48AD0;
      if( *(__int64 **)qword_140C48AD0 != &qword_140C48AC8 )
        __fastfail(3u);
      *(_QWORD *)v6 = &qword_140C48AC8;
      *(_QWORD *)(v6 + 8) = v7;
      *v7 = v6;
      ++DevicesList;
      qword_140C48AD0 = v6;
    }
  }
  return 0;
}

Referenced by:

HalpKdSetupDebuggingDevice