Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pcsc_scan.exe finds readers but fails to present prompt #34

Closed
digitalentropy opened this issue Feb 28, 2020 · 12 comments
Closed

pcsc_scan.exe finds readers but fails to present prompt #34

digitalentropy opened this issue Feb 28, 2020 · 12 comments

Comments

@digitalentropy
Copy link

I am observing an issue with pcsc_scan.exe detecting my readers and then looping over and over rather than presenting a prompt to select reader and action.

The issue is observed when compiling from scratch and also when using the pre-compiled Windows binary.

I've uploaded a log of the output I am observing in both scenarios.

log.txt

Any thoughts on possible causes?

@LudovicRousseau
Copy link
Owner

Why do you expect a prompt to select a reader?

I agree the continuous loop is a bug somewhere.

@digitalentropy
Copy link
Author

digitalentropy commented Feb 29, 2020 via email

@LudovicRousseau
Copy link
Owner

I can't reproduce the problem on my Windows 10.
Please apply this patch, rebuild and try again.

diff --git a/pcsc_scan.c b/pcsc_scan.c
index e054624..6e6b29c 100644
--- a/pcsc_scan.c
+++ b/pcsc_scan.c
@@ -630,6 +630,7 @@ get_readers:
    {
        time_t t;
 
+       printf("rv: 0x%08X\n", rv);
        if (pnp)
        {
 #ifdef WIN32

@digitalentropy
Copy link
Author

Current output is as follows:

Scanning present readers...
0: Alcor Micro USB Smart Card Reader 0
1: JAVACOS Virtual Contact Reader 0
2: JAVACOS Virtual Contactless Reader 1
rv: 0x00000000

It still loops over and over, regardless of card state.

@LudovicRousseau
Copy link
Owner

OK.
Try again with this new patch:

diff --git a/pcsc_scan.c b/pcsc_scan.c
index e054624..f231e14 100644
--- a/pcsc_scan.c
+++ b/pcsc_scan.c
@@ -635,6 +635,7 @@ get_readers:
 #ifdef WIN32
            /* check if the number of readers has changed */
            LONG newNbReaders = rgReaderStates_t[nbReaders-1].dwEventState >> 16;
+           printf("nbReaders: %d, .dwEventState: 0x%08X\n", nbReaders, rgReaderStates_t[nbReaders-1].dwEventState);
            if (newNbReaders + 1 != nbReaders)
 #else
            if (rgReaderStates_t[nbReaders-1].dwEventState &

@digitalentropy
Copy link
Author

New looping message:

Scanning present readers...
0: Alcor Micro USB Smart Card Reader 0
1: JAVACOS Virtual Contact Reader 0
2: JAVACOS Virtual Contactless Reader 1
nbReaders: 4, .dwEventState: 0x00040002

@LudovicRousseau
Copy link
Owner

LudovicRousseau commented Mar 2, 2020

What version of Windows do you use?
What is the output of pcsc_scan if you unplug one reader, for example the Alcor Micro USB reader?

@digitalentropy
Copy link
Author

digitalentropy commented Mar 2, 2020 via email

@digitalentropy
Copy link
Author

Microsoft Windows [Version 10.0.18363.657]

@LudovicRousseau
Copy link
Owner

LudovicRousseau added a commit that referenced this issue Mar 7, 2020
Some Windows systems do not report "correct" information for
.dwEventState returned by SCardGetStatusChange() for the special reader
"\\?PnP?\Notification".
The program was looping forever trying to detect a new reader.

I now use a different, less smart, code to handle this.

Thanks to digitalentropy for the bug report
#34
@LudovicRousseau
Copy link
Owner

Fixed in 1727dbf

@LudovicRousseau
Copy link
Owner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants