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);

Notes:

Cannot use StringBuilder for buffer, since the buffer may contain several null terminated strings.

Sample Code:

static string[] GetDeviceInterfaces(Guid guid) {
     uint size;
     var result = CM_Get_Device_Interface_List_Size(out size, ref guid, null, 0);
     if (result != 0) throw new Exception("Unable to retrieve device interface list size: " + result);    

     var buffer = new char[(int)size];
     result = CM_Get_Device_Interface_List(ref guid, null, buffer, size, 0);
     if (result != 0) throw new Exception("Unable to retrieve device interface list: " + result);

     return new string(buffer).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
}

Documentation