/// <summary> /// The SCardReconnect function reestablishes an existing connection between the calling application and /// a smart card. This function moves a card handle from direct access to general access, or acknowledges /// and clears an error condition that is preventing further access to the card. /// </summary> /// <param name="dwShareMode"> /// A flag that indicates whether other applications may form connections to the card. /// </param> /// <param name="dwPrefProtocol"> /// A bitmask of acceptable protocols for the connection. Possible values may be combined with the OR operation. /// </param> /// <param name="disconnectAction"> /// Action to take on the card in the connected reader on close. /// </param> /// <returns> /// If the function succeeds, the function returns SCARD_S_SUCCESS. /// If the function fails, it returns an error code. /// </returns> public void Reconnect(SCARD_SHARE_MODE dwShareMode, SCARD_PROTOCOL dwPrefProtocol, SCARD_DISCONNECT disconnectAction) { int ret = WinSCardAPIWrapper.SCardReconnect(phCARD, (uint)dwShareMode, (uint)dwPrefProtocol, (uint)disconnectAction, out activeSCardProtocol); if (ret == 0) { Trace.WriteLineIf(scardTrace, String.Format(" SCard.Reconnect(SHARE_MODE.{0}, SCARD_PROTOCOL.{1}, SCARD_DISCONNECT.{2} )", dwShareMode, (SCARD_PROTOCOL)dwPrefProtocol, (SCARD_DISCONNECT)disconnectAction)); Trace.WriteLineIf(scardTrace, String.Format(" Active Protocol: SCARD_PROTOCOL.{0} ", (SCARD_PROTOCOL)activeSCardProtocol)); Trace.WriteLineIf(this.TraceSCard, HexFormatting.Dump(" ATR: 0x", this.Atr, this.Atr.Length, 24)); } else { throw new WinSCardException(scardTrace, "SCard.Reconnect", ret); } }
/// <summary> /// Activates the card. /// </summary> /// <param name="dwShareMode"> /// A flag that indicates whether other applications may form connections to the card. /// </param> /// <param name="dwPrefProtocol"> /// A bitmask of acceptable protocols for the connection. Possible values may be combined with the OR operation. /// </param> public void ActivateCard(SCARD_SHARE_MODE dwShareMode, SCARD_PROTOCOL dwPrefProtocol) { try { this.SCard.WaitForCardPresent(this.readerName); this.SCard.Connect(this.readerName, dwShareMode, dwPrefProtocol); } catch (WinSCardException ex) { throw ex; } catch (Exception ex) { throw ex; } }
// The SCardConnect function establishes a connection (using a specific resource manager context) // between the calling application and a smart card contained by a specific reader. // If no card exists in the specified reader, an error is returned. // The name of the reader that contains the target card. // <param name="dwShareMode"> // A flag that indicates whether other applications may form connections to the card. // A bitmask of acceptable protocols for the connection. Possible values may be combined with the OR operation. public void Connect(string szReader, SCARD_SHARE_MODE dwShareMode, SCARD_PROTOCOL dwPrefProtocol) { int ret = WinSCardAPIWrapper.SCardConnect( phContext, szReader, (uint)dwShareMode, (uint)dwPrefProtocol, out phCARD, out activeSCardProtocol ); if (ret == 0) { connectedReaderName = szReader; Trace.WriteLineIf(scardTrace, String.Format(" SCard.Connect({0}, SHARE_MODE.{1}, SCARD_PROTOCOL.{2})", szReader, dwShareMode, (SCARD_PROTOCOL)dwPrefProtocol)); Trace.WriteLineIf(scardTrace, String.Format(" Active Protocol: SCARD_PROTOCOL.{0} ",(SCARD_PROTOCOL)activeSCardProtocol)); Trace.WriteLineIf(this.TraceSCard, HexFormatting.Dump(" ATR: 0x", this.Atr, this.Atr.Length, 24)); } else { connectedReaderName = null; throw new WinSCardException( scardTrace, "SCard.Connect", ret ); //Trace.WriteLineIf(pcscTrace, String.Format(" Error: SCardConnect failed with 0x{0:X8}.", ret)); } }
/// <summary> /// The SCardConnect function establishes a connection (using a specific resource manager context) /// between the calling application and a smart card contained by a specific reader. /// If no card exists in the specified reader, an error is returned. /// </summary> /// <param name="szReader"> /// The name of the reader that contains the target card. /// </param> /// <param name="dwShareMode"> /// A flag that indicates whether other applications may form connections to the card. /// </param> /// <param name="dwPrefProtocol"> /// A bitmask of acceptable protocols for the connection. Possible values may be combined with the OR operation. /// </param> public void Connect(string szReader, SCARD_SHARE_MODE dwShareMode, SCARD_PROTOCOL dwPrefProtocol) { int ret = WinSCardAPIWrapper.SCardConnect(phContext, szReader, (uint)dwShareMode, (uint)dwPrefProtocol, out phCARD, out activeSCardProtocol); if (ret == 0) { connectedReaderName = szReader; Trace.WriteLineIf(scardTrace, String.Format(" SCard.Connect({0}, SHARE_MODE.{1}, SCARD_PROTOCOL.{2})", szReader, dwShareMode, (SCARD_PROTOCOL)dwPrefProtocol)); Trace.WriteLineIf(scardTrace, String.Format(" Active Protocol: SCARD_PROTOCOL.{0} ", (SCARD_PROTOCOL)activeSCardProtocol)); Trace.WriteLineIf(this.TraceSCard, HexFormatting.Dump(" ATR: 0x", this.Atr, this.Atr.Length, 24)); } else { connectedReaderName = null; throw new WinSCardException(scardTrace, "SCard.Connect", ret); //Trace.WriteLineIf(pcscTrace, String.Format(" Error: SCardConnect failed with 0x{0:X8}.", ret)); } }
public static extern HRESULT SCardConnectW(IntPtr hContext, string reader, SCARD_SHARE_MODE shareMode, SCARD_PROTOCOL preferredProtocolFlags, [Out] out IntPtr hCard, [Out] out SCARD_PROTOCOL activeProtocol);
public void Reconnect(SCARD_SHARE_MODE dwShareMode, SCARD_PROTOCOL dwPrefProtocol, SCARD_DISCONNECT disconnectAction) { int ret = WinSCardAPIWrapper.SCardReconnect( phCARD, (uint)dwShareMode, (uint)dwPrefProtocol, (uint)disconnectAction, out activeSCardProtocol); if (ret == 0) { Trace.WriteLineIf(scardTrace, String.Format(" SCard.Reconnect(SHARE_MODE.{0}, SCARD_PROTOCOL.{1}, SCARD_DISCONNECT.{2} )", dwShareMode, (SCARD_PROTOCOL)dwPrefProtocol, (SCARD_DISCONNECT)disconnectAction)); Trace.WriteLineIf(scardTrace, String.Format(" Active Protocol: SCARD_PROTOCOL.{0} ", (SCARD_PROTOCOL)activeSCardProtocol)); Trace.WriteLineIf(this.TraceSCard, HexFormatting.Dump(" ATR: 0x",this.Atr,this.Atr.Length,24)); } else { throw new WinSCardException(scardTrace, "SCard.Reconnect", ret); } }