HalpFindDevice

_DEVICES_IN_USE *__stdcall HalpFindDevice(_DEBUG_DEVICE_DESCRIPTOR *Device){
  _DEVICES_IN_USE *v1; 
  _DEVICES_IN_USE *v2; 
  _DEVICES_IN_USE *v4; 
  char v5; 
  _LIST_ENTRY *Blink; 
  KD_NAMESPACE_ENUM NameSpace; 
  bool v8; 
  unsigned int NameSpacePathLength; 
  const WCHAR *Flink; 

  v1 = (_DEVICES_IN_USE *)*(&CmpDummyThreadEvent + 529);
  v2 = 0i64;
  v4 = 0i64;
  v5 = 0;
  while( v1 != (_DEVICES_IN_USE *)((char *)&CmpDummyThreadEvent + 4232) )
  {
    Blink = v1->ListHead.Blink;
    v4 = v1;
    NameSpace = Device->NameSpace;
    if( HIDWORD(Blink[13].Blink) != NameSpace )
      goto LABEL_12;
    if( NameSpace )
    {
      NameSpacePathLength = Device->NameSpacePathLength;
      if( LODWORD(Blink[14].Blink) != NameSpacePathLength )
        goto LABEL_12;
      if( !Device->NameSpacePath )
        goto LABEL_12;
      Flink = (const WCHAR *)Blink[14].Flink;
      if( !Flink )
        goto LABEL_12;
      v8 = wcsncmp(Device->NameSpacePath, Flink, NameSpacePathLength) == 0;
    }
    else
    {
      if( LODWORD(Blink->Flink) != Device->Bus || HIDWORD(Blink->Flink) != Device->Slot )
        goto LABEL_12;
      v8 = LOWORD(Blink->Blink) == Device->Segment;
    }
    if( v8 )
    {
      v5 = 1;
      break;
    }
LABEL_12:
    v1 = *(_DEVICES_IN_USE **)&v1->DeviceCount;
  }
  if( v5 == 1 )
    return v4;
  return v2;
}

Referenced by:

HalpKdReleaseDebuggingDevice
HalpKdSetupDebuggingDevice
HalpRegisterDeviceInUse