Exemple #1
0
        /// <summary>
        /// 发送APDU指令
        /// </summary>
        /// <param name="SendMessageBuffer">发送的指令</param>
        /// <param name="SW">返回的SW状态码</param>
        /// <returns></returns>
        public byte[] SendAPDU(byte[] SendMessageBuffer, byte[] SW)
        {
            byte[] receiveMessageByte = new byte[256];
            int    receiveLength      = 256;

            runResult = PCSC.SCardTransmit(hCard
                                           , SCARD_PCI_T1
                                           , SendMessageBuffer
                                           , SendMessageBuffer.Length
                                           , null, receiveMessageByte, ref receiveLength);

            if (runResult != SCARD_SUCCESS)
            {
                errMsg = "获取读卡器列表,错误代码为:" + runResult.ToString("X");
                //Log.WriteLog(errMsg);
                throw new Exception(errMsg);
            }
            if (receiveLength > 2)
            {
                byte[] retMessage = new byte[receiveLength - 2];
                for (int i = 0; i < receiveLength - 2; i++)
                {
                    retMessage[i] = receiveMessageByte[i];
                }
                SW[0] = receiveMessageByte[receiveLength - 2];
                SW[1] = receiveMessageByte[receiveLength - 1];
                return(retMessage);
            }
            if (receiveLength == 2)
            {
                SW[0] = receiveMessageByte[0];
                SW[1] = receiveMessageByte[1];
                return(null);
            }

            return(receiveMessageByte);
        }