コード例 #1
0
        internal static IEnumerable <object> GetDevicePropertyKeys(IntPtr deviceInfoSet, object deviceInfoData)
        {
            var  devInfo = (SP_DEVINFO_DATA)deviceInfoData;
            var  keys    = new DEVPROPKEY[1];
            uint requiredPropertyKeyCount;

            if (!NativeMethods.SetupDiGetDevicePropertyKeys(deviceInfoSet, ref devInfo, ref keys[0], (uint)keys.Length, out requiredPropertyKeyCount, 0))
            {
                if (Marshal.GetLastWin32Error() == ERROR_INSUFFICIENT_BUFFER)
                {
                    keys = new DEVPROPKEY[requiredPropertyKeyCount];
                    if (NativeMethods.SetupDiGetDevicePropertyKeys(deviceInfoSet, ref devInfo, ref keys[0], (uint)keys.Length, out requiredPropertyKeyCount, 0))
                    {
                        return(keys.Cast <object>()); // .Select(k => (object)k);
                    }
                    else
                    {
                        throw new System.ComponentModel.Win32Exception();
                    }
                }
                else
                {
                    throw new System.ComponentModel.Win32Exception();
                }
            }
            return(null);
        }