HalpFindDevice

__int64 *__fastcall HalpFindDevice(__int64 a1){
  __int64 *v1; 
  __int64 v2; 
  __int64 *v4; 
  char v5; 
  __int64 v6; 
  int v7; 
  bool v8; 
  unsigned int v9; 
  const WCHAR *v10; 
  v1 = (__int64 *)qword_140C48AC8;
  v2 = 0i64;
  v4 = 0i64;
  v5 = 0;
  while( v1 != &qword_140C48AC8 )
  {
    v6 = v1[2];
    v4 = v1;
    v7 = *(_DWORD *)(a1 + 220);
    if( *(_DWORD *)(v6 + 220) != v7 )
      goto LABEL_12;
    if( v7 )
    {
      v9 = *(_DWORD *)(a1 + 232);
      if( *(_DWORD *)(v6 + 232) != v9 )
        goto LABEL_12;
      if( !*(_QWORD *)(a1 + 224) )
        goto LABEL_12;
      v10 = *(const WCHAR **)(v6 + 224);
      if( !v10 )
        goto LABEL_12;
      v8 = (unsigned int)wcsncmp(*(const WCHAR **)(a1 + 224), v10, v9) == 0;
    }
    else
    {
      if( *(_DWORD *)v6 != *(_DWORD *)a1 || *(_DWORD *)(v6 + 4) != *(_DWORD *)(a1 + 4) )
        goto LABEL_12;
      v8 = *(_WORD *)(v6 + 8) == *(_WORD *)(a1 + 8);
    }
    if( v8 )
    {
      v5 = 1;
      break;
    }
LABEL_12:
    v1 = (__int64 *)*v1;
  }
  if( v5 == 1 )
    return v4;
  return(__int64 *)v2;
}

Referenced by:

HalpKdReleaseDebuggingDevice
HalpKdSetupDebuggingDevice
HalpRegisterDeviceInUse