[DllImport("setupapi.dll")]
static extern int CM_Get_Device_ID_List_Size(ref uint idListlen, int dnDevInst, uint ulFlags);
Declare Function CM_Get_Device_ID_List_Size Lib "setupapi.dll" (TODO) As TODO
None.
Do you know one? Please contribute it!
None.
Please add some!
const ulong CM_GETIDLIST_FILTER_PRESENT = 0x00000100;
uint idListLen = 0;
string filter = null;
List<string> deviceInstanceIdStrs = new List<string>();
int cmRet = CM_Get_Device_ID_List_Size(ref idListLen, 0, (uint)CM_GETIDLIST_FILTER_PRESENT);
if (0 == cmRet)
{
byte[] data = new byte[idListLen];
cmRet = CM_Get_Device_ID_List(filter, data, idListLen, (uint)CM_GETIDLIST_FILTER_PRESENT);
if (0 == cmRet)
{
deviceInstanceIdStrs = BytesToStrings(data);
}
}
return deviceInstanceIdStrs;
// ...
public List<string> BytesToStrings(byte[] rawData)
{
List<string> strings = new List<string>();
int limit = rawData.Length;
int idx = 0;
bool processing = (idx < limit);
while (processing)
{
int x = idx;
while (x < limit && 0 != rawData[x])
{
++x;
}
if (x >= limit)
{
break;
}
int sz = (x - idx);
byte[] bytes = new byte[sz];
Array.Copy(rawData, idx, bytes, 0, sz);
try
{
string str = Encoding.Default.GetString(bytes);
strings.Add(str);
idx = x + 1;
}
catch (Exception e)
{
Console.WriteLine(e);
idx = limit;
}
processing = (idx < limit);
}
return strings;
}