Сейчас наличие USB-устройств определяется только при запуске первой программы под WINE. Если устройство подключается, когда WINE уже работает, то драйвер для него не загружается. При отключении устройства WINE никак не извещает об этом драйвер устройства.
При подключении/отключении usb-устройств вызываются функции new_device и removed_device в mountmgr.sys. Оттуда можно вызывать функции из usbhub.c для получения нового списка устройств. Думаю, это будет легче реализовать, если совместить mountmgr.sys и usbhub.sys в одном драйвере.
Начал переносить parport.sys и usbhub.sys в mountmgr.sys.
> Начал переносить parport.sys и usbhub.sys в mountmgr.sys. Перенёс.
Начал работать над загрузкой драйверов для ключа, вставленного после запуска wine.
Сделал, чтобы при установке переменной окружения WINEAUTOMOUNT в "no" не отключалась полностью инициализация hal, так как он нужен будет для получения событий о подключении USB-устройств.
В комментарии выше имеется ввиду, что при WINEAUTOMOUNT=no продолжат загружаться драйверы ключей. Создание ссылок на устройство и точку монтирования USB-флэшки будет отключаться.
> Начал работать над загрузкой драйверов для ключа, вставленного после запуска > wine. Доделал. Теперь надо реализовать обработку удаления устройства. На данный момент однажды вытащенное устройство перестаёт работать.
Занимался реализацией обработки удаления USB-устройства.
Срок выполнения - до конца февраля
Реализовал посылку драйверу IRP и его выгрузку при удалении USB-устройства. Реализовал IoDetachDevice, улучшил реализацию IoAttachDeviceToDeviceStack. Сделал, чтобы в register_usbstor_device удалялся старый симлинк при создании нового.
Внёс изменения в register_usbstor_device, чтобы в device ID пробелы заменялись на '_', как в Windows.
Перенёс имеющиеся патчи на 1.0.12. Заметил регресс в работе LicenceTest с USB-ключом Катран. Проблема оказалась связана с обработкой PnP-запросов от устройств из HKLM\System\CurrentControlSet\Enum\Root. В обработчике производился поиск по списку USB-устройств (проверка, что устройство не удалено), а root-устройства в этом списке отсутствовали, и возвращалась ошибка. Завёл специальный список для root-устройств.
Есть проблемы с USB-ключами HASP и Guardant (проверял на 1.0.12). Для ключа HASP динамически загружаются два драйвера: aksusb.sys и akshasp.sys. Второй не выгружается при отключении ключа. После повторного подключения ключа и запуска hasp_demo.exe падает winedevice, и все драйверы перестают работать. Guardant при повторном подключении перестаёт быть виден.
Отправил то, что сделано на данный момент, в рассылку.
Надо добавить возможность получения событий о подключении/отключении USB-устройств с помощью libudev.
> Надо добавить возможность получения событий о подключении/отключении > USB-устройств с помощью libudev. Сделал.
Откладываем задачи, к которым не обращались более 100 дней.
В последний раз был привязан к релизу W@E 2.0 Аннулирую.