CM_Get_Device_Interface_List (cfgmgr32)
Last changed: -62.209.199.5

.
Summary
The CM_Get_Device_Interface_List function retrieves a list of device interface instances that belong to a specified device interface class.

C# Signature:

[DllImport("CfgMgr32.dll", CharSet = CharSet.Unicode)]
static extern uint CM_Get_Device_Interface_List(ref Guid interfaceClassGuid, string deviceID, char[] buffer, uint bufferLength, uint flags);

Documentation

Sample Code:

const ulong CM_GETIDLIST_FILTER_PRESENT = 0x00000100;
const uint CM_GET_DEVICE_INTERFACE_LIST_PRESENT = 0x0;
const int CR_SUCCESS = 0x0;
static Guid GUID_DEVINTERFACE_COMPORT = new Guid("{86E0D1E0-8089-11D0-9CE4-08003E301F73}");

public static string[] GetPortNames()
{

  var cr = CM_Get_Device_Interface_List_Size(out uint size, ref GUID_DEVINTERFACE_COMPORT, null, CM_GET_DEVICE_INTERFACE_LIST_PRESENT);        
  if (cr == CR_SUCCESS && size != 0)
  {
    char[] data = new char[size];
    cr = CM_Get_Device_Interface_List(ref GUID_DEVINTERFACE_COMPORT, null, data, (uint)data.Length, CM_GET_DEVICE_INTERFACE_LIST_PRESENT);
    if (cr == CR_SUCCESS)
      return new string(data).Split('\0').ToList().Where(m=>!string.IsNullOrEmpty(m)).ToArray();
    }
    return null;
}