A guy I respect very much once told me he wrote his first GINA during a week-end.
Let’s face it, I’m not that bright: already to get it working on a domain-based setting took a few days. But when a partner asked for a workgroup version, trouble started.
Here is/are the thing(s):
1) Under XP “home” (thus the “Solo” deal), winlogon will _not_ send insertion or removal events to the GINA.
2) The Microsoft winlogon service that handles the GINA is not re-entrant (don’t know about Vista, but I am convinced that this statement is correct under 2K and XP).
So to fix 1) I decided to run a second thread that would tell winlogon that the card had been inserted or removed (polling is ugly I know).
Yes but 2) generated an amazing amount of sporadic crashes … that my partner did struggle with (as a user) as much as I did, I must admit.
Being an MSDN lawful subscriber, I got to talk the some of the folks at MS that deal with that … and no go .
A consultant out there (I believe that is Keith: http://www.pluralsight.com/wiki/default.aspx/Keith/CustomizingGINA.html ), has a forum where I posted my problem.
There I was told about that re-entrency problem and that the trick that was usually used (especially in the Microsoft COM code), was to create a hidden window and send it a user’s-event to wake it up (that is scary no ?).
Anyway, that did the trick, and although I am not very proud of my code when I look at it (too much was written at 2 am maybe); next I’ll release that GINA Solo thing (dll in C++, and configuration utility in VB6 … that was before I found out about wxPython).
The released applet was in BasicCard (actually my first GINA applet was in S-Choice: http://www.sci-s.com/schoice_os.htm ) … I think I have one In JavaCard also.
I will release the former and the latter.
Philippe