private static byte[] GetUsbDeviceProperty( Interop.Windows.SafeDevInfoSetHandle deviceInfoSetHandle, ref Interop.Windows.SetupDeviceInfoData deviceInfoData, Interop.Windows.SetupDeviceRegistryProperty property, ref Interop.Windows.RegType regType) { var requiredSize = 0U; var success = Interop.Windows.SetupDiGetDeviceRegistryPropertyW( deviceInfoSetHandle, ref deviceInfoData, property, IntPtr.Zero, IntPtr.Zero, 0, ref requiredSize ); if (!success) { var win32Error = Marshal.GetLastWin32Error(); if (win32Error == (int)Interop.Windows.Error.InvalidData) { Logger.GetInstance(typeof(Windows)).Debug($"The requested property {property} does not exist"); regType = 0; return(null); } if (win32Error != (int)Interop.Windows.Error.InsufficientBuffer) { Logger.GetInstance(typeof(Windows)).Error($"Can not query USB device registry property, error code: {win32Error}"); regType = 0; return(null); } } var propertyBuffer = new byte[requiredSize]; success = Interop.Windows.SetupDiGetDeviceRegistryPropertyW( deviceInfoSetHandle, ref deviceInfoData, property, ref regType, propertyBuffer, (uint)propertyBuffer.Length, ref requiredSize ); if (!success) { var win32Error = Marshal.GetLastWin32Error(); Logger.GetInstance(typeof(Windows)).Error($"Can not get USB device registry property, error code: {win32Error}"); return(null); } return(propertyBuffer); }
private static string GetUsbDeviceStringProperty( Interop.Windows.SafeDevInfoSetHandle deviceInfoSetHandle, ref Interop.Windows.SetupDeviceInfoData deviceInfoData, Interop.Windows.SetupDeviceRegistryProperty property) { var regType = Interop.Windows.RegType.None; var bytes = GetUsbDeviceProperty( deviceInfoSetHandle, ref deviceInfoData, property, ref regType ); if (bytes == null || bytes.Length == 0 || regType != Interop.Windows.RegType.Sz) { return(string.Empty); } return(Encoding.Unicode.GetString(bytes, 0, bytes.Length - sizeof(char)).Trim()); }
private static string[] GetUsbDeviceMultiStringProperty( Interop.Windows.SafeDevInfoSetHandle deviceInfoSetHandle, ref Interop.Windows.SetupDeviceInfoData deviceInfoData, Interop.Windows.SetupDeviceRegistryProperty property) { var regType = Interop.Windows.RegType.None; var bytes = GetUsbDeviceProperty( deviceInfoSetHandle, ref deviceInfoData, property, ref regType ); if (bytes == null || bytes.Length == 0 || regType != Interop.Windows.RegType.MultiSz) { return(new string[] { }); } return(Encoding.Unicode.GetString(bytes).Split( new[] { '\0' }, StringSplitOptions.RemoveEmptyEntries )); }