static NativeMethods() { //DEVPKEY_Device_BusReportedDeviceDesc.fmtid = new Guid("540B947E-8B40-45BC-A8A2-6A0B894CBDA2"); //DEVPKEY_Device_BusReportedDeviceDesc.pid = 4; DEVPKEY_Device_BusReportedDeviceDesc = new DEVPROPKEY(); // DEVPKEY_Device_BusReportedDeviceDesc DEVPKEY_Device_BusReportedDeviceDesc.pid = 4; DEVPKEY_Device_BusReportedDeviceDesc.fmtid = new Guid(0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2); // DEVPKEY_Device_DeviceDesc //DEVPKEY_Device_BusReportedDeviceDesc.pid = 2; //DEVPKEY_Device_BusReportedDeviceDesc.fmtid = new Guid(0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0); // DEVPKEY_DeviceInterface_FriendlyName //DEVPKEY_Device_BusReportedDeviceDesc.pid = 2; //DEVPKEY_Device_BusReportedDeviceDesc.fmtid = new Guid(0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22); // DEVPKEY_Device_DriverDesc //DEVPKEY_Device_BusReportedDeviceDesc.pid = 4; //DEVPKEY_Device_BusReportedDeviceDesc.fmtid = new Guid(0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6); }
public static extern bool SetupDiGetDeviceProperty(IntPtr deviceInfo, ref SP_DEVINFO_DATA deviceInfoData, ref DEVPROPKEY propkey, ref ulong propertyDataType, byte[] propertyBuffer, int propertyBufferSize, ref int requiredSize, uint flags);
static setupapi() { setupapi.DEVPKEY_Device_DeviceDesc = new DEVPROPKEY(); DEVPKEY_Device_DeviceDesc.fmtid = new Guid(0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67,0xd1, 0x46, 0xa8, 0x50, 0xe0); DEVPKEY_Device_DeviceDesc.pid = 2; DEVPKEY_Device_HardwareIds = new DEVPROPKEY(); DEVPKEY_Device_HardwareIds.fmtid = new Guid(0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67,0xd1, 0x46, 0xa8, 0x50, 0xe0); DEVPKEY_Device_HardwareIds.pid = 3; }
private extern static bool SetupDiGetDeviceInterfaceProperty(IntPtr deviceInfoSet, ref SP_DEVICE_INTERFACE_DATA deviceInterfaceDataa, ref DEVPROPKEY propertyKey, out UInt32 propertyType, IntPtr outPropertyData, UInt32 dataBufferLength, out UInt32 requredBufferLength, UInt32 flags);
static string RetrieveDeviceInstancePropertyString(IntPtr devInfo, SP_DEVICE_INTERFACE_DATA interfaceData, DEVPROPKEY property) { // This is a valid interface, retrieve its path UInt32 requiredLength = 0; UInt32 propertyType; if (!SetupDiGetDeviceInterfaceProperty(devInfo, ref interfaceData, ref property, out propertyType, IntPtr.Zero, 0, out requiredLength, 0)) { int err = Marshal.GetLastWin32Error(); if (err == ERROR_NOT_FOUND) { return null; } if (err != ERROR_INSUFFICIENT_BUFFER) { throw new Exception("SetupDiGetDeviceInterfaceProperty failed (determining length) " + (new Win32Exception()).ToString()); } } UInt32 actualLength = requiredLength; IntPtr mem = Marshal.AllocHGlobal((int)requiredLength); try { Marshal.WriteInt32(mem, 6); // set fake size in fake structure if (!SetupDiGetDeviceInterfaceProperty(devInfo, ref interfaceData, ref property, out propertyType, mem, requiredLength, out actualLength, 0)) { throw new Exception("SetupDiGetDeviceInterfaceProperty failed (retrieving data) " + (new Win32Exception()).ToString()); } // Convert TCHAR string into chars. if (actualLength > requiredLength) { throw new Exception("Consistency issue: Actual length should not be larger than buffer size."); } return ReadString(mem, (int)((actualLength) / 2)); } finally { Marshal.FreeHGlobal(mem); } }
public static extern Boolean SetupDiGetDevicePropertyW(IntPtr deviceInfoSet, ref SP_DEVINFO_DATA deviceInfoData, ref DEVPROPKEY propertyKey, out UInt32 propertyType, IntPtr propertyBuffer, UInt32 propertyBufferSize, out UInt32 requiredSize, UInt32 flags);
static string RetrieveDeviceInstancePropertyString(IntPtr devInfo, SP_DEVICE_INTERFACE_DATA interfaceData, DEVPROPKEY property) { // This is a valid interface, retrieve its path UInt32 requiredLength = 0; UInt32 propertyType; if (!SetupDiGetDeviceInterfaceProperty(devInfo, ref interfaceData, ref property, out propertyType, IntPtr.Zero, 0, out requiredLength, 0)) { int err = Marshal.GetLastWin32Error(); if (err == ERROR_NOT_FOUND) { return(null); } if (err != ERROR_INSUFFICIENT_BUFFER) { throw new Exception("SetupDiGetDeviceInterfaceProperty failed (determining length) " + (new Win32Exception()).ToString()); } } UInt32 actualLength = requiredLength; IntPtr mem = Marshal.AllocHGlobal((int)requiredLength); try { Marshal.WriteInt32(mem, 6); // set fake size in fake structure if (!SetupDiGetDeviceInterfaceProperty(devInfo, ref interfaceData, ref property, out propertyType, mem, requiredLength, out actualLength, 0)) { throw new Exception("SetupDiGetDeviceInterfaceProperty failed (retrieving data) " + (new Win32Exception()).ToString()); } // Convert TCHAR string into chars. if (actualLength > requiredLength) { throw new Exception("Consistency issue: Actual length should not be larger than buffer size."); } return(ReadString(mem, (int)((actualLength) / 2))); } finally { Marshal.FreeHGlobal(mem); } }