예제 #1
0
        public List <string> GetReaderList()
        {
            List <string> retval      = new List <string>();
            uint          pcchReaders = 0;
            int           nullindex   = -1;
            char          nullchar    = (char)0;

            try
            {
                // Establish context
                if (!EstablishContext())
                {
                    return(null);
                }

                // Find out length of the available readers character
                LastError = WinSCard.SCardListReaders(
                    _context,
                    null,
                    null,
                    ref pcchReaders);

                if (!IsSuccess(LastError))
                {
                    return(null);
                }

                // Create a buffer and fill it
                byte[] szBuffer = new byte[pcchReaders];
                LastError = WinSCard.SCardListReaders(
                    _context,
                    null,
                    szBuffer,
                    ref pcchReaders);

                if (!IsSuccess(LastError))
                {
                    return(null);
                }

                // Convert szReaders to string
                string sBuffer = Encoding.ASCII.GetString(szBuffer);

                // Convert length of the available readers character to int
                int len = (int)pcchReaders;

                while (sBuffer[0] != (char)0)
                {
                    nullindex = sBuffer.IndexOf(nullchar);
                    string reader = sBuffer.Substring(0, nullindex);

                    retval.Add(reader);

                    len     = len - (reader.Length + 1);
                    sBuffer = sBuffer.Substring(nullindex + 1, len);
                }

                // Release context
                ReleaseContext();

                return(retval);
            }
            catch (Exception)
            {
                throw;
            }
        }