HalpRegisterDeviceInUse

VOID __fastcall HalpRegisterDeviceInUse(_DEBUG_DEVICE_DESCRIPTOR *Device){
  KD_NAMESPACE_ENUM NameSpace; 
  unsigned int v3; 
  size_t v4; 
  VOID **PoolWithTag; 
  VOID **v6; 
  VOID ***v7; 

  NameSpace = Device->NameSpace;
  if( NameSpace != KdNameSpaceNone && (unsigned int)NameSpace <= KdNameSpaceACPI && !HalpFindDevice(Device) )
  {
    v3 = Device->NameSpacePathLength + 2;
    v4 = Device->NameSpacePathLength + 274;
    if( LoaderBlock )
      HalpMmAllocateMemory(Device->NameSpacePathLength + 274);
    else
      PoolWithTag = ExAllocatePoolWithTag(1ui64, Device->NameSpacePathLength + 274, 543973704i64);
    v6 = PoolWithTag;
    if( PoolWithTag )
    {
      memset(PoolWithTag, 0i64, v4);
      v6[2] = v6 + 3;
      *(_OWORD *)(v6 + 3) = *(_OWORD *)&Device->Bus;
      *(_OWORD *)(v6 + 5) = *(_OWORD *)&Device->ProgIf;
      *(_OWORD *)(v6 + 7) = *(_OWORD *)&Device->BaseAddress[0].TranslatedAddress;
      *(_OWORD *)(v6 + 9) = *(_OWORD *)&Device->BaseAddress[1].Type;
      *(_OWORD *)(v6 + 11) = *(_OWORD *)&Device->BaseAddress[1].Length;
      *(_OWORD *)(v6 + 13) = *(_OWORD *)&Device->BaseAddress[2].TranslatedAddress;
      *(_OWORD *)(v6 + 15) = *(_OWORD *)&Device->BaseAddress[3].Type;
      *(_OWORD *)(v6 + 17) = *(_OWORD *)&Device->BaseAddress[3].Length;
      *(_OWORD *)(v6 + 19) = *(_OWORD *)&Device->BaseAddress[4].TranslatedAddress;
      *(_OWORD *)(v6 + 21) = *(_OWORD *)&Device->BaseAddress[5].Type;
      *(_OWORD *)(v6 + 23) = *(_OWORD *)&Device->BaseAddress[5].Length;
      *(_OWORD *)(v6 + 25) = *(_OWORD *)&Device->Memory.MaxEnd.anonymous_0.LowPart;
      *(_OWORD *)(v6 + 27) = *(_OWORD *)&Device->Memory.Length;
      *(_OWORD *)(v6 + 29) = *(_OWORD *)&Device->OemData;
      *(_OWORD *)(v6 + 31) = *(_OWORD *)&Device->NameSpacePath;
      v6[33] = (VOID *)Device->TransportData;
      if( Device->NameSpace == KdNameSpaceACPI && Device->NameSpacePath )
      {
        *((_QWORD *)v6[2] + 28) = (char *)v6[2] + 248;
        wcscpy_s(*((PWCHAR *)v6[2] + 28), (unsigned __int64)v3 >> 1, Device->NameSpacePath);
      }
      v7 = (VOID ***)*(&CmpDummyThreadEvent + 530);
      if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 530) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 4232) )
        __fastfail(3u);
      *v6 = (char *)&CmpDummyThreadEvent + 4232;
      v6[1] = v7;
      *v7 = v6;
      ++*(&CmpDummyThreadEvent + 1056);
      *(&CmpDummyThreadEvent + 530) = v6;
    }
  }
}

Referenced by:

HalpKdSetupDebuggingDevice