コード例 #1
0
    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;
      } 
    }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
ファイル: PCSCliteAPI.cs プロジェクト: darko0201/eVR
        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);
        }
コード例 #5
0
ファイル: PCSCliteAPI.cs プロジェクト: darko0201/eVR
 public SCardError EndTransaction(
     IntPtr hCard,
     SCardReaderDisposition dwDisposition)
 {
     return SCardHelper.ToSCardError(
         SCardEndTransaction(
             (IntPtr)hCard,
             (IntPtr)dwDisposition));
 }
コード例 #6
0
ファイル: PCSCliteAPI.cs プロジェクト: darko0201/eVR
 public SCardError Disconnect(
     IntPtr hCard,
     SCardReaderDisposition dwDisposition)
 {
     return SCardHelper.ToSCardError(
         SCardDisconnect(
             (IntPtr)hCard,
             (IntPtr)dwDisposition));
 }
コード例 #7
0
 public SCardError Disconnect(IntPtr hCard, SCardReaderDisposition dwDisposition)
 {
     return(SCardHelper.ToSCardError(MacOsxNativeMethods.SCardDisconnect(hCard.ToInt32(), (int)dwDisposition)));
 }
コード例 #8
0
ファイル: SCardReader.cs プロジェクト: RuiVarela/Nespresso
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
ファイル: IsoReader.cs プロジェクト: TomKaminski/pcsc-sharp
 /// <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);
 }
コード例 #11
0
 /// <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);
 }
コード例 #12
0
ファイル: PCSCliteAPI.cs プロジェクト: xxzztt/pcsc-sharp
 public SCardError EndTransaction(IntPtr hCard, SCardReaderDisposition dwDisposition)
 {
     return(SCardHelper.ToSCardError(SCardEndTransaction(hCard, (IntPtr)dwDisposition)));
 }
コード例 #13
0
ファイル: PCSCliteAPI.cs プロジェクト: xxzztt/pcsc-sharp
 public SCardError Disconnect(IntPtr hCard, SCardReaderDisposition dwDisposition)
 {
     return(SCardHelper.ToSCardError(SCardDisconnect(hCard, (IntPtr)dwDisposition)));
 }
コード例 #14
0
 public SCardError EndTransaction(IntPtr hCard, SCardReaderDisposition dwDisposition)
 {
     return(SCardHelper.ToSCardError(MacOsxNativeMethods.SCardEndTransaction(hCard.ToInt32(), (int)dwDisposition)));
 }
コード例 #15
0
        /// <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);
        }
コード例 #16
0
ファイル: SCardReader.cs プロジェクト: RuiVarela/Nespresso
        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;
        }
コード例 #17
0
ファイル: IsoReader.cs プロジェクト: thiti-y/pcsc-sharp
 /// <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);
     }
 }
コード例 #18
0
ファイル: SCardReader.cs プロジェクト: RuiVarela/Nespresso
        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;
        }
コード例 #19
0
        /// <inheritdoc />
        public SCardError EndTransaction(SCardReaderDisposition disposition)
        {
            ThrowOnInvalidCardHandle();

            return(Platform.Lib.EndTransaction(_cardHandle, disposition));
        }