HalpKdSetupDebuggingDevice

VOID __fastcall HalpKdSetupDebuggingDevice(_LOADER_PARAMETER_BLOCK *LoaderBlock, _DEBUG_DEVICE_DESCRIPTOR *Device){
  _DEBUG_DEVICE_DESCRIPTOR **v2; 
  __int128 v5; 
  __int128 v6; 
  int v7; 
  _DEVICES_IN_USE *v8; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *Flink; 

  if( Device )
  {
    if( !Device->Initialized )
    {
      v5 = *(_OWORD *)&Device->Memory.Start.anonymous_0.LowPart;
      v6 = *(_OWORD *)&Device->Memory.VirtualAddress;
      if( Device->Configured || HalpKdEnumerateDebuggingDevices(0i64, Device, KdConfigureDeviceAndContinue, v2) >= 0 )
      {
        if( Device->Memory.VirtualAddress
          || (*(_OWORD *)&Device->Memory.Start.anonymous_0.LowPart = v5,
              *(_OWORD *)&Device->Memory.VirtualAddress = v6,
              HalpAllocateScratchMemory(LoaderBlock, Device) >= 0) )
        {
          Device->Initialized = 1;
          HalpRegisterDeviceInUse(Device);
          if( v7 < 0 && Device->NameSpace != KdNameSpaceNone )
          {
            v8 = HalpFindDevice(Device);
            if( v8 )
            {
              v9 = *(_LIST_ENTRY **)&v8->DeviceCount;
              if( *(_DEVICES_IN_USE **)(*(_QWORD *)&v8->DeviceCount + 8i64) != v8
                || (Flink = v8->ListHead.Flink, (_DEVICES_IN_USE *)Flink->Flink != v8) )
              {
                __fastfail(3u);
              }
              Flink->Flink = v9;
              v9->Blink = Flink;
              --*(&CmpDummyThreadEvent + 1056);
            }
          }
        }
      }
    }
  }
}

Referenced by:

No references.