SetupDiGetDeviceInterfaceDetail (setupapi)
Last changed: -107.1.25.194

.
Summary
Retrieve a device path name

C# Signature:

[DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean SetupDiGetDeviceInterfaceDetail(
   IntPtr hDevInfo,
   ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
   out SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
   UInt32 deviceInterfaceDetailDataSize,
   out UInt32 requiredSize,
   ref SP_DEVINFO_DATA deviceInfoData
);

VB Signature:

Declare Function SetupDiGetDeviceInterfaceDetail Lib "setupapi.dll" (TODO) As TODO

User-Defined Types:

    [StructLayout(LayoutKind.Sequential)]
    public struct SP_DEVINFO_DATA
    {
        public UInt32 cbSize;
        public Guid ClassGuid;
        public UInt32 DevInst;
        public IntPtr Reserved;
    }

    // Device interface data
    [StructLayout(LayoutKind.Sequential)]
    public struct SP_DEVICE_INTERFACE_DATA
    {
        public UInt32 cbSize;
        public Guid InterfaceClassGuid;
        public UInt32 Flags;
        public UInt32 Reserved;
    }

    // Device interface detail data
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct SP_DEVICE_INTERFACE_DETAIL_DATA
    {
        public UInt32 cbSize;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string DevicePath;
    }

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

SP_DEVICE_INTERFACE_DETAIL_DATA needs a ByVal TCHAR[ANYSIZE_ARRAY] member, which could conceivably be any size. This does not bode well for determining the correct size, however DevicePath should be no longer than MAX_PATH (256).

Tips & Tricks:

Please add some!

Sample Code:

Please add some!

Documentation