+static DWORD ykn_getserial(SCARDHANDLE hCard, BYTE *recv, LPDWORD recvsize_p)
+{
+ DWORD rc;
+ BYTE rbuf[4 + 2];
+ DWORD rsize = sizeof(rbuf);
+ BYTE sbuf[sizeof(yk_cmd) + 1];
+ unsigned int serial;
+
+ memcpy(sbuf, yk_cmd, sizeof(yk_cmd));
+ sbuf[2] = 0x10; /* read serial */
+ sbuf[4] = rsize;
+ rc = SCardTransmit(hCard, &pioSendPci, sbuf, sizeof(sbuf),
+ NULL, rbuf, &rsize);
+ if (rc) return rc;
+ if ((rbuf[rsize-2] != 0x90) || (rbuf[rsize-1] != 0x00))
+ return SCARD_W_CARD_NOT_AUTHENTICATED;
+ serial = (rbuf[0]<<24) + (rbuf[1]<<16) + (rbuf[2]<<8) + (rbuf[3]);
+ rc = snprintf(recv, *recvsize_p, "%u", serial);
+ *recvsize_p = rc;
+ return SCARD_S_SUCCESS;
+}
+