I just wanted to give some more information about the issue.

These are the log messages produced by pcscd when the simple Java application is running in 32-bit mode ...

/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:217:SHMProcessEventsServer() Common channel packet arrival
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:226:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/pcscdaemon.c:256:SVCServiceRunLoop() A new context thread creation is requested: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:178:ContextThread() Thread is started: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 48
<== SHMMessageReceive:
12 34 56 78 00 00 00 3C 00 00 00 F8 00 00 01 F5 00 00 00 14 00 00 00 F8 4A A8 B5 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:148:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 12 bytes
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 12
<== SHMMessageReceive:
00 00 00 03 00 00 00 00 09 34 91 38 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:153:SHMClientReadMessage() SHMClientReadMessage: read message body error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:293:SHMProcessEventsContext() correctly processed client: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:242:ContextThread() Client is protocol version 3:0
==> SHMMessageSend:
12 34 56 78 00 00 00 3C 00 00 00 F8 00 00 01 F5 00 00 00 14 00 00 00 F8 4A A8 B5 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 48
<== SHMMessageReceive:
12 34 56 78 00 00 00 3C 00 00 00 F1 00 00 01 F5 00 00 00 14 00 00 00 01 4A A8 B5 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:148:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 12 bytes
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 12
<== SHMMessageReceive:
00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:153:SHMClientReadMessage() SHMClientReadMessage: read message body error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:293:SHMProcessEventsContext() correctly processed client: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard.c:199:SCardEstablishContext() Establishing Context: 17002257 [0x01036F11]
==> SHMMessageSend:
12 34 56 78 00 00 00 3C 00 00 00 F1 00 00 01 F5 00 00 00 14 00 00 00 01 4A A8 B5 76 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 03 6F 11 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:461:SHMMessageReceive() SHMMessageReceive: peer closed the socket
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0xFFFFFFFF, bytes read: 0
<== SHMMessageReceive:

/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0xFFFFFFFF [0xFFFFFFFF]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:282:SHMProcessEventsContext() Client has disappeared: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:199:ContextThread() Client die: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard.c:210:SCardReleaseContext() Releasing Context: 17002257

... and these when running in 64-bit mode ....

/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:217:SHMProcessEventsServer() Common channel packet arrival
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:226:SHMProcessEventsServer() SHMProcessCommonChannelRequest detects: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/pcscdaemon.c:256:SVCServiceRunLoop() A new context thread creation is requested: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:178:ContextThread() Thread is started: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 48
<== SHMMessageReceive:
12 34 56 78 00 00 00 3C 00 00 00 F8 00 00 01 F5 00 00 00 14 00 00 00 F8 4A A8 B5 A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:148:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 12 bytes
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 12
<== SHMMessageReceive:
00 00 00 03 00 00 00 00 00 26 25 41 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:153:SHMClientReadMessage() SHMClientReadMessage: read message body error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:293:SHMProcessEventsContext() correctly processed client: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:242:ContextThread() Client is protocol version 3:0
==> SHMMessageSend:
12 34 56 78 00 00 00 3C 00 00 00 F8 00 00 01 F5 00 00 00 14 00 00 00 F8 4A A8 B5 A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 48
<== SHMMessageReceive:
12 34 56 78 00 00 00 3C 00 00 00 F1 00 00 01 F5 00 00 00 14 00 00 00 01 4A A8 B5 A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:148:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 12 bytes
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0x00000000, bytes read: 12
<== SHMMessageReceive:
00 00 00 00 00 00 00 00 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:153:SHMClientReadMessage() SHMClientReadMessage: read message body error: 0x00000000 [0x00000000]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:293:SHMProcessEventsContext() correctly processed client: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard.c:199:SCardEstablishContext() Establishing Context: 16995192 [0x01035378]
==> SHMMessageSend:
12 34 56 78 00 00 00 3C 00 00 00 F1 00 00 01 F5 00 00 00 14 00 00 00 01 4A A8 B5 A6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 03 53 78 00 00 00 00 
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:119:SHMClientReadMessage() SHMClientReadMessage: Issuing read for 48 bytes (header)
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:461:SHMMessageReceive() SHMMessageReceive: peer closed the socket
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:500:SHMMessageReceive() SHMMessageReceive errno: 0x00000000: no error
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:501:SHMMessageReceive() SHMMessageReceive retval: 0xFFFFFFFF, bytes read: 0
<== SHMMessageReceive:

/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg.cpp:122:SHMClientReadMessage() SHMClientReadMessage: read message header error: 0xFFFFFFFF [0xFFFFFFFF]
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_msg_srv.c:282:SHMProcessEventsContext() Client has disappeared: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard_svc.c:199:ContextThread() Client die: 7
/SourceCache/SmartCardServices/SmartCardServices-36160/src/PCSC/winscard.c:210:SCardReleaseContext() Releasing Context: 16995192

... in 32-bit mode the inserted card is found in 64-bit mode it says that there is no card present.

Unfortunately I don't know how to read the the messages sent between pcsc client and deamon.

Regards,
Martin

On 09.09.2009, at 15:04, Martin Centner wrote:
Hi!

I'm wondering if anybody on this list has an idea what the reason for the strange behavior of the Java smartcard I/O API in 64-bit mode described below might be.

Java smartcard I/O is shipped with Java SE 6.0 and above. It uses a JNI library to communicate with PCSC-Lite (a part of the SmartcardServices framework as far as I understand). When Java is running in 32-bit mode the communication between Java and pcscd seems to works fine. However, when Java is running in 64-bit mode (which is the default in Snow Leopard) the communication seems to fail somewhere between pcscd and the Java smartcard I/O.

pcscd is switched to 32-bit mode as soon as a card terminal with a 32-bit driver is connected. When Java is running in 64-bit mode the JNI library libj2pcsc and pcsc-lite are also loaded in their 64-bit versions. Thus, the 33/64-bit transition takes place between pcscd and the pcsc-lite library. So I first thought, it might be a general issue of the pcsc-lite library and pcsc-deamon in a mixed 32/64-bit environment. However, testing with this very simple C program attached 
<main.c>
linking to the pcsc-lite library showed that it works fine when run in 32-bit and 64-bit mode.

Running this very simple Java program attached
<JavaSmartCardIOTest.jar>
shows different results when running in 32-bit and 64-bit mode. In 32-bit mode it finds all connected card terminals and is able to connect to inserted cards. In 64-bit mode it fails to list the card terminals and/or fails to connect to the inserted card.

Any ideas?

Thanks a lot,
Martin



_______________________________________________
SmartcardServices-Users mailing list
SmartcardServices-Users@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/smartcardservices-users