Отвечаю сам себе

решил все-таки логично завершить тему.
кому интересно как реализовал я
(для своей узкоспециализированной задачи без претензий на истинную непогрешимость ).
практически все действия по справочнику gina.hlp (от самого первого примера gina)
проинициилизировав ридер в wlxInitilize (все хендлы/переменные смарт-карты — глобальные)
проверяю состояние (и "правильность" смарт-карты) в ридере запущеной нитью (из того же wlxInitilize),
устанавливая флаг "правильная смарт-карта в ридере"
в LoginDialogBoxProc по таймеру проверяю этот флаг-
при его наличии подставляя логин/пароль пользователя нужного уровня привилегий и выполняя событие "нажали кнопку вход в систему"
та же нить, ловит событие "в ридере карты нет" выполняя при необходимости выход из системы.
та же нить логирует начало и окончание сеанса, проверяет что пользователь, например, вообще без смарт-карты заходил (если ему это можно)
может быть сделано не очень красиво но все таки работает
PS. Отлаживать gina-это самый большой геморрой который я пока встречал в жизни.
Viva la vmware-а то бы вообще терперния не хватило.