Пример #1
0
        /// <summary>
        /// This method scans the current machine for all CDROM devices found in the system.
        /// </summary>
        public void ScanForDevices()
        {
            if (BeforeScan != null)
            {
                DeviceManagerRescanArgs args = new DeviceManagerRescanArgs();
                BeforeScan(this, args);
            }

            m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, 0, "Scanning for devices ... ")) ;

            OperatingSystem os = Environment.OSVersion;
            m_logger.LogMessage(new UserMessage(UserMessage.Category.Info, 0, "Operating System: " + os.ToString()));
            m_logger.LogMessage(new UserMessage(UserMessage.Category.Info, 0, "Platform: " + os.Platform.ToString()));

            int ossize = 32 ;
            if (IntPtr.Size == 8)
                ossize = 64 ;

            m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, 0, "OS Word Size: " + ossize.ToString())) ;

            m_devices_found.Clear();
            for (int i = 0; i < 100; i++)
            {
                uint dlev = (uint)((i > 5) ? 9 : 8);
                string name = "\\\\.\\CDROM" + i.ToString();

                m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, dlev, "Checking device " + name + " ... "));

                Device dev = new Device(m_logger) ;
                if (!dev.Open(name))
                {
                    m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, dlev, "  ... device open failed"));
                    continue ;
                }

                string letter = GetLetterFromDeviceName(name);

                DeviceInfo info = DeviceInfo.CreateDevice(name, letter);
                if (!info.ExtractInfo(dev))
                {
                    m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, dlev, "  ... cannot extract inquiry information from the drive"));

                    string str = "The drive '" + letter + "' (" + name + ") is a CD/DVD driver, but is not a valid MMC device.";
                    m_logger.LogMessage(new UserMessage(UserMessage.Category.Error, 0, str));
                    str = "This drive is not supported by BwgBurn and is probably an older device.";
                    m_logger.LogMessage(new UserMessage(UserMessage.Category.Error, 0, str));
                    continue;
                }

                m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, dlev, "  ... device added to device list"));
                m_devices_found.Add(info) ;
                dev.Close() ;
            }

            if (AfterScan != null)
            {
                DeviceManagerRescanArgs args = new DeviceManagerRescanArgs();
                AfterScan(this, args);
            }

            string devlist = string.Empty;
            foreach (DeviceInfo info in m_devices_found)
            {
                if (devlist.Length > 0)
                    devlist += ", ";
                devlist += info.ShortDesc;
            }
            m_logger.LogMessage(new UserMessage(UserMessage.Category.Debug, 0, "Found devices ... " + devlist));

            foreach (DeviceInfo info in m_devices_found)
            {
                UserMessage m = new UserMessage(UserMessage.Category.Debug, 6, "Found Device: " + info.DeviceLetter) ;
                m_logger.LogMessage(m);

                m = new UserMessage(UserMessage.Category.Debug, 6, "    NT Name = " + info.DeviceName);
                m_logger.LogMessage(m);

                m = new UserMessage(UserMessage.Category.Debug, 6, "    Vendor = " + info.InquiryData.VendorIdentification.Trim());
                m_logger.LogMessage(m);

                m = new UserMessage(UserMessage.Category.Debug, 6, "    Product = " + info.InquiryData.ProductIdentification.Trim());
                m_logger.LogMessage(m);

                m = new UserMessage(UserMessage.Category.Debug, 6, "    Revision = " + info.InquiryData.ProductRevision.Trim());
                m_logger.LogMessage(m);
            }
        }