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; } }