public SmartCardTransaction(ABC4TrustSmartCard device, SCardReaderDisposition disMethod = SCardReaderDisposition.Leave) { this.device = device; this.disMethod = disMethod; int noRetry = 10; int i = 0; if (device.doProfile) { profileLogger = Logger.Instance.getLog(device.pInfo.loggerToUse); timer = new AbcTimer(); timer.Start(); } while (TryTransaction() != 0) { if (i < noRetry) { System.Threading.Thread.Sleep(1000); } else { // TODO find a better exception. throw new Exception("Could not get exclusive lock on card"); } ++i; } }
/// <summary>Terminates a connection made through <see cref="M:PCSC.ISCardReader.Connect(System.String,PCSC.SCardShareMode,PCSC.SCardProtocol)" />.</summary> /// <param name="disconnectExecution">Reader function to execute.</param> /// <returns> /// <list type="table"> /// <listheader> /// <term>Return value</term> /// <description>Description</description> /// </listheader> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.Success" /> /// </term> /// <description>Successful (SCARD_S_SUCCESS)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidHandle" /> /// </term> /// <description>Invalid card handle (SCARD_E_INVALID_HANDLE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidValue" /> /// </term> /// <description>Invalid <paramref name="disconnectExecution" /> (SCARD_E_INVALID_VALUE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NoService" /> /// </term> /// <description>The server is not runing (SCARD_E_NO_SERVICE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NoSmartcard" /> /// </term> /// <description>No smart card present (SCARD_E_NO_SMARTCARD)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.CommunicationError" /> /// </term> /// <description>An internal communications error has been detected (SCARD_F_COMM_ERROR)</description> /// </item> /// </list> /// </returns> /// <remarks> /// <para>This method calls the API function SCardDisconnect().</para> /// <example> /// <code lang="C#"> /// // Establish PC/SC context. /// SCardContext ctx = new SCardContext(); /// ctx.Establish(SCardScope.System); /// /// // Create a Smart Card reader object and connect to it. /// ISCardReader reader = new SCardReader(ctx); /// SCardError serr = reader.Connect("OMNIKEY", SCardShareMode.Shared, SCardProtocol.Any); /// /// // Disconnect the reader and reset the SmartCard. /// reader.Disconnect(SCardReaderDisposition.Reset); /// </code> /// </example> /// </remarks> public SCardError Disconnect(SCardReaderDisposition disconnectExecution) { ThrowOnInvalidCardHandle(); var rc = Platform.Lib.Disconnect(_cardHandle, disconnectExecution); if (rc != SCardError.Success) { return rc; } // reset local variables _readername = null; _cardHandle = IntPtr.Zero; _activeprot = SCardProtocol.Unset; _sharemode = SCardShareMode.Shared; return rc; }
/// <summary>Reestablishes a connection to a reader that was previously connected to using /// <see /// cref="M:PCSC.ISCardReader.Connect(System.String,PCSC.SCardShareMode,PCSC.SCardProtocol)" /> /// .</summary> /// <param name="mode">Mode of connection type: exclusive/shared. /// <list type="table"> /// <listheader> /// <term>Value</term><description>Description</description> /// </listheader> /// <item> /// <term> /// <see cref="F:PCSC.SCardShareMode.Shared" /> /// </term> /// <description>This application will allow others to share the reader. (SCARD_SHARE_SHARED)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardShareMode.Exclusive" /> /// </term> /// <description>This application will NOT allow others to share the reader. (SCARD_SHARE_EXCLUSIVE)</description> /// </item> /// </list> /// </param> /// <param name="preferredProtocol">Desired protocol use.</param> /// <param name="initialExecution">Desired action taken on the card/reader before reconnect.</param> /// <returns>An error code / return value: /// <list type="table"> /// <listheader> /// <term>Error code</term><description>Description</description> /// </listheader> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.Success" /> /// </term> /// <description>Successful (SCARD_S_SUCCESS)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidHandle" /> /// </term> /// <description>Invalid context handle (SCARD_E_INVALID_HANDLE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidParameter" /> /// </term> /// <description> /// <paramref name="preferredProtocol" /> is invalid or <see langword="null" /> (SCARD_E_INVALID_PARAMETER)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidValue" /> /// </term> /// <description>Invalid sharing mode, requested protocol, or reader name (SCARD_E_INVALID_VALUE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NoService" /> /// </term> /// <description>The server is not runing (SCARD_E_NO_SERVICE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NoSmartcard" /> /// </term> /// <description>No smart card present (SCARD_E_NO_SMARTCARD)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NotReady" /> /// </term> /// <description>Could not allocate the desired port (SCARD_E_NOT_READY)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.ProtocolMismatch" /> /// </term> /// <description>Requested protocol is unknown (SCARD_E_PROTO_MISMATCH)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.ReaderUnavailable" /> /// </term> /// <description>Could not power up the reader or card (SCARD_E_READER_UNAVAILABLE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.SharingViolation" /> /// </term> /// <description>Someone else has exclusive rights (SCARD_E_SHARING_VIOLATION)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.UnsupportedFeature" /> /// </term> /// <description>Protocol not supported (SCARD_E_UNSUPPORTED_FEATURE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.CommunicationError" /> /// </term> /// <description>An internal communications error has been detected (SCARD_F_COMM_ERROR)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InternalError" /> /// </term> /// <description>An internal consistency check failed (SCARD_F_INTERNAL_ERROR)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.RemovedCard" /> /// </term> /// <description>The smart card has been removed (SCARD_W_REMOVED_CARD)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.UnresponsiveCard" /> /// </term> /// <description>Card is mute (SCARD_W_UNRESPONSIVE_CARD)</description> /// </item> /// </list> /// </returns> /// <remarks> /// <para> /// <paramref name="preferredProtocol" /> is a bit mask of acceptable protocols for the connection. You can use (<see cref="F:PCSC.SCardProtocol.T0" /> | <see cref="F:PCSC.SCardProtocol.T1" />) if you do not have a preferred protocol. The protocol used with this connection will be stored in <see cref="P:PCSC.ISCardReader.ActiveProtocol" />.</para> /// <para>This method calls the API function SCardReconnect().</para> /// </remarks> public SCardError Reconnect(SCardShareMode mode, SCardProtocol preferredProtocol, SCardReaderDisposition initialExecution) { ThrowOnInvalidCardHandle(); SCardProtocol dwActiveProtocol; var rc = Platform.Lib.Reconnect(_cardHandle, mode, preferredProtocol, initialExecution, out dwActiveProtocol); if (rc != SCardError.Success) { return rc; } _activeprot = dwActiveProtocol; _sharemode = mode; return rc; }
public SCardError Reconnect( IntPtr hCard, SCardShareMode dwShareMode, SCardProtocol dwPreferredProtocols, SCardReaderDisposition dwInitialization, out SCardProtocol pdwActiveProtocol) { IntPtr activeproto; IntPtr result = SCardReconnect( (IntPtr)hCard, (IntPtr)dwShareMode, (IntPtr)dwPreferredProtocols, (IntPtr)dwInitialization, out activeproto); pdwActiveProtocol = (SCardProtocol)activeproto; return SCardHelper.ToSCardError(result); }
public SCardError EndTransaction( IntPtr hCard, SCardReaderDisposition dwDisposition) { return SCardHelper.ToSCardError( SCardEndTransaction( (IntPtr)hCard, (IntPtr)dwDisposition)); }
public SCardError Disconnect( IntPtr hCard, SCardReaderDisposition dwDisposition) { return SCardHelper.ToSCardError( SCardDisconnect( (IntPtr)hCard, (IntPtr)dwDisposition)); }
public SCardError Disconnect(IntPtr hCard, SCardReaderDisposition dwDisposition) { return(SCardHelper.ToSCardError(MacOsxNativeMethods.SCardDisconnect(hCard.ToInt32(), (int)dwDisposition))); }
public SCardError EndTransaction(SCardReaderDisposition disposition) { if (cardHandle.Equals(IntPtr.Zero)) throw new InvalidOperationException( "Reader is currently not connected or no card handle has been returned."); return SCardAPI.Lib.EndTransaction(cardHandle, disposition); }
public SCardError Reconnect(IntPtr hCard, SCardShareMode dwShareMode, SCardProtocol dwPreferredProtocols, SCardReaderDisposition dwInitialization, out SCardProtocol pdwActiveProtocol) { var result = SCardReconnect( hCard, (int)dwShareMode, (int)dwPreferredProtocols, (int)dwInitialization, out var activeproto); pdwActiveProtocol = (SCardProtocol)activeproto; return(SCardHelper.ToSCardError(result)); }
/// <summary>Disconnects the currently connected reader.</summary> /// <param name="disposition">The action that shall be executed after disconnect.</param> public virtual void Disconnect(SCardReaderDisposition disposition) { Reader?.Disconnect(disposition); }
/// <summary>Disconnects the currently connected reader.</summary> /// <param name="disposition">The action that shall be executed after disconnect.</param> public virtual void Disconnect(SCardReaderDisposition disposition) { _reader?.Disconnect(disposition); }
public SCardError EndTransaction(IntPtr hCard, SCardReaderDisposition dwDisposition) { return(SCardHelper.ToSCardError(SCardEndTransaction(hCard, (IntPtr)dwDisposition))); }
public SCardError Disconnect(IntPtr hCard, SCardReaderDisposition dwDisposition) { return(SCardHelper.ToSCardError(SCardDisconnect(hCard, (IntPtr)dwDisposition))); }
public SCardError EndTransaction(IntPtr hCard, SCardReaderDisposition dwDisposition) { return(SCardHelper.ToSCardError(MacOsxNativeMethods.SCardEndTransaction(hCard.ToInt32(), (int)dwDisposition))); }
/// <summary>Ends a previously begun transaction.</summary> /// <param name="disposition">Action to be taken on the reader.</param> /// <returns> /// <list type="table"> /// <listheader> /// <term>Return value</term> /// <description>Description</description> /// </listheader> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.Success" /> /// </term> /// <description>Successful (SCARD_S_SUCCESS)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidHandle" /> /// </term> /// <description>Invalid card handle (SCARD_E_INVALID_HANDLE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.InvalidValue" /> /// </term> /// <description>Invalid value for <paramref name="disposition" /> (SCARD_E_INVALID_VALUE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.NoService" /> /// </term> /// <description>The server is not runing (SCARD_E_NO_SERVICE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.ReaderUnavailable" /> /// </term> /// <description>The reader has been removed (SCARD_E_READER_UNAVAILABLE)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.SharingViolation" /> /// </term> /// <description>Someone else has exclusive rights (SCARD_E_SHARING_VIOLATION)</description> /// </item> /// <item> /// <term> /// <see cref="F:PCSC.SCardError.CommunicationError" /> /// </term> /// <description>An internal communications error has been detected (SCARD_F_COMM_ERROR)</description> /// </item> /// </list> /// </returns> /// <remarks> /// <para>The calling application must be the owner of the previously begun transaction or an error will occur.</para> /// <para>This method calls the API function SCardEndTransaction().</para> /// <block subset="none" type="note"> /// <para>The disposition action is not currently used in PC/SC Lite on UNIX/Linux machines.</para> /// </block> /// </remarks> public SCardError EndTransaction(SCardReaderDisposition disposition) { ThrowOnInvalidCardHandle(); return Platform.Lib.EndTransaction(_cardHandle, disposition); }
public SCardError Disconnect(SCardReaderDisposition discntExec) { if (cardHandle.Equals(IntPtr.Zero)) throw new InvalidOperationException( "Reader is currently not connected or no card handle has been returned."); SCardError rc = SCardAPI.Lib.Disconnect(cardHandle, discntExec); if (rc == SCardError.Success) { // reset local variables readername = null; cardHandle = IntPtr.Zero; activeprot = SCardProtocol.Unset; sharemode = SCardShareMode.Shared; } return rc; }
/// <summary>Disconnects the currently connected reader.</summary> /// <param name="disposition">The action that shall be executed after disconnect.</param> public virtual void Disconnect(SCardReaderDisposition disposition) { if (_reader != null) { _reader.Disconnect(disposition); } }
public SCardError Reconnect(SCardShareMode mode, SCardProtocol prefProto, SCardReaderDisposition initExec) { if (cardHandle.Equals(IntPtr.Zero)) throw new InvalidOperationException( "Reader is currently not connected or no card handle has been returned."); SCardProtocol dwActiveProtocol = activeprot; SCardError rc = SCardAPI.Lib.Reconnect(cardHandle, mode, prefProto, initExec, out dwActiveProtocol); if (rc == SCardError.Success) { activeprot = dwActiveProtocol; sharemode = mode; } return rc; }
/// <inheritdoc /> public SCardError EndTransaction(SCardReaderDisposition disposition) { ThrowOnInvalidCardHandle(); return(Platform.Lib.EndTransaction(_cardHandle, disposition)); }