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