void CreateDriver(ReaderSettings settings) { if (settings is TcpIpReaderSettings) { var tcpReader = settings as TcpIpReaderSettings; driver = new SocketCom(tcpReader); } else if (settings is PipeReaderSettings) { var pipeReader = settings as PipeReaderSettings; driver = new PipeCom(pipeReader); } else { throw new Exception("Reader type not defined"); } driver.log += new Action <object>(card_Log); driver.DriverConnect += new Action <bool>(card_DriverConnect); driver.CardInsert += new Action <bool>(card_CardInsert); }
private void cmbReader_SelectedIndexChanged(object sender, EventArgs e) { ReaderSettings selectedSettings = cmbReader.SelectedItem as ReaderSettings; if (driver == null || driver.Settings != selectedSettings) { if (driver != null) { driver.CardInserted = false; driver.Stop(); driver = null; } if (selectedSettings != null) { CreateDriver(selectedSettings); if (card != null) { driver.Handler = card.Handler; } driver.Start(); } } }
void CreateDriver(ReaderSettings settings) { if (settings is TcpIpReaderSettings) { var tcpReader = settings as TcpIpReaderSettings; driver = new SocketCom(tcpReader); } else if (settings is PipeReaderSettings) { var pipeReader = settings as PipeReaderSettings; driver = new PipeCom(pipeReader); } else { throw new Exception("Reader type not defined"); } driver.log += new Action<object>(card_Log); driver.DriverConnect += new Action<bool>(card_DriverConnect); driver.CardInsert += new Action<bool>(card_CardInsert); }
static void Main() { SimulatedReaders = new Dictionary <string, ReaderSettings>(); try { RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\VirtualSmartCard\RemoteReaders"); foreach (var name in regKey.GetSubKeyNames()) { var readerKey = regKey.OpenSubKey(name); var reader = ReaderSettings.GetSettings(readerKey); SimulatedReaders[reader.Name] = reader; readerKey.Close(); } regKey.Close(); } catch {} SmartCard sc = new SmartCard(); var s = sc.ListReaders(); foreach (String r in s) { ReaderSettings settings = null; sc.Connect(r, SmartCard.share.SCARD_SHARE_DIRECT, SmartCard.protocol.SCARD_PROTOCOL_UNDEFINED); try { byte[] isSimulated = sc.GetAttrib(0x7a009); if (isSimulated != null) { int readerType = isSimulated[0]; if (readerType == 0) { var pipeSettings = new PipeReaderSettings(); byte[] data; pipeSettings.PipeName = Encoding.ASCII.GetString((data = sc.GetAttrib(0x07a00a)), 0, data.Length - 1); pipeSettings.EventPipeName = Encoding.ASCII.GetString((data = sc.GetAttrib(0x07a00b)), 0, data.Length - 1); pipeSettings.Host = "."; settings = pipeSettings; } else if (readerType == 1) { var tcpSettings = new TcpIpReaderSettings(); byte[] data; tcpSettings.Port = ((data = sc.GetAttrib(0x07a00c))[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24)); tcpSettings.EventPort = ((data = sc.GetAttrib(0x07a00d))[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24)); tcpSettings.Host = "127.0.0.1"; settings = tcpSettings; } } settings.Name = r; settings.IsRemote = false; SimulatedReaders[r] = settings; } catch { } finally { sc.Disconnect(SmartCard.disposition.SCARD_LEAVE_CARD); } } ScanForCards(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main()); }