Enable s3 for usb device что это за программа

Подключение флешек и прочих USB-устройств к виртуальным машинам VMware Workstation

Одной из лучших программ для работы с виртуальными машинами – эмуляторами компьютеров в средах реальных компьютеров – является VMware Workstation , гипервизор для Windows. Эта программа позволяет не только исследовать возможности установленных на виртуальные машины операционных систем, но также изучить взаимодействие последних с эмулируемым аппаратным обеспечением. Взаимодействие с эмулируемым аппаратным обеспечением и реальными периферийными устройствами: одна из возможностей машин VMware.

Это работа с подключаемыми USB -устройствами. Как подключаются к машине VMware флешки и прочие USB-носители? И как, в частности, происходит загрузка машин с них?

Настройки совместимости USB

При работе с подключением к виртуальной машине USB -устройств важно, чтобы были верно выставлены настройки USB -контроллера. Открываем эти настройки при выключенной машине.

VMware Workstation

Почему компьютер не видит телефон через USB, но заряжается!!!

И смотрим графу совместимости USB: в ней на современных компьютерах необходимо выставить совместимость USB 3.0 , если это не сделано по умолчанию.

Оборудование

Подключение USB-устройств информации

Подключать USB -носитель необходимо при работающей машине. Если это флешка или USB-HDD , внизу окна VMware Workstation, на панели состояния жмём значок носителя данных и жмём «Connect (Disconnect from Host)».

Connect

Подключение USB -носителя подтверждаем в окошке, где VMware нас информирует о том, что флешка или USB-HDD будут безопасно отключены от хост-системы (т.е. установленной на компьютере Windows) и подключены к виртуальной машине. Жмём «Ок».

USB device

Другие типы USB -устройств – SD -карты в картридере, соединённые с компьютером смартфоны, планшеты и т.п. — подключаются по точно такому же принципу, только с использованием иного значка на панели состояния.

Connect from Host

И после подключения USB -устройства можем искать его в проводнике установленной на виртуальную машину Windows.

USB

Для отключения USB -устройства от виртуальной машины проделываем точно такое же действие – кликаем значок на панели состояния и жмём «Connect (Disconnect from Host)».

Машины VMware предусматривают альтернативный способ подключения/отключения USB -устройств – через меню «Виртуальная машина – Съёмные устройства». Здесь будет виден перечень USB -устройств, которые могут быть подключены к машине, по их названиям.

Устройство USB не опознано в Windows?

Съемные устройства

Подключение USB-периферии

Помимо подключения USB -устройств информации, виртуальные машины VMware позволяют управлять подключением прочих USB -устройств, периферийных устройств. Их отображение по умолчанию отключено. Включается в упомянутых выше настройках USB -контроллера машины путём выставления активной галочки «Показать все USB-устройства ввода».

Показать все USB-устройства ввода

И тогда и на панели состояния внизу окна машины, и в меню увидим все периферийные USB -устройства – клавиатуры, мыши, колонки, геймпады и т.п. Увидим и, соответственно, сможем их подключать/отключать опцией «Connect (Disconnect from Host)».

USB устройства

Загрузка с флешек машин на базе UEFI

А как загрузить виртуальную машину с флешки или USB-HDD? Если это машина, созданная на базе типа микропрограммы UEFI , т.е. с эмуляцией BIOS UEFI , всё достаточно просто. Запускаем машину в режиме BIOS .

Запускаем машину в режиме BIOS

Подключаем загрузочную флешку. В самом BIOS выбираем пункт «Reset the system» и далее активно нажимаем клавишу F2 , чтобы после перезагрузки попасть снова в BIOS .

BIOS

Снова попав в BIOS , выбираем пункт «EFI USB Device».

EFI USB Device

Загрузка с флешек машин на базе обычной BIOS

Запуск виртуальной машины с загрузочных флешек и USB-HDD , если для такой машины выбран тип микропрограммы – обычная BIOS , возможно, некоторым покажется сложноватым. Обычная BIOS не предусматривает пункта загрузки с USB -устройств. Обойти это ограничение можно путём подключения флешки или USB-HDD как внутреннего жёсткого диска виртуальной машины. Как это сделать? Открываем настройки жёсткого диска машины.

Настройки жёсткого диска

Жмём «Добавить».

Добавить

Кликаем «Жёсткий диск», тип диска выбираем SCSI .

Тип диска

На этапе выбора диска указываем, что мы хотим использовать физический диск. При выборе такового из выпадающего перечня графы «Устройство» выбираем флешку или USB-HDD. Но они будут значиться как устройства типа PhysicalDrive0 , PhysicalDrive1 , PhysicalDrive3 . Чтобы понять, какое из устройств типа PhysicalDrive№ является нужной флешкой или USB-HDD, выбираем в графе «Использование» пункт «Использовать отдельные разделы».

Использование

И по наличию разделов и ёмкости носителя, определяем, тот ли это, что нам нужен. Определяем и кнопкой «Назад» возвращаемся на этап выбора диска. В итоге указываем нужный диск типа PhysicalDrive№ и в графе «Использование» ставим уже пункт «Использовать весь диск».

Использование

Жмём «Готово».

Файл диска

Закрываем настройки машины и входим в BIOS (так же, как и в BIOS UEFI) . Переключаемся на вкладку «Boot». Кнопкой-плюсом выдвигаем пункт загрузки «Hard Drive» на первое место. Затем клавишей Enter раскрываем его перечень устройств и в этом перечне кнопкой-плюсом на первую позицию выдвигаем диск «WMware Virtual SCSI Hard Drive (0:1)».

Если к машине ранее было подключено два виртуальных диска, то тогда новый диск на базе физического будет значиться как «WMware Virtual SCSI Hard Drive (0:2)». Ну и так дальше по порядку, если виртуальных дисков у машины больше. В итоге жмём клавишу F10 для сохранения настроек BIOS и выхода.

Источник: www.white-windows.ru

Attempting boot from usb device что делать

При попытке установить операционную систему с флеш-накопителя пользователь может столкнуться с появлением на экране надписи «Start booting from USB device…», после чего система зависает и далее ничего не происходит. Обычно это связано с ситуацией, когда загрузочная флешка с операционной системой не была корректно создана пользователем, потому система испытывает проблемы в установке новой версии ОС с данного устройства. В данном материале я расскажу, в чём суть проблемы «Start booting from USB device», каковы её причины, и как исправить появление надписи на вашем ПК.

Экран с застывшей надписью «Start booting from USB device…» выглядит примерно так

Почему появляется данная дисфункция?

В переводе данный текст звучит как «Начало загрузки с устройства USB…», обычно появляясь при загрузке установочной версии ОС Windows с ЮСБ-устройства.

Причинами «зависания» надписи «Start booting from USB device» обычно являются некорректно созданная установочная флешка, а также неверно указанные настройки в БИОСе пользовательского ПК.

Причиной дисфункции может выступать некорректно созданная установочная флешка

Как исправить «Start booting from USB device»

Для устранения ошибки «Start booting from USB device» рекомендую выполнить следующее:

  • Проверьте, загрузочное ли ваше ЮСБ-устройство. Для этого рекомендую использовать программный инструмент «MobaLiveCD», который проверит загрузочный статус вашей флешки. Данная программа не требует установки, работает сразу после запуска, довольно легка и удобна в использовании.

Способ 1.Для работы с «MobaLiveCD» скачайте и запустите данную программу с правами администратора. На главном экране кликните на кнопку «Run the Live USB», укажите программе путь к вашей флешке. Если программа спросит вас «Do you want to create a hard disk image for your virtual machine?» — выберите «No». Программа произведёт эмуляцию запуска системы с вашей флешки, и вы воочию увидите результат.

Читайте также:
Впс офис что это за программа

Работаем с с «MobaLiveCD»

Для выхода с программы нажмите клавиши Ctrl+Alt.

  • Проверьте, поддерживает ли ваш компьютер загрузку с USB. Далеко не все ПК поддерживают данную функцию (особенно это касается устаревших версий материнских плат), потому вам необходимо или просмотреть характеристики вашей материнской платы относительно поддержки ею загрузки с ЮСБ, или непосредственно перейти в БИОС и просмотреть, имеется ли в нём соответствующая опция;
  • Настройте ваш ПК для загрузки с флеш-накопителя. Перейдите в БИОС и установите там соответствующие опции, в частности, в последовательности загрузочных дисков установите флеш-накопитель первым для загрузки;

Выбираем флеш-накопитель первоочередным устройством для загрузки

Чтобы проверить файловую систему вашей флешки подключите её к компьютеру, в проводнике кликните на флеш-накопителе правой клавишей мыши, в появившемся меню выберите «Свойства».

  • Попробуйте изменить значение некоторых параметров БИОСа. Перейдите в ваш БИОС, и поменяйте значение опции «Legacy» с «Enabled» на «Disabled» (или наоборот). Сохраните настройки, перезагрузите компьютер, и попробуйте вновь установить систему с флеш-накопителя;

Способ 2. Если предыдущий способ не помог исправить Start booting from USB device, попробуйте выполнить следующее. Перейдите в БИОС, во вкладке «Boot» установите значение параметра «Secure Boot» на «Disabled» (если появится предупреждение, смело жмите на «Ок»). Появится дополнительная опция «ОS Mode Selection», выберите здесь «UEFI and Legacy OS» (если появится предупреждение, тогда вновь нажимаем на «ОК»). Вновь жмём на F10, затем на «Yes», дожидаемся перезагрузки ноутбука.

Затем вновь переходим в БИОС, во вкладке «Boot» выбираем опцию «Boot device priority», в первом пункте выбираем нашу флешку как загрузочное устройство. Вновь жмём на F10 и «Yes». Перезагружаем наш ПК и пробуем загрузиться с нашего флеш-накопителя.

    Для создания загрузочной флешки используйте зарекомендовавший себя софт (например, Rufus).

Для записи образов на USB используйте программу «Rufus»

Заключение

Проблема с «Start booting from USB device» может быть вызвана рядом причин, начиная от неправильной настройки БИОСа, и заканчивая некорректным созданием загрузочной флешки. Для избавления от ошибки Start booting from USB device» рекомендую воспользоваться приведёнными выше советами, это позволит провести нормальную инсталляцию Виндовс с помощью флеш-накопителя на вашем ПК.

Установка Windows при помощи дистрибутива, записанного на съемные носители в виде USB-флешек, обычно проблем не вызывает даже у самого неподготовленного пользователя. Однако иногда можно встретить ситуации, когда на экране появляется сообщение о том, что загрузка вроде бы стартует, но через некоторое время выдается уведомление о невозможности выполнения такого действия (Boot Failed). При загрузке с флешки такая ситуация может возникать по нескольким причинам. Что это за причины, и каковы основные методы устранения сбоев подобного рода, читайте далее.

Boot Failed при загрузке с флешки: в чем причина появления сбоя?

Причин, вызывающих невозможность старта загрузчика, может быть достаточно много, но в основном сбои при попытке загрузки со съемного накопителя происходят по вине того, что:

  • флешка содержит неподдерживаемую файловую систему;
  • в настройках первичной системы указан некорректный тип загрузки;
  • накопитель поврежден;
  • на носителе повреждены или отсутствуют необходимые для загрузки файлы.

Вирусы в расчет не берем, поскольку на загрузку с носителя они, как правило, не оказывают никакого действия, если только они уже не обосновались на флешке и не оказали на нее пагубного воздействия.

Ошибка Boot Failed: проблема неправильного форматирования носителя

Итак, основной проблемой возникновения сбоев при старте со съемных накопителей считается неправильно выполненное предварительное форматирование, когда пользователь создавал носитель самостоятельно (например, с использованием инструментария командной строки), а не в какой-то автоматизированной программе. Если у вас появляется ошибка Boot Failed при загрузке с флешки, необходимо обратить внимание на ее формат.

Важно понимать, что в случае наличия на компьютере или ноутбуке первичной системы UEFI носитель в обязательном порядке должен быть отформатирован в FAT32, и использовать файловую структуру NTFS нельзя ни под каким предлогом. Точно так же и наоборот. Если у вас есть дистрибутив с 64-битной Windows 7, загрузку с флешки для первичной системы BIOS желательно производить с файловой системой NTFS.

Изменение параметров первичной системы ввода/вывода

Впрочем, не исключается и то, что в самой первичной системе некоторые важные параметры, влияющие на распознавание съемного устройства и старт с использованием загрузчика, который на нем записан, установлены неправильно. Чаще всего ошибка Boot Failed при загрузке с флешки появляется именно при использовании первичных систем BIOS, в которых некорректно выставлен режим загрузки (Boot). Его следует попытаться изменить.

Если старт не происходит в режиме UEFI, смените его на Legacy и наоборот. По завершении действий с настройками не забудьте выставить флешку первой в списке используемых для загрузки устройств и сохранить измененные опции при выходе.

Некорректно созданный или поврежденный носитель

Вполне возможно, что старт со съемного устройства оказывается невозможным только из-за того, что присутствующие на носителе файлы повреждены.

В такой ситуации наилучшим решением станет повторная запись информации на накопитель, но использовать для этого лучше всего автоматизированную утилиту Rufus, которая при выборе пользователем записываемого образа с дистрибутивом или средой восстановления определит требуемый тип форматирования.

Кроме того, совершенно естественно выглядит ситуация, когда и сама флешка может быть банально повреждена или оказаться нерабочей. Перед записью и использованием носитель необходимо проверить в работающей системе, а при выявлении проблем произвести, например, восстановление работы контроллеров, используя для этого утилиты от производителя устройства или универсальные программы наподобие D-Soft Flash Doctor. Если даже с их применением результат окажется нулевым, в качестве кардинальной меры можете выполнить низкоуровневое форматирование, которое позволит привести носитель, так сказать, в заводское состояние.

Для выполнения таких операций максимально эффективной оказывается программа HDD LLFT, в которой процесс форматирования занимает всего лишь пару минут.

Другие причины

Это были основные проблемы, которые можно встретить при попытке старта со съемного носителя. Однако не стоит забывать и о самих файлах образов, которые вы пытаетесь записать на флешку. В случае загрузки их с неофициальных ресурсов в Интернете или при использовании каких-то кастомных сборок часто можно наблюдать отсутствие некоторых важных компонентов, отвечающих за корректный запуск загрузчика. В этом случае при загрузке будет сообщено, что компонент не найден. Поэтому скачивайте файлы только из проверенных источников, но даже загруженные объекты иногда не помешает просканировать на предмет наличия потенциальных угроз.

Примечание: если в первичной системе активирована функция безопасной загрузки (Secure Boot), иногда ее бывает необходимо отключить (если это возможно).

Start booting from usb device

Автор Ѐита Прокудина задал вопрос в разделе Другие языки и технологии

хочу установить windows 7 с флешки но что-то не идет. при установки windows 7 пишет start booting from USB device и получил лучший ответ

Ответ от Итиро[гуру]

1) Открываем образ Windows программой UltraISO, заходим в меню Самозагрузка — Записать образ Жесткого диска.
2) Вставляем флешку в USB-порт (она должна появиться вверху) . Выбираем ее. Выбираем в пункте Метод записи USB-HDD и жмем Записать.
3) Выскакивает предупреждение об уничтожении информации, жмем Да. Ждем, когда завершится запись (от 5 до 20 минут) .
4) Заходим в BIOS со вставленной флешкой и ставим загрузку в первую очередь с USB-HDD.
5) Если все сделали правильно, то после рестарта компьютера, если вставлена флешка с записанным образом, загрузка пойдет с нее безусловно, то есть без фразы «Press any key to boot from. «.
6) Сама по себе установка мало чем отличается от установки с загрузочного DVD-диска, но есть один момент. Когда завершится копирование и распаковка файлов, и компьютер в первый раз пойдет на перезагрузку, нужно снова идти в BIOS и ставить обратно приоритет загрузки (по умолчанию с жесткого диска) или вытащить флешку. Иначе, возможно, загрузка снова пойдет с флешки.

Читайте также:
Mi пульт что это за программа на Андроид

Источник: soo-voi.ru

Решение ошибок в MiFlash

Решение ошибок в MiFlash

MIUI ROM Flashing Tool – это программа, с помощью которой можно прошить телефон Xiaomi, используя режим Fastboot. Утилита довольно проста в использовании, но в ней часто возникают неполадки, которые мешают корректно перепрошить смартфон. В статье мы рассмотрим все известные ошибки MiFlash и выясним, как их решить.

Популярные причины возникновения ошибок

Для того чтобы прошивка на смартфон или планшет Xiaomi установилась нормально — нужно выполнить большое количество подготовительных действий. Но даже при их выполнении, это не избавит вас от банальных причин в работе Ми Флэш. Вот список общих советов:

  • Отсутствие необходимых драйверов. Нужно самостоятельно поставить драйвера, если они не установились автоматически после первого подключения смартфона к компьютеру по USB. Инструкция есть в нашем видео.
  • Старая версия программы. Старайтесь всегда выбирать самую свежую сборку МиФлеш.
  • Неподходящая прошивка. Загружайте только ту версию MIUI, которая подходит под вашу модель. Например, владельцу Redmi 8 не подойдет сборка для Redmi 8A. Также обращайте внимание на архив, который скачиваете: у него должно быть расширение .tgz.
  • Mi-аккаунт не был авторизован. Не рекомендуется работать с MiFlash без авторизации учетной записи Xiaomi. Подробности мы описывали в отдельной статье.
  • Поврежденный файл прошивки (один или несколько). Такое случается, если архив загружался с подозрительного источника или он был неправильно распакован.
  • Русские буквы в названии папки или файла. На пути к прошивке не должна встречаться кириллица. Допускаются только латинские символы.
  • Телефон подключен к ПК через порт USB 3.0. Используйте разъем USB 2.0 и кабель, который шел в комплекте с мобильным устройством.

Полная инструкция по прошивке через Fastboot есть здесь.

Известные ошибки MiFlash и их решение

Теперь рассмотрим конкретные ошибки, которые может выдавать Xiaomi Flashing Tool. Подробнее о самой программе.

Ошибка: Reached the end of the file (0x80070026).
Решение: Если программа показывает, что достигнут конец файла, установите более новую версию MiFlash. Также можно попробовать использовать Pro версию.

Ошибка: Cannot receive hello packet.
Решение: Ошибка может обозначаться как «Не удается получить пакет приветствия» или «Try to reset status». Чаще всего помогает переключение кабеля в другой разъем, либо использование другого компьютера. Проблема часто появляется на Windows 7 и 8/8.1.

Ошибка: The specified file can not be found (0x80070002).
Решение: Неполадка «Не удается найти указанный файл» означает, что утилита не может отыскать определенный файл (чаще всего это flash_all.bat). Повторно загрузите архив с прошивкой или самостоятельно найдите недостающий файл. Если проблема повторяется — попробуйте переустановить папку с программой.

Ошибка: Unspecified error (0xffffffff).
Решение: При надписи «Undefined error» нужно самостоятельно указать путь к файлу flash_all.bat. После этого неопознанная ошибка пропадет.

Ошибка: 0x8007007b.
Решение: Путь к файлу содержит кириллицу, либо в названии самого файла есть русские буквы. Переименуйте все в латиницу. Также проверьте чтобы все файлы для прошивки находились на системной диске (чаще всего это диск С).

Ошибка: Mismatching image and device.
Решение: Вы скачали прошивку, которая не предназначена для вашего устройства. Повторно загрузите подходящую версию.

Ошибка: Заданное приведение является недопустимым.
Решение: Скачайте предыдущую версию Miflash Flashing Tool.

Ошибка: 0x80004005 FAILED (remote: unknown command).
Решение: Загрузите версию оболочки, которая подходит для вашей модели смартфона, чтобы избавиться от неполадки «remote: data too large».

Ошибка: Недостаточно ресурсов памяти для завершения операции (0x8007000e).
Решение: Используйте компьютер с большим количеством оперативной памяти, либо попробуйте поставить прошивку через TWRP Recovery.

Ошибка: Длина не может быть меньше нуля.
Решение: Отключите цифровую подпись драйверов и подключите кабель в порт USB 2.0. Как это сделать читайте в наших статьях о подключении телефона к компьютеру.

Ошибка: Failed Remote: Partition Flashing Is Not Allowed
Решение: Строка «critical partition flashing is not allowed» означает, что загрузчик заблокирован. Попробуйте прошить телефон через режим EDL, или активируйте бутлоадер.

Ошибка: Flash crclist error.
Решение: Неполадка возникает при неправильной распаковке архива. Выберите другой архиватор, и поместите файлы в папку с коротким названием. Используйте бесплатный вариант — 7-Zip.

Ошибка: Can not found file flash_all.bat.
Решение: Отсутствует необходимый файл для прошивки под названием flash_all.bat. Зайдите в настройки MiFlash, перейдите в пункт «Advanced» и укажите файл xxx.bat.

Ошибка: Can not found file flash_all_lock.bat.
Решение: Попробуйте проделать такие же действия, как и в вышеописанной ошибке. Если не помогло – убедитесь, что архив полностью распакован и файлы находятся на системном диске.

Ошибка: Несоответствие изображения и ошибки устройства.
Решение: Повторно подключите смартфон к компьютеру, используя порт ЮСБ 2.0. Не забывайте, что сначала нужно перевести смартфон в режим Фастбут, а потом уже синхронизироваться с ПК.

Ошибка: В экземпляре объекта не задана ссылка на объект.
Решение: Проблема «Ссылка на объект не указывает на экземпляр объекта» чаще всего возникает на 32-битной версии Windows. Желательно использовать 64 bit. Если смена разрядности не помогла, проверьте, чтобы на пути к прошивке не встречалось русских букв, а кабель был подключен к разъему USB 2.0.

Ошибка: Couldn’t find flash script.
Решение: Укажите правильную папку с прошивкой, а именно «images».

Ошибка: ERROR: Время ожидания операции записи истекло.
Решение: Неполадка возникает из-за отсутствия драйверов. Посмотрите наше видео и самостоятельно поставьте необходимые драйвера. Если утилита не видит прошивку, перепроверьте названия папок и файлов. Не забудьте повторно перезапустить ПК.

Ошибка: Синтаксическая ошибка в имени файла.
Решение: MiFlash выдает такую ошибку при установке прошивки, которая предназначена для рекавери или «три точки». Найдите сборку для Fastboot с расширением tgz на сайте Mi Community в разделе Download ROM. Также причиной может стать кириллица в названии файла/папки.

Ошибка: ACK count don’t match.
Решение: Скачайте подходящий архив с прошивкой для вашей модели. Также проверьте, чтобы в архиве не было лишних папок, наподобие «META-INF». Должна быть только папка «images» и файлы с расширением .bat.

Ошибка: Flash TZ error.
Решение: Обычно ошибка появляется при использовании китайской прошивки. Выберите Global ROM и убедитесь, что загрузчик разблокирован.

Ошибка: You are not authorized to download Mi Flash.
Решение: Проблема указывает на то, что вы не авторизованы для работы в Ми Флэш. Нужно пройти EDL Authentication.

Ошибка: Flash Partition Error.
Решение: Разблокируйте загрузчик и при прошивке НЕ выставляйте опцию «Clean all and lock».

Ошибка: Not catch checkpoint.
Решение: Проигнорируйте данную неполадку и попробуйте перепрошиться через TestPoint.

Ошибка: Необрабатываемое исключение в приложении.
Решение: Ошибка может возникать при неправильной установке драйверов. Удалите программу, повторно загрузите все нужные файлы и повторите попытку. Только обратите внимание, что это не дает точной гарантии, что проблема исчезнет. Так как есть множество других факторов, которые могут влиять на прошивку, и их нельзя предугадать.

Ошибка: Can not read from port com.
Решение: Подключите мобильное устройство в разъем USB 2.0. Если оболочка не устанавливается – замкните контакты ТестПоинт.

Ошибка: Ping target via firehose.
Решение: Конкретных решений для устранения данной неполадки нет. Помогут универсальные способы, такие как переустановка Ми Флеш и повторное скачивание сборки.

Читайте также:
Программа виндовс 7 максимальная что это

Ошибка: Разрушительный сбой.
Решение: При возникновении данной ошибки воспользуйтесь универсальными методами. Проверьте, подходит ли скачанная прошивка для установки через Фастбут, и ориентирована ли она на вашу модель телефона. Отключите проверку подписи драйверов и вручную поставьте ADB-драйвера, если они не загрузились автоматически. Попробуйте более старую/новую версию MiFlash. Такие комбинации обычно помогают, если процесс прошивки прерывается, или программа вообще не видит телефон.

Ошибка: Требуемый ресурс занят (0x800700aa).
Решение: Также прибегните к универсальным вариантам.

Ошибка: Can not found programmer file.
Решение: Скачайте с официального источника прошивку, которая подходит для Fastboot.

Ошибка: Flash xbl error.
Решение: Попробуйте универсальные советы. Также проверьте: правильность выбранной прошивки; разблокированный загрузчик; текущую версию MIUI (возможно стоит сторонняя сборка); допущена ошибка при скачивании архива с прошивкой или он распакован неправильно; проблема с ARB.

Если вы нашли дополнительное решения для конкретной ошибки — напишите об этом, помогите другим пользователям!

Вы можете дополнить список ошибок и их решений. Напишите об этом в комментариях!

Источник: mi-faq.ru

Игрища с USB в Windows (отслеживаем и контролируем)

Не так давно появилась задача — каким-то образом отслеживать появление новых USB-флешек в Windows, а также их исчезновение. В идеале также неплохо было бы иметь возможность манипулировать безопасным извлечением. Казалось бы, что все просто — ведь Windows имеет средства для оповещения приложений о вставляемых и вытаскиваемых флешках на уровне пользователя, но на деле оказалось, что тонкостей в этом вопросе очень много.

Итак, в статье я расскажу, как:
[+] отследить появление новой флешки или USB-диска в системе (даже если это хитрожопая флешка, которая монтируется как CD-ROM+Flash, например, или флешка, разбитая на пару дисков)
[+] отслеживать безопасное извлечение флешек и манипулировать им
[+] самому безопасно извлечь любой извлекаемый USB-девайс по букве его диска
[+] отследить прочие события, а именно небезопасное извлечение флешки и отказ в безопасном извлечении

Само-собой, никаких драйверов, только уровень пользователя! Я также поделюсь с вами исходником класса на C++, который реализует все вышеописанные задачи. Давно я не писал годных толстых статей.

Надеюсь, вы приготовились погрузиться в недра WinAPI. Начнем с теории. В Windows существуют специальные события, которые система посылает, когда пользователь вставляет какой-либо USB-девайс в свой компьютер или вытаскивает его. Это DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE. Оба эти ивента шлются через сообщение WM_DEVICECHANGE.

Есть и другие полезные события, но о них позже. Казалось бы, все хорошо, и мы с помощью этих событий сразу имеем букву диска, на которую смонтировалось устройство (если это флешка или внешний жесткий диск).

Но на самом деле все не так радужно. Представим такую ситуацию: пользователь вставляет в компьютер новомодную флешку, которая монтируется как CD-ROM, содержащий сопутствующее ПО для нее, и как непосредственно флеш-диск. Через DBT_DEVICEARRIVAL действительно придет сообщение о добавлении двух дисков в систему.

Однако, если пользователь вытащит флешку с помощью функции безопасного извлечения устройств, мы узнаем через ивент DBT_DEVICEREMOVECOMPLETE только о том, что был извлечен один из этих двух дисков. Такая ситуация стабильно проявляется как минимум на Windows 7. Я нашел путь, который позволяет стопроцентно определить, какие устройства добавились или удалились из системы — при получении DBT_DEVICEARRIVAL или DBT_DEVICEREMOVECOMPLETE достаточно перечислить все установленные в системе диски, найти среди них USB-девайсы и сравнить полученный список с предыдущим состоянием до прихода события. Возможно, это не очень оптимально, зато мы точно узнаем, какие USB-устройства были примонтированы и удалены из системы.

Что ж, переходим к более сложной части — работа с безопасным извлечением устройств. Представим, что мы читаем какой-то файл с флешки или пишем его. И тут пользователь запросил безопасное извлечение. Если мы тут же не закроем все хендлы и не завершим дисковые операции, система скажет пользователю, что диск занят. Как обработать эту ситуацию корректно?

Казалось бы, все просто — есть же событие DBT_DEVICEQUERYREMOVE. Все верно, это то, что нам нужно. Только вот оно не отсылается системой по умолчанию, как я понял. Как быть? На просторах интернета было найдено решение: необходимо открыть замонтированный диск с помощью функции CreateFile (с флагом FILE_FLAG_BACKUP_SEMANTICS) и держать его открытым.

Далее необходимо зарегистрировать оповещение о событии безопасного извлечения с помощью RegisterDeviceNotification с типом DBT_DEVTYP_HANDLE (регистрируем по хэндлу устройства, который получили из предыдущего вызова). После этого система начнет слать нам событие DBT_DEVICEQUERYREMOVE с типом (dbch_devicetype) DBT_DEVTYP_HANDLE. Теперь мы сможем определить, какое из подконтрольных нам устройств пользователь хочет безопасно извлечь, и даже вмешаться в этот процесс. Делается это достаточно просто — если мы не хотим позволять системе делать безопасное извлечение устройства, достаточно из обработчика DBT_DEVICEQUERYREMOVE вернуть значение BROADCAST_QUERY_DENY, а если хотим — то TRUE, не забыв при этом снять регистрацию ивента с помощью UnregisterDeviceNotification и закрыть с помощью CloseHandle хендл устройства. Во время обработки ивента DBT_DEVICEQUERYREMOVE мы можем по-быстрому закрыть все прочие хендлы, если наша программа в этот момент использует флешку, завершить все операции записи/чтения.

Но тут есть еще одна тонкость — на эти операции система дает нам ограниченное время. Таймаут примерно 10-15 секунд (в Win 7 меньше, в XP больше). Если мы не успели вернуть из обработчика DBT_DEVICEQUERYREMOVE ничего, то система просто выдаст пользователю сообщение о том, что устройство занято и не может быть извлечено.

Даже если мы вернем TRUE после этого, это ни на что не повлияет — устройство так и останется неизвлеченным. Однако, с этой проблемой тоже можно бороться. Ничто не мешает нам определить, прошел ли таймаут ожидания ответа на событие, и если прошел, то принудительно демонтировать устройство после того, как мы реально закончим с ним работать. Это, конечно, не спасет от назойливой таблички с сообщением о занятости флешки, но первоначальное желание пользователя будет выполнено, так как устройство в конечном счете будет извлечено. Разумеется, не стоит слишком много времени тратить на работу с флешкой после того, как пользователь пожелал ее извлечь, иначе он просто выдернет ее из компьютера, а это не то, чего мы хотим.

Вы еще можете спросить, что произойдет, если пользователь захочет безопасно извлечь флешку, разбитую на два или более логических диска. Ответ прост: DBT_DEVICEQUERYREMOVE будет вызван два или более раз, для каждого раздела. Если мы не освободим хотя бы один, то и безопасное извлечение обломится.

Основные моменты я рассмотрел, но есть еще один. Все вышеперечисленные события работают только для приложений, у которых есть окно верхнего уровня. Сделать такое окно для любого приложения, в общем-то, не проблема. Но что, если мы разрабатываем службу Windows?

Здесь все просто — необходимо зарегистрировать оповещения о событиях устройств с помощью уже упомянутой функции RegisterDeviceNotification с флагом DEVICE_NOTIFY_SERVICE_HANDLE. В этом случае все ивенты мы сможем обрабатывать внутри своего ServiceCtrlHandler’а (SERVICE_CONTROL_DEVICEEVENT). Код для этого я не писал, но разобраться проблемы не будет, так как никаких отличий в начинке этого кода по сути нет.

Теперь перейдем к самому коду. Если кратко: класс usb_monitor, который я написал в результате всех этих исследований, позволяет отслеживать установку-вытаскивание флешки, нормально работает с любыми флеш-дисками, позволяет манипулировать безопасным отключением устройств. Используется немного буста для реализации коллбеков. Класс еще можно совершенствовать и улучшать, но он уже хорошо справляется со своими задачами. Рассмотрим сначала интерфейс класса (usb_monitor.h):

Источник: kaimi.io

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru