[DllImport("setupapi.dll", SetLastError=true)]
static extern bool SetupDiClassGuidsFromName(string ClassName, IntPtr ClassGuidList, UInt32 ClassGuidListSize, out UInt32 RequiredSize, string MachineName, IntPtr Reserved);
<DllImport("setupapi.dll")> _
Private Shared Function SetupDiClassGuidsFromName( _
ByVal ClassName As StringBuilder, _
ByRef ClassGuids As Guid, _
ByVal ClassGuidSize As Integer, _
ByRef ClassGuidRequiredSize As Integer) As Boolean
End Function
None.
Do you know one? Please contribute it!
I am unsure if this declaration is correct. The one problem that I found is that the function asks for an Array of GUIDs. I couldn't get that to work, but just using one did work. I found that none of the device classes had more than one GUID so I figured this to be okay. Please correct if you know better.
10/02/2009
C# signature corrected. I didn't manage to use a real array of Guids (with one Guid works fine as reported above). So a little bit of lower-level operations as follows:
// first check the required number of classes
UInt32 size = 0;
SetupDiClassGuidsFromNameEx("class name here", IntPtr.Zero, 0, out size, null, IntPtr.Zero);
// allocate unmanaged memory - one GUID needs 16 bytes
IntPtr ptr = Marshal.AllocHGlobal(GUID_SIZE * (int)size);
// read guids
SetupDiClassGuidsFromNameEx("class name here", ptr, size, out size, null, IntPtr.Zero);
// if needed - convert to real Guids
Guid[] guids = new Guid[(int)size];
byte[] buffer = new byte[GUID_SIZE];
for (int n = 0; n < size; n++)
{
for (int pos = 0; pos < GUID_SIZE; pos++)
{
buffer[pos] = Marshal.ReadByte(ptr, (n * GUID_SIZE) + pos);
bGuids[n][pos] = buffer[pos];
}
guids[n] = new Guid(buffer);
}
}
Please add some!
Dim ClassName As New StringBuilder("net")
Dim ClassGuid As Guid
Dim GuidSize As Integer = 0
Dim GuidReqtSize As Integer
Dim intRtrn As Integer
intRtrn = SetupDiClassGuidsFromName(ClassName, ClassGuid, GuidSize, GuidReqtSize)
GuidSize = GuidReqtSize
intRtrn = SetupDiClassGuidsFromName(ClassName, ClassGuid, GuidSize, GuidReqtSize)
MsgBox(ClassGuid.ToString)