Exemplo n.º 1
0
        /// <summary>
        /// Returns a sorted list of all computer's devices
        /// </summary>
        /// <returns></returns>
        public string[] GetDevicesList()
        {
            List <string> HWList = new List <string>();

            try
            {
                Guid   myGUID   = System.Guid.Empty;
                IntPtr hDevInfo = Native.SetupDiGetClassDevs(ref myGUID, 0, IntPtr.Zero, Native.DIGCF_ALLCLASSES | Native.DIGCF_PRESENT);
                if (hDevInfo.ToInt32() == Native.INVALID_HANDLE_VALUE)
                {
                    throw new Exception("Invalid Handle");
                }
                Native.SP_DEVINFO_DATA DeviceInfoData;
                DeviceInfoData        = new Native.SP_DEVINFO_DATA();
                DeviceInfoData.cbSize = Marshal.SizeOf(DeviceInfoData);                 // JDA 28;
                //is devices exist for class
                DeviceInfoData.devInst   = 0;
                DeviceInfoData.classGuid = System.Guid.Empty;
                DeviceInfoData.reserved  = 0;
                UInt32        i;
                StringBuilder DeviceName = new StringBuilder("");
                DeviceName.Capacity = Native.MAX_DEV_LEN;

                if (!Native.SetupDiEnumDeviceInfo(hDevInfo, 0, DeviceInfoData))
                {
                    throw new Exception("No device found, are you kidding? " + Native.GetLastError());
                }

                for (i = 0; Native.SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData); i++)
                {
                    //Declare vars
                    while (!Native.SetupDiGetDeviceRegistryProperty(hDevInfo,
                                                                    DeviceInfoData,
                                                                    Native.SPDRP_DEVICEDESC,
                                                                    0,
                                                                    DeviceName,
                                                                    Native.MAX_DEV_LEN,
                                                                    IntPtr.Zero))
                    {
                        //Skip
                    }
                    HWList.Add(DeviceName.ToString());
                }
                HWList.Sort();
                Native.SetupDiDestroyDeviceInfoList(hDevInfo);
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to enumerate device tree!", ex);
            }
            return(HWList.ToArray());
        }
Exemplo n.º 2
0
        private bool ActionOnDevice(string deviceName, DeviceAction action)
        {
            bool bFound = false;

            Guid   myGUID   = System.Guid.Empty;
            IntPtr hDevInfo = Native.SetupDiGetClassDevs(ref myGUID, 0, IntPtr.Zero, Native.DIGCF_ALLCLASSES | Native.DIGCF_PRESENT);

            if (hDevInfo.ToInt32() == Native.INVALID_HANDLE_VALUE)
            {
                throw new Exception("Failed to open the device manager");
                return(false);
            }
            Native.SP_DEVINFO_DATA DeviceInfoData;
            DeviceInfoData        = new Native.SP_DEVINFO_DATA();
            DeviceInfoData.cbSize = Marshal.SizeOf(DeviceInfoData);             // JDA 28;
            //is devices exist for class
            DeviceInfoData.devInst   = 0;
            DeviceInfoData.classGuid = System.Guid.Empty;
            DeviceInfoData.reserved  = 0;
            UInt32        i;
            StringBuilder DeviceName = new StringBuilder("");

            DeviceName.Capacity = Native.MAX_DEV_LEN;
            for (i = 0; Native.SetupDiEnumDeviceInfo(hDevInfo, i, DeviceInfoData); i++)
            {
                //Declare vars
                while (!Native.SetupDiGetDeviceRegistryProperty(hDevInfo, DeviceInfoData, Native.SPDRP_DEVICEDESC, 0, DeviceName, Native.MAX_DEV_LEN, IntPtr.Zero))
                {
                    //Skip
                }
                if (DeviceName.ToString().ToLower().Contains(deviceName.ToLower()))
                {
                    bFound = true;

                    switch (action)
                    {
                    case DeviceAction.Disable:
                        if (!EnableOrDisableDevice(hDevInfo, DeviceInfoData, false))
                        {
                            throw new Exception("Failed to disable the device");
                        }
                        break;

                    case DeviceAction.Enable:
                        if (!EnableOrDisableDevice(hDevInfo, DeviceInfoData, true))
                        {
                            throw new Exception("Failed to enable the device");
                        }
                        break;

                    case DeviceAction.Reset:
                        if (!RestartDevice(hDevInfo, DeviceInfoData))
                        {
                            throw new Exception("Failed to reset the device");
                        }
                        break;

                    default:
                        throw new Exception("Invalid action.");
                    }
                    break;
                }
            }
            Native.SetupDiDestroyDeviceInfoList(hDevInfo);

            if (!bFound)
            {
                throw new Exception("Device not found");
            }

            return(true);
        }