Bug 2887

Summary: Не поддерживается USB-ключ Катран (14a8:0001)
Product: WINE@Etersoft Reporter: Александр Морозов <amorozov>
Component: Ключи защиты ; Системы защиты ; Файл лицензииAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: baraka, kondratyuk, lav
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 468, 1105, 2710, 3834    

Description Александр Морозов 2008-11-11 20:01:18 MSK
Дистрибутив можно взять здесь: "/var/ftp/pvt/WINE tests/1C/1C Papyc"
Чтобы установка прошла успешно, надо экспортировать из реестра Windows HKLM\SYSTEM\CurrentControlSet\Enum\USB\Vid_14a8&Pid_0001\5&6d75465&0&1 и HKLM\SYSTEM\CurrentControlSet\Services\UPKey.
Autorun.exe -> Установка системы защиты -> Локальная установка
В "Панели управления" появляется значок "Ключи защиты", в котором выводится информация о доступных ключах. Пишет, что ключи не найдены.
Comment 1 Александр Морозов 2008-11-12 14:22:57 MSK
Если Autorun.exe установлен в эмуляции Windows 98, то обращение к ключу происходит с использованием таких кодов IOCTL, что вызывается get_vxd_proc.

Если выставить в winecfg Windows 2000, то установить систему защиты с помощью Autorun.exe не удаётся. Получаем сообщение о том, что не установлен драйвер.
Comment 2 Александр Морозов 2008-11-12 16:05:10 MSK
В Windows XP тестовая программа, открывающая \\.\UPKEY0 и вызывающая DeviceIoControl с теми же параметрами, которые используются при обращении к ключу под Wine, приводит к BSoD с ошибкой KERNEL_MODE_EXCEPTION_NOT_HANDLED с кодом исключения STATUS_ACCESS_VIOLATION.
Comment 3 Александр Морозов 2008-11-12 19:15:33 MSK
Драйвер читает данные, расположенные по указателю, который находится среди данных, передаваемых при вызове DeviceIoControl.
Comment 4 Александр Морозов 2008-11-13 18:56:55 MSK
Сделал хак, который копирует данные по определённым адресам, если используются определённые коды IOCTL. Ключ опознаётся.
Comment 5 Александр Морозов 2008-11-14 13:53:38 MSK
Реализовал копирование памяти из адресного пространства обратившегося к драйверу процесса при обращении драйвера к невыделенным участкам памяти. По завершении обработки IOCTL происходит копирование из памяти драйвера в память вызвавшего DeviceIoControl процесса.
Comment 6 Денис Баранов 2008-12-02 21:16:06 MSK
Либо какие нить патчи не приложили, либо что то сломалось. Но ключ опять не видится. 
wine-etersoft-sql-1.0.10-alt0.M41.1
libwine-1.0.10-alt0.M41.2.4
wine-1.0.10-alt0.M41.2.4
Comment 7 Александр Морозов 2008-12-03 17:51:03 MSK
Исправлено. Патч: "ntoskrnl.exe: Change used memory mask and size, fix second argument of VirtualFree (eterbug #2887)."

Если VirtualAlloc используется с MEM_RESERVE то начало выделяемого блока памяти выравнивается по 0x10000, иначе по 0x1000. Согласно MSDN второй аргумент VirtualFree обязан быть 0, если третий параметр MEM_RELEASE.
Comment 8 Денис Баранов 2008-12-11 17:53:52 MSK
/*Протестировано*\ Локально ключ работает.
Comment 9 Александр Морозов 2009-05-27 20:12:40 MSD
Тестовая программа из /var/ftp/pvt/Windows/Keys/katran_test/PSTest.672B.zip вызывает падение драйвера UPKey.sys и зависает.
Comment 10 Александр Морозов 2009-05-28 19:30:20 MSD
Если изменить хак для upkey.sys так, чтобы запрос IOCTL с кодом 0x222060 обрабатывался также, как и 0x222044, то падения не происходит, но тестовая программа пишет:
- Ошибка при кодировании: Ключ неисправен - необходимо провести диагностику или заменить ключ!
Comment 11 Александр Морозов 2009-05-29 18:26:44 MSD
Добавлена поддержка IRP_MJ_WRITE. Тестовая программа пишет, что ключ функционирует нормально.