[DllImport(@"setupapi.dll", CharSet=CharSet.Auto, SetLastError = true)]
public static extern Boolean SetupDiEnumDeviceInterfaces( IntPtr hDevInfo, IntPtr devInfo, ref Guid interfaceClassGuid, UInt32 memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData );

public struct SP_DEVICE_INTERFACE_DATA
    {
    public int cbSize;
    public Guid InterfaceClassGuid;
    public int Flags;
    public IntPtr RESERVED;
    }

SP_DEVICE_INTERFACE_DATA devData = new SP_DEVICE_INTERFACE_DATA();

devData.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(devData);

// failure to do so will always return false (which is the value you'll also get if the device is not connected)

// Here's what the call looks like...

bool result = Win32Calls.SetupDiEnumDeviceInterfaces(ipDeviceHndl, iLU, ref DeviceGUID, 0, ref devData);

// The DeviceGUID parameter will be device dependant. Look in the Manufacturer's sdk or api for the correct guid for your device

Sample Code:

class Win32Calls
    {
    [DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern IntPtr SetupDiGetClassDevs(ref Guid classGuid, IntPtr enumerator, IntPtr hwndParent, UInt32 flags);
    [DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern Boolean SetupDiEnumDeviceInterfaces(IntPtr hDevInfo, IntPtr devInfo, ref Guid interfaceClassGuid, UInt32 memberIndex, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData);

相关文章: