Exemple #1
0
        /// <summary>
        /// 初始化设备
        /// </summary>
        /// <returns>返回设备列表</returns>
        public List <string> InitializeDevice()
        {
            //获取设备上下文句柄
            runResult = PCSC.SCardEstablishContext(0, 0, 0, ref hContext);
            if (runResult != SCARD_SUCCESS)
            {
                errMsg = "获取设备上下文失败,错误代码为:" + runResult.ToString("X");
                //Log.WriteLog(errMsg);
                throw new Exception(errMsg);
            }

            if (hContext == 0)
            {
                errMsg = "未能获取设备上下文句柄";
                // Log.WriteLog(errMsg);
                throw new Exception(errMsg);
            }
            int mszReaderSize = 0;

            //获取读卡器列表,第一次用于获取字符串长度
            runResult = PCSC.SCardListReaders(hContext, null, null, ref mszReaderSize);

            if (runResult != SCARD_SUCCESS)
            {
                errMsg = "获取读卡器列表,错误代码为:" + runResult.ToString("X");
                // Log.WriteLog(errMsg);
                throw new Exception(errMsg);
            }

            List <string> readerList = new List <string>();

            byte[] reads = new byte[mszReaderSize];

            //获取读卡器列表
            runResult = PCSC.SCardListReaders(hContext, null, reads, ref mszReaderSize);

            if (runResult != SCARD_SUCCESS)
            {
                errMsg = "获取读卡器列表,错误代码为:" + runResult.ToString("X");
                // Log.WriteLog(errMsg);
                throw new Exception(errMsg);
            }

            ASCIIEncoding encoding  = new ASCIIEncoding();
            string        strBuffer = encoding.GetString(reads);

            char nullChar = '\0';

            int len   = mszReaderSize;
            int index = 0;

            while (strBuffer[0] != nullChar)
            {
                index = strBuffer.IndexOf(nullChar);
                string reader = strBuffer.Substring(0, index);
                len       = len - (reader.Length + 1);
                strBuffer = strBuffer.Substring(index + 1, len);
                readerList.Add(reader);
            }
            return(readerList);
        }