Enumerar dispositivos em uma rede

Usa o Windows. APIs Devices.Enumeration para enumerar dispositivos através de protocolos sem fios e em rede.

Enumeração de dispositivos através de protocolos em rede ou sem fios

Por vezes, é necessário enumerar dispositivos que não estão conectados localmente e só podem ser descobertos através de protocolos wireless ou de rede. Para tal, as APIs Windows.Devices.Enumeration têm três tipos diferentes de objetos de dispositivo: o AssociationEndpoint (AEP), o AssociationEndpointContainer (AEP Container) e o AssociationEndpointService (AEP Service). Como grupo, estes são designados por AEPs ou objetos AEP.

Algumas APIs de dispositivos fornecem uma string seletora que pode usar para enumerar através dos objetos AEP disponíveis. Isto pode incluir tanto os dispositivos emparelhados como os que não estão emparelhados com o sistema. Alguns dos dispositivos podem não precisar de emparelhamento. Essas APIs de dispositivo podem tentar emparelhar o dispositivo se for necessário emparelhá-lo antes de interagir com ele. Wi-Fi Direct é um exemplo de APIs que seguem este padrão. Se essas APIs de dispositivo não emparelarem automaticamente o dispositivo, pode emparelhá-lo usando o objeto DeviceInformationPairing disponível em DeviceInformation.Pairing.

No entanto, pode haver casos em que queira descobrir dispositivos manualmente por conta própria, sem usar uma sequência seletora pré-definida. Por exemplo, pode simplesmente precisar de recolher informação sobre dispositivos AEP sem interagir com eles ou pode querer encontrar mais objetos AEP do que aqueles que serão descobertos com a cadeia seletora pré-definida. Neste caso, irá construir a sua própria string seletora e usá-la seguindo as instruções em Construir um seletor de dispositivo.

Quando constrói o seu próprio seletor, é fortemente recomendado que limite o âmbito de enumeração aos protocolos que lhe interessam. Por exemplo, não pretende que o rádio Wi‑Fi procure dispositivos Wi‑Fi Direct se estiver particularmente interessado em dispositivos UPnP. O Windows definiu uma identidade para cada protocolo que pode usar para definir o âmbito da sua enumeração. A tabela seguinte lista os tipos de protocolo e identificadores.

Protocolo ou tipo de dispositivo de rede ID
UPnP (incluindo DIAL e DLNA) {0e261de4-12f0-46e6-91ba-428607ccef64}
Serviços web em dispositivos (WSD) {782232aa-a2f9-4993-971b-aedc551346b0}
Wi-Fi Direto {0407d24e-53de-4c9a-9ba1-9ced54641188}
Descoberta de serviços DNS (DNS-SD) {4526e8c1-8AAC-4153-9b16-55e86ada0e54}
Ponto de serviço {d4bf61b3-442e-4ada-882d-fa7B70c832d9}
Impressoras de rede (impressoras de diretório ativo) {37aba761-2124-454c-8d82-c42962c2de2b}
Windows Connect Now (WNC) {4c1b1ef8-2f62-4b9f-9bc5-b21ab636138f}
Docks WiGig {a277f3a5-8764-4f88-8045-4c5e962640b1}
Wi-Fi provisionamento para impressoras HP {c85EF710-F344-4792-BB6D-85A4346F1E69}
Bluetooth {e0cbf06c-cd8b-4647-bb8a-263b43f0f974}
Bluetooth LE {bb7bb05e-5972-42b5-94fc-76EAA7084d49}
Câmara de Rede {b8238652-b500-41eb-b4f3-4234f7f5ae99}

Exemplos de Sintaxe Avançada de Consultas (AQS)

Cada tipo de AEP tem uma propriedade que pode usar para restringir a sua enumeração a um protocolo específico. Lembra-te que podes usar o operador OR num filtro AQS para combinar vários protocolos. Aqui estão alguns exemplos de cadeias de filtro AQS que mostram como pesquisar dispositivos AEP.

Este AQS consulta todos os objetos UPnP AssociationEndpoint quando o DeviceInformationKind está definido como AsssociationEndpoint.

System.Devices.Aep.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

Este AQS consulta todos os objetos UPnP e WSD AssociationEndpoint quando o DeviceInformationKind está definido para AsssociationEndpoint.

System.Devices.Aep.ProtocolId:="{782232aa-a2f9-4993-971b-aedc551346b0}" OR
System.Devices.Aep.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

Este AQS consulta todos os objetos UPnP AssociationEndpointService se o DeviceInformationKind estiver definido como AsssociationEndpointService.

System.Devices.AepService.ProtocolId:="{0e261de4-12f0-46e6-91ba-428607ccef64}"

Este AQS consulta objetos AssociationEndpointContainer quando o DeviceInformationKind está definido para AssociationEndpointContainer, mas só os encontra enumerando o protocolo UPnP. Normalmente, não seria útil enumerar contentores que vêm apenas de um protocolo. No entanto, isto pode ser útil ao limitar o filtro a protocolos onde sabe que o seu dispositivo pode ser descoberto.

System.Devices.AepContainer.ProtocolIds:~~"{0e261de4-12f0-46e6-91ba-428607ccef64}"