Антон Тихиенко пишет:Для SP-ключей лучше пользоваться интерфейсом (GrdFMI_SP).
Все было сделано в соответствии с этими рекомендациями.
Но пришлось поднять эту старую тему.
В нашей программе пользователь может настроить: искать локальные и/или сетевые ключи, искать железные и/или софтверные ключи.
Недавно обнаружилось, что программа ищет ключи не совсем корректно. Чтобы разобраться, я написал простую тестовую программу, которая пробует различные режимы поиска ключа.
На компе установлен один ключ Guardant: SP Net, запущен сервер GLDS. Тестовая прога запускается на этом же компе.
Полный отчет программы привожу в конце этого сообщения (к сожалению, каты не поддерживаются на этом форуме). Понятно, что анализировать эту простыню не очень приятно, поэтому обращу внимание на отдельные ее строки.
Для поиска хардверных и/или софтверных ключей было рекомендовано пользоваться Интерфейсом ключа, то есть константами FMI. В качестве модели ключа, видимо предполагалось использовать FMM_ALL (это 0)
Выберем строчки с FMM_ALL:
2 { FMR_Remote } { FMI_SP } { FMM_ALL } Plug not found!
11 { FMR_Local } { FMI_SP } { FMM_ALL } Found 1 plugs
20 { FMR_Local FMR_Remote } { FMI_SP } { FMM_ALL } Found 1 plugs
8 { FMR_Remote } { FMI_ALL } { FMM_ALL } Found 1 plugs
17 { FMR_Local } { FMI_ALL } { FMM_ALL } Found 1 plugs
26 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_ALL } Found 2 plugs
5 { FMR_Remote } { FMI_LPT FMI_USB } { FMM_ALL } Found 1 plugs
14 { FMR_Local } { FMI_LPT FMI_USB } { FMM_ALL } Plug not found!
23 { FMR_Local FMR_Remote } { FMI_LPT FMI_USB } { FMM_ALL } Found 1 plugs
Видно, что использование FMI_ констант не позволяет нам управлять поиском хардверных и/или софтверных ключей.
Особо хочу обратить внимание на эти две пары строчек:
11 { FMR_Local } { FMI_SP } { FMM_ALL } Found 1 plugs
14 { FMR_Local } { FMI_LPT FMI_USB } { FMM_ALL } Plug not found!
2 { FMR_Remote } { FMI_SP } { FMM_ALL } Plug not found!
5 { FMR_Remote } { FMI_LPT FMI_USB } { FMM_ALL } Found 1 plugs
В режиме FMR_Local поиск работает нормально: API находит ключ SP, когда его просят, и не находит его, когда не просят. В режиме FMR_Remote все наоборот!
Может быть, все-таки, правильнее пользоваться Моделью ключа (константами FMM_), а в качестве интерфейса использовать FMI_ALL (0) ?
6 { FMR_Remote } { FMI_ALL } { FMM_GSP } Found 1 plugs
15 { FMR_Local } { FMI_ALL } { FMM_GSP } Found 1 plugs
24 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_GSP } Found 2 plugs
7 { FMR_Remote } { FMI_ALL } { FMM_GS3S} Plug not found!
16 { FMR_Local } { FMI_ALL } { FMM_GS3S} Plug not found!
25 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_GS3S} Plug not found!
8 { FMR_Remote } { FMI_ALL } { FMM_ALL } Found 1 plugs
17 { FMR_Local } { FMI_ALL } { FMM_ALL } Found 1 plugs
26 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_ALL } Found 2 plugs
Вроде, должно работать?
Еще забавно, что в режиме Local+Remote один ключ обнаруживается дважды.
Полный отчет тестовой программы:
0 { FMR_Remote } { FMI_SP } { FMM_GSP } Plug not found!
1 { FMR_Remote } { FMI_SP } { FMM_GS3S} Plug not found!
2 { FMR_Remote } { FMI_SP } { FMM_ALL } Plug not found!
3 { FMR_Remote } { FMI_LPT FMI_USB } { FMM_GSP } Found 1 plugs
4 { FMR_Remote } { FMI_LPT FMI_USB } { FMM_GS3S} Plug not found!
5 { FMR_Remote } { FMI_LPT FMI_USB } { FMM_ALL } Found 1 plugs
6 { FMR_Remote } { FMI_ALL } { FMM_GSP } Found 1 plugs
7 { FMR_Remote } { FMI_ALL } { FMM_GS3S} Plug not found!
8 { FMR_Remote } { FMI_ALL } { FMM_ALL } Found 1 plugs
9 { FMR_Local } { FMI_SP } { FMM_GSP } Found 1 plugs
10 { FMR_Local } { FMI_SP } { FMM_GS3S} Plug not found!
11 { FMR_Local } { FMI_SP } { FMM_ALL } Found 1 plugs
12 { FMR_Local } { FMI_LPT FMI_USB } { FMM_GSP } Plug not found!
13 { FMR_Local } { FMI_LPT FMI_USB } { FMM_GS3S} Plug not found!
14 { FMR_Local } { FMI_LPT FMI_USB } { FMM_ALL } Plug not found!
15 { FMR_Local } { FMI_ALL } { FMM_GSP } Found 1 plugs
16 { FMR_Local } { FMI_ALL } { FMM_GS3S} Plug not found!
17 { FMR_Local } { FMI_ALL } { FMM_ALL } Found 1 plugs
18 { FMR_Local FMR_Remote } { FMI_SP } { FMM_GSP } Found 1 plugs
19 { FMR_Local FMR_Remote } { FMI_SP } { FMM_GS3S} Plug not found!
20 { FMR_Local FMR_Remote } { FMI_SP } { FMM_ALL } Found 1 plugs
21 { FMR_Local FMR_Remote } { FMI_LPT FMI_USB } { FMM_GSP } Found 1 plugs
22 { FMR_Local FMR_Remote } { FMI_LPT FMI_USB } { FMM_GS3S} Plug not found!
23 { FMR_Local FMR_Remote } { FMI_LPT FMI_USB } { FMM_ALL } Found 1 plugs
24 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_GSP } Found 2 plugs
25 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_GS3S} Plug not found!
26 { FMR_Local FMR_Remote } { FMI_ALL } { FMM_ALL } Found 2 plugs