SP_DEVICE_INTERFACE_DETAIL_DATA (Structures)
Last changed: -62.231.151.3

.

The SP_DEVICE_INTERFACE_DETAIL_DATA structure provides detailed information about a particular device interface.

C# Definition:

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
  struct NativeDeviceInterfaceDetailData
  {
    public int    size;
    public char   devicePath;
  }

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
  struct SP_DEVICE_INTERFACE_DETAIL_DATA
  {
    public int cbSize;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = BUFFER_SIZE)]
    public string DevicePath;
  }

Members:

size

Size of the structure, in bytes.

devicePath

NULL-terminated string that specifies the device path.

Example:

unsafe internal string GetDeviceInterfaceDetail(ref DeviceInterfaceData.NativeDeviceInterfaceData devIfaceData)
{
  NativeDeviceInterfaceDetailData* devIfaceDetailData = null;

  try
  {
   int devIfaceDetailDataSize = 0;

   for (;;)
   {
    int result = SetupDiGetDeviceInterfaceDetail(
     _devInfoList, ref devIfaceData, ref *devIfaceDetailData, devIfaceDetailDataSize, out devIfaceDetailDataSize, IntPtr.Zero);

    if (result == 0 && Marshal.GetLastWin32Error() != ErrorInsufficientBuffer)
     throw new Win32Exception();

    if (result != 0)
     break;

    Marshal.FreeHGlobal((IntPtr)devIfaceDetailData);
    devIfaceDetailData = (NativeDeviceInterfaceDetailData*)Marshal.AllocHGlobal(devIfaceDetailDataSize);

    devIfaceDetailData->size = Marshal.SizeOf(
     typeof(NativeDeviceInterfaceDetailData));
   }

   return Marshal.PtrToStringAuto(new IntPtr(&devIfaceDetailData->devicePath));

  }
  finally
  {
   Marshal.FreeHGlobal((IntPtr)devIfaceDetailData);
  }
}

Documentation