Device information properties

Important APIs

Each device has associated DeviceInformation properties that you can use when you need specific information or when you are building a device selector. These properties can be specified an AQS filter to limit the devices that you are enumerating over in order to find the devices with the specified traits. You can also use these properties to indicate what information you want returned for each device. That enables you to specify the device information that is returned to your application.

For more information about using DeviceInformation properties in your device selector, see Build a device selector. This topic goes into how to request information properties and also lists some common properties and their purpose.

A DeviceInformation object is composed of an identity (DeviceInformation.Id), a kind (DeviceInformation.Kind), and a property bag (DeviceInformation.Properties). All of the other properties of a DeviceInformation object are derived from the Properties property bag. For example, Name is derived from System.ItemNameDisplay. This means that the property bag always contains the information necessary to determine the other properties.

Requesting properties

A DeviceInformation object has some basic properties, such as Id and Kind, but most of the properties are stored in a property bag under Properties. Because of this, the property bag contains the properties used to source the properties out of the property bag. For example, use System.ItemNameDisplay to source the Name property. This is a case of a common and well-known property that has a user-friendly name. Windows provides several of these user-friendly names to make querying for properties easier.

When you are requesting properties, you are not limited to the common properties with user-friendly names. You can specify the underlying GUID and property ID (PID) to request any property that is available, even custom properties that are supplied by an individual device or driver. The format for specifying a custom property is "{GUID} PID". For example: "{744e3bed-3684-4e16-9f8a-07953a8bf2ab} 7".

Note

You can find the list of property GUIDs in the device property key header file of the device driver.

Some properties are common across all DeviceInformationKind objects, but most are unique to a specific kind. The following sections list some common properties sorted by the individual DeviceInformationKind. For more information about how the different kinds relate to one another, see DeviceInformationKind.

DeviceInterface properties

DeviceInterface is the default and most common DeviceInformationKind object used in app scenarios. This is the kind of object that you should use unless the device API indicates a different specific DeviceInformationKind.

Name Type Description
System.Devices.ContainerId GUID Identity of the DeviceInformationKind.DeviceContainer that contains the Device containing this DeviceInterface. You can pass this value to CreateFromIdAsync along with DeviceInformationKind.DeviceContainer to find the appropriate container.
System.Devices.InterfaceClassGuid GUID The interface class GUID this interface represents.
System.Devices.DeviceInstanceId String Identity of the parent DeviceInformationKind.Device. You can pass this value to CreateFromIdAsync along with DeviceInformationKind.Device to find the appropriate device.
System.Devices.InterfaceEnabled Boolean Indicates if the interface is enabled. DeviceInformation.IsEnabled is derived from this property.
System.Devices.GlyphIcon String Icon path for the glyph.
System.Devices.IsDefault Boolean Indicates whether this is the default device for the System.Devices.InterfaceClassGuid. This is mainly used for printers. This does not work for audio since there are multiple audio defaults. Use GetDefaultAudioRenderId or GetDefaultAudioCaptureId to get audio defaults.
System.Devices.Icon String Icon path.
System.ItemNameDisplay String The best display name for the device object.

 

Device properties

Name Type Description
System.Devices.ClassGuid GUID Device class used during device installation. For more information, see Device Setup Classes.
System.Devices.CompatibleIds String[] The compatible ids of the device. These are used when Windows is determining the best driver to install on the device. For more information, see Compatible ID.
System.Devices.ContainerId GUID Identity of the DeviceInformationKind.DeviceContainer that includes this device. You can pass this value to CreateFromIdAsync along with DeviceInformationKind.DeviceContainer to find the appropriate container.
System.Devices.DeviceCapabilities UInt32 A bitwise-OR of the CM_DEVCAP_X capabilities flags that are defined in CfgMgr32.h. For more information, see DEVPKEY_Device_Capabilities.
System.Devices.DeviceHasProblem Boolean The device currently has a problem and is likely not functioning correctly. This could be due to an outdated, missing, or invalid driver.
System.Devices.DeviceInstanceId String The identity of the device. This is also the value of DeviceInformation.Id.
System.Devices.DeviceManufacturer String The manufacturer of the device.
System.Devices.HardwareIds String[] The hardware ids of the device. Windows uses these ids when determining the best driver to install. Device vendors can use this property to identify their device from their app. For more information, see Hardware ID.
System.Devices.Parent String The DeviceInformation.Id of the parent device. This is the connection parent, not the DeviceContainer parent.
System.Devices.Present Boolean Indicates whether the device is currently present and available.
System.ItemNameDisplay String The best display name for this device object. In this case, this is not necessarily the best name for users. A more likely candidate for a user-friendly name could be found by referencing the System.ItemNameDisplay of the associated DeviceContainer or DeviceInterface.

 

DeviceContainer properties

Name Type Description
System.Devices.Category String[] A list of descriptions of the categories the device belongs to. This list is provided as singular categories. For example, "Display", "Phone", or "Audio device".
System.Devices.CategoryIds String[] Contains a list of categories this device belongs to. For example, Audio.Headphone, Display.Monitor, or Input.Gaming.
System.Devices.CategoryPlural String[] A list of descriptions of the categories the device belongs to. This list is provided as plural categories. For example, "Displays", "Phones", or "Audio devices".
System.Devices.CompatibleIds String[] The collection of compatible ids for all the child DeviceInformationKind.Device objects.
System.Devices.Connected Boolean Indicates whether the device is currently connected to the system or not.
System.Devices.GlyphIcon String Icon path for the glyph.
System.Devices.HardwareIds String[] The collection of hardware ids for all the child DeviceInformationKind.Device objects.
System.Devices.Icon String Icon path.
System.Devices.LocalMachine Boolean True if this DeviceContainer represents the system itself, false if the device is external to the system.
System.Devices.Manufacturer String The manufacturer of the device.
System.Devices.ModelName String Model name of the device container.
System.Devices.Paired Boolean Indicates whether any of the child DeviceInformationKind.Device objects are wireless or network devices that are currently paired with the system.
System.ItemNameDisplay String The best display name for this device.

 

DeviceInterfaceClass properties

Name Type Description
System.ItemNameDisplay String The best display name for this device.

 

AssociationEndpoint properties

Name Type Description
System.Devices.Aep.AepId String Identity of this device. This is also the value of DeviceInformation.Id.
System.Devices.Aep.CanPair Boolean Indicates if the device can be paired with the system or not. DeviceInformationPairing.CanPair is derived from this property.
System.Devices.Aep.Category String[] The categories that the device is part of. For example, printer or camera.
System.Devices.Aep.ContainerId GUID The id of the parent AssociationEndpointContainer object.
System.Devices.Aep.DeviceAddress String The address of the device. If the device is a network device, this is the IP address.
System.Devices.Aep.IsConnected Boolean Indicates if the device is currently connected to the system.
System.Devices.Aep.IsPaired Boolean Indicates if the device is currently paired. DeviceInformationPairing.IsPaired is derived from this property.
System.Devices.Aep.IsPresent Boolean Indicates if the device is currently present, meaning the device is live and discovered over the network or wireless protocol. Once a device has been paired with the system, the device is cached. After this, the device will be automatically discovered when querying for AssociationEndpoint objects. Because of this, you cannot rely on just discovering the device with a query to indicate whether or not it is currently usable. That is why this property is important.
System.Devices.Aep.Manufacturer String The manufacturer of the device.
System.Devices.Aep.ModelId GUID The model id of the device.
System.Devices.Aep.ModelName String The model name of the device.
System.Devices.Aep.ProtocolId GUID Indicates the protocol used to discover this AssocationEndpoint device.
System.Devices.Aep.SignalStrength Int32 The signal strength of the device. This property is only applicable for some protocols.
System.ItemNameDisplay String The best display name for the device.

 

AssociationEndpointContainer properties

Name Type Description
System.Devices.AepContainer.Categories String[] The categories that the device is part of. For example, printer or camera.
System.Devices.AepContainer.Children String[] The collection of ids for the AssocationEndpoint objects that are part of this container.
System.Devices.AepContainer.CanPair Boolean Indicates if one of the child AssociationEndpoint devices can be paired with the system or not. DeviceInformationPairing.CanPair is derived from this property.
System.Devices.AepContainer.ContainerId GUID Identity of this device. This is also the value of DeviceInformation.Id, but in GUID form.
System.Devices.AepContainer.IsPaired Boolean Indicates if one of the child AssociationEndpoint devices is currently paired. DeviceInformationPairing.IsPaired is derived from this property.
System.Devices.AepContainer.IsPresent Boolean Indicates if one of the child AssociationEndpoint devices is currently present, meaning the device is live and discovered over the network or wireless protocol. Once a device has been paired with the system, the device is cached. After this, the device will be automatically discovered when querying for AssociationEndpoint objects. Because of this, you cannot rely on just discovering the device with a query to indicate whether or not it is currently usable. That is why this property is important.
System.Devices.AepContainer.Manufacturer String The manufacturer of the device.
System.Devices.AepContainer.ModelIds String[] A list of model ids for the device. Each model is a GUID in string form.
System.Devices.AepContainer.ModelName String The model name of the device.
System.Devices.AepContainer.ProtocolIds GUID[] A list of protocol ids that have contributed to building this AssociationEndpointContainer object. Keep in mind that an AssociationEndpointContainer device is created by collecting all AssociationEndpoint devices discovered over different protocols for the same physical device.
System.Devices.AepContainer.SupportedUriSchemes String[] List of casting URI schemes supported by this device.
System.Devices.AepContainer.SupportsAudio Boolean Indicates if this device supports audio casting.
System.Devices.AepContainer.SupportsImages Boolean Indicates if this device supports image casting.
System.Devices.AepContainer.SupportsVideo Boolean Indicates if this device supports video casting.
System.ItemNameDisplay String The best display name for the device.

 

AssociationEndpointService properties

Name Type Description
System.Devices.AepService.AepId String The identifier of the parent AssociationEndpoint object.
System.Devices.AepService.ContainerId GUID The identifier of the parent AssociationEndpointContainer object.
System.Devices.AepService.ParentAepIsPaired Boolean Indicates whether the parent AssociationEndpoint object is paired with the system.
System.Devices.AepService.ProtocolId GUID Identity of the protocol used to discover this device.
System.Devices.AepService.ServiceClassId GUID Iidentity of the service represented by this device.
System.Devices.AeoService.ServiceId String Identity of this service. This is also the value of DeviceInformation.Id.
System.ItemNameDisplay String The best display name for the service.