Дистрибутив можно взять здесь: "/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 -> Установка системы защиты -> Локальная установка В "Панели управления" появляется значок "Ключи защиты", в котором выводится информация о доступных ключах. Пишет, что ключи не найдены.
Если Autorun.exe установлен в эмуляции Windows 98, то обращение к ключу происходит с использованием таких кодов IOCTL, что вызывается get_vxd_proc. Если выставить в winecfg Windows 2000, то установить систему защиты с помощью Autorun.exe не удаётся. Получаем сообщение о том, что не установлен драйвер.
В Windows XP тестовая программа, открывающая \\.\UPKEY0 и вызывающая DeviceIoControl с теми же параметрами, которые используются при обращении к ключу под Wine, приводит к BSoD с ошибкой KERNEL_MODE_EXCEPTION_NOT_HANDLED с кодом исключения STATUS_ACCESS_VIOLATION.
Драйвер читает данные, расположенные по указателю, который находится среди данных, передаваемых при вызове DeviceIoControl.
Сделал хак, который копирует данные по определённым адресам, если используются определённые коды IOCTL. Ключ опознаётся.
Реализовал копирование памяти из адресного пространства обратившегося к драйверу процесса при обращении драйвера к невыделенным участкам памяти. По завершении обработки IOCTL происходит копирование из памяти драйвера в память вызвавшего DeviceIoControl процесса.
Либо какие нить патчи не приложили, либо что то сломалось. Но ключ опять не видится. 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
Исправлено. Патч: "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.
/*Протестировано*\ Локально ключ работает.
Тестовая программа из /var/ftp/pvt/Windows/Keys/katran_test/PSTest.672B.zip вызывает падение драйвера UPKey.sys и зависает.
Если изменить хак для upkey.sys так, чтобы запрос IOCTL с кодом 0x222060 обрабатывался также, как и 0x222044, то падения не происходит, но тестовая программа пишет: - Ошибка при кодировании: Ключ неисправен - необходимо провести диагностику или заменить ключ!
Добавлена поддержка IRP_MJ_WRITE. Тестовая программа пишет, что ключ функционирует нормально.