Имя: Пароль:
1C
1C 7.7
v7: iKeyAPI.dll (отсутствует CLSID)
,
0 adm1nb3k
 
21.12.15
20:23
Здравствуйте. Есть токен iKey SafeNet. Драйвер установлен. Хочу подключить iKeyAPI.dll и оттуда взят MD5_Hash. При подключение к базу, выходить отсутствует CLSID. Куда копать?
http://rghost.ru/7dBmthbL4
1 Это_mike
 
21.12.15
20:32
Зарегистрировать длл? Запустить 1с с правами админа?
2 adm1nb3k
 
21.12.15
20:48
(1). Пробовал. Без толку.
3 MadDAD
 
21.12.15
22:30
Судя по всему должны присутствовать все эти файлы

\\System\\WINSCARD.DLL
\\System\\rnbtkn95.sys        
\\System32\\Drivers\\rnbtoken.sys
\\System32\\Drivers\\usbrbtkn.sys

Т.е. драйвер должен быть установлен корректно родным установщиком.
4 MadDAD
 
21.12.15
22:32
Да, и попробуйте запустить регистрацию библиотеки, когда токен в гнезде.
5 adm1nb3k
 
21.12.15
23:06
(3)
Драйвер установлен корректно и работает другой приложением. Все файлы присутствуют в указанных местах.
6 MadDAD
 
22.12.15
10:51
(4) ОС 64х-битная?
7 NikVars
 
22.12.15
10:56
(5) А как связана установка драйвера с регистрацией библиотек выдающих CLSID?
8 NikVars
 
22.12.15
10:58
(2) Пользователю даешь права админа временно. Не запускаешь что-то под правами админа. А именно, этому пользователю даешь права админа. Входишь в 1С один раз. Проверяешь работу своих библиотек и подключений. Если все работает. Забираешь у этого пользователя админские права. Перезагружаешь биби. Проверяешь снова.
9 MadDAD
 
22.12.15
11:05
(7) Это COM-сервер, напрямую связанный с драйвером токена. И для работы драйвер должен быть утсановлен. У него в процедуре регистрации явно указна проверка веток реестра, наличия файлов драйвера и присутствия веток оборудования в реестре. Если чего- то нет - вываливает ошибку регистрации, а она вываливается в сообщение об отсутствии CLSID
10 NikVars
 
22.12.15
11:08
(9) 1С 7.7 работает с COM?
11 MadDAD
 
22.12.15
11:13
(10) Работает. Регистрируем COM-Сервер и потом СоздатьОбъект("ИмяСервера"). вообще 7.7 не очень различает СOM и OLE. Можно подключать ActiveX'ы.
12 NikVars
 
22.12.15
11:21
(11) В части проблемы (0) - все однозначно. Нужно регить длл. 1С пофик на все драйверные установки. Драйвер ведь не ставится для нужд 1С. Если бы это было так, то не было бы этой ветки.
13 MadDAD
 
22.12.15
11:36
(12) 1C-то пофик, но для регистрации DLL вызывается прроцедура "DllRegisterServer" из самой DLL. И тут возникет несколько вопросов:

1. Нормально ли работает этот Com-сервер с другими приложениями? Например если попытаться создать объект в vbs-скрипте или в макросе VBA? Если все ОК - то проблема однозначно в 1С.

2.  Если система 64-битная, то регистрировать библиотеку нужно соответствующим образом (C:\Windows\SYSWOW64\Regsvr.exe) т.к. библиотека 32-х битная.
14 NikVars
 
22.12.15
11:38
(13) Ты ж сказал, что 1С 7.7 работает с COM, значит - работает!
15 MadDAD
 
22.12.15
11:40
(14) 1c работает с COM вообще. А тут COM-сервер не может зарегистрироваться. Вопрос - почему. Ответ не узнаем пока не придет ТС
16 NikVars
 
22.12.15
11:42
(15) Речь про 1С 7.7. Тут все твои доводы - мимо. Даже 1С 8 цепляется к 1С 7.7 увы не по COM.
17 adm1nb3k
 
22.12.15
13:09
(6). Да, система х64 Windows 7.
(13). DLL я регистрировал DllRegisterServer. Все файлы находиться на (C:\Windows\SYSWOW64\Regsvr.exe).
18 MadDAD
 
22.12.15
13:14
Вообщем поковырялся с библиотекой, мутная она какая-то. Она при регистрации не пишет в реестр ни ProgID ни CLSID. Вообще не регистрируется как COM-сервер. При этом возвращает статус регистрации - 1.

Вместо этого создает ветку в SoftWare и пишет туда свою версию.

Процедуры это не методы COM-Объекта а просто экспортируемые процедуры.

Из этого делаю вывод что использовать её в качестве COM не получится, только писать обертку на чем нибудь. Или воспользоваться DynWrapX.dll
19 MadDAD
 
22.12.15
13:16
(17) Если требуется только вычислить MD5 то есть пути проще, если нужно взаимодействовать с токеном, то придется все-таки дергать экспортируемые методы.
20 adm1nb3k
 
22.12.15
13:22
http://www.ipotekabank.uz/upload/IKEYALL.EXE тут есть драйвер этого токена.
Задача состоится в том, чтобы вытащит из этого токена MD5.
21 MadDAD
 
22.12.15
13:33
(20) А есть приницпиальное отличие реализации MD5 в этой библиотеке? На сколько я вижу для вычисления хэша она не обращается к токену.
22 adm1nb3k
 
22.12.15
13:43
(21) Честно скажу, что я даже не знаю, как из этого токена взят данные. Просто ковырялся файлах токена и нашел этот файл. Думал что достаточно подключит этот DLL и качать оттуда данные.
23 NikVars
 
22.12.15
14:24
(17) Может нужно было регистрировать через
C:\Windows\SYSWOW64\Regsvr32.exe?
24 MadDAD
 
22.12.15
14:24
(22) Просто не получится. Однозначено нужно делать обертку, хотя бы при помощи DynWrapX
25 MadDAD
 
22.12.15
14:58
Как-то так
[code]
Функция Из_10_В_16(Знач Значение=0) Экспорт
    Нотация = 16;
    Значение = Число(Значение);
    Если Значение<=0 Тогда
        Возврат("0");
    КонецЕсли;
    Значение=Цел(Значение);
    Результат="";
    Пока Значение>0 Цикл
        Результат=Сред("0123456789ABCDEF",Значение%Нотация+1, 1)+Результат;
        Значение=Цел(Значение/Нотация) ;
    КонецЦикла;
    Возврат Результат;
КонецФункции

//*******************************************
Функция ПолучитьHex(Исх)
    Результат = "";
    Для Счетчик = 1 по СтрДлина(Исх) Цикл
        байт = Из_10_В_16(КодСимв(Сред(Исх, Счетчик,1)));
        Результат = Результат+ " " + байт;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

//*******************************************
Процедура Сформировать()
    
    iKeyApi = СоздатьОбъект("DynamicWrapperX");
    iKeyApi.Register("ikeyapi.dll", "MD5_Hash", "i=sls" ,"r=s");
    Htp = "";
    Htp = iKeyApi.MD5_Hash("Тестовая строка", 8, Htp);
    MD5 = ПолучитьHex(Htp);
    
    Сообщить(MD5);
КонецПроцедуры
[/code]
26 MadDAD
 
22.12.15
15:01
(22)И так делаем для каждой экспортируемой функции. Думаю что будет непросто, учитывая что токен - это сертификаты, ввод пин-кода и пр. Зависит от того что конкретно нужно от токена в 1С.
27 adm1nb3k
 
22.12.15
15:04
(23) Пробовал.
28 MadDAD
 
22.12.15
15:07
29 NikVars
 
22.12.15
15:10
(27) А (8) пробовал?
30 MadDAD
 
23.12.15
08:56
(29) Никакие способы регистрирования не помогут. Регистрация dll проходит нормально (как минимум у меня оно отработало). Но как показало изучение под IDA и Olly процедура DllRegisterServer не выполняет регистрации COM-сервера. Т.е. эта библиотека хоть и делает вид что она COM, на самом деле им не является. И нет никаких способов заставить ее работать как COM-сервер, кроме как написать обертку, что я и продемонстрировал в примерной обработке выше. Там выполняется процедура MD5_HASH из нее. Это обычный экспортируемый метод.
Независимо от того, куда вы едете — это в гору и против ветра!