Beispiel #1
0
        /// <inheritdoc />
        /// <summary>
        /// Removes reader form the group.
        /// </summary>
        /// <param name="readerName">Name of the reader.</param>
        /// <param name="groupName">Name of the group.</param>
        public void RemoveReaderFromGroup(string readerName, string groupName)
        {
            var nullTerminatedBytesArray1 = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, readerName).ToArray();
            var nullTerminatedBytesArray2 = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, groupName).ToArray();

            WinSCardWrapper.RemoveReaderFromGroup(Handle, nullTerminatedBytesArray1, nullTerminatedBytesArray2);
        }
Beispiel #2
0
        /// <inheritdoc />
        /// <summary>
        /// List reader groups existing in the system.
        /// </summary>
        /// <returns>String array with names of available reader groups.</returns>
        public IReadOnlyList <string> ListReaderGroups()
        {
            var multiNullTerminatedBytesArray = WinSCardWrapper.ListReaderGroups(Handle);

            return((IReadOnlyList <string>)BinaryHelper.ConvertByteToString(Encoding,
                                                                            multiNullTerminatedBytesArray));
        }
Beispiel #3
0
        /// <inheritdoc />
        /// <summary>
        /// Introduce additional alias of given device to the smart card resource manager.
        /// </summary>
        /// <param name="readerName">Additional name for the device.</param>
        /// <param name="deviceName">Name of the device.</param>
        public void IntroduceReader(string readerName, string deviceName)
        {
            var nullTerminatedBytesArray1 = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, readerName).ToArray();
            var nullTerminatedBytesArray2 = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, deviceName).ToArray();

            WinSCardWrapper.IntroduceReader(Handle, nullTerminatedBytesArray1, nullTerminatedBytesArray2);
        }
        public void Reconnect(CardInitialization initialization, ReaderSharingMode mode, Protocol preferredProtocol)
        {
            var connectResult = WinSCardWrapper.Reconnect(Handle, mode, initialization, preferredProtocol);

            Handle         = connectResult.ConnectionHandle;
            ActiveProtocol = connectResult.Protocol;
            ConnectionMode = mode;
        }
Beispiel #5
0
        /// <inheritdoc />
        /// <summary>
        /// </summary>
        /// <param name="timeout"></param>
        /// <param name="readerStates"></param>
        public IReadOnlyList <ReaderState> GetStatusChange(int timeout, IReadOnlyList <ReaderState> readerStates)
        {
            var temporaryStructArray = readerStates.ToArray();

            WinSCardWrapper.GetStatusChange(Handle, timeout, ref temporaryStructArray, temporaryStructArray.Length);

            return(temporaryStructArray);
        }
        public void Connect(ReaderSharingMode mode, Protocol preferredProtocol)
        {
            var readerNameBytes = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, PcscReaderName);
            var connectResult   = WinSCardWrapper.Connect(ContextHandler.Instance.Handle, readerNameBytes.ToArray(), mode, preferredProtocol);

            Handle         = connectResult.ConnectionHandle;
            ActiveProtocol = connectResult.Protocol;
            ConnectionMode = mode;
        }
        public void Disconnect(CardDisposition disposeAction)
        {
            WinSCardWrapper.Disconnect(Handle, disposeAction);

            Handle          = IntPtr.Zero;
            ActiveProtocol  = Protocol.None;
            ConnectionMode  = ReaderSharingMode.NotSet;
            ActiveCardState = CardState.Unknown;
        }
Beispiel #8
0
        /// <inheritdoc />
        /// <summary>
        /// Establish context handle for winscard resource manager.
        /// </summary>
        /// <param name="scope">Defines for the scope input parameter.</param>
        public void Establish(Scope scope)
        {
            if (_hasContext && IsValid())
            {
                Release();
            }

            _contextHandle = WinSCardWrapper.EstablishContext(scope);

            _hasContext    = true;
            _previousScope = scope;
        }
Beispiel #9
0
        /// <inheritdoc />
        /// <summary>
        /// Release context handle established by <see cref="M:HidGlobal.OK.Readers.ContextHandler.Establish(HidGlobal.OK.Readers.Components.Scope)" />.
        /// </summary>
        public void Release()
        {
            if (!_hasContext)
            {
                return;
            }

            WinSCardWrapper.ReleaseContext(_contextHandle);

            _hasContext    = false;
            _contextHandle = IntPtr.Zero;
        }
Beispiel #10
0
        /// <inheritdoc />
        /// <summary>
        /// Check if curently held context handle is valid.
        /// </summary>
        /// <returns>True if context handle is valid, false otherwise.</returns>
        public bool IsValid()
        {
            var isValid = true;

            try
            {
                WinSCardWrapper.IsValidContext(_contextHandle);
            }
            catch
            {
                // exception Ignored
                isValid = false;
            }
            return(isValid);
        }
        public ConnectionStatus CheckConnectionStatus()
        {
            var dataConnectionStatus = WinSCardWrapper.GetConnectionStatus(Handle);

            ActiveProtocol  = dataConnectionStatus.ActiveProtocol;
            ActiveCardState = dataConnectionStatus.Status;

            return(new ConnectionStatus
            {
                ActiveProtocol = dataConnectionStatus.ActiveProtocol,
                CardAnswerToReset = dataConnectionStatus.CardAnswerToReset,
                ReaderAliases =
                    (IReadOnlyList <string>)BinaryHelper.ConvertMultiNullTerminatedStringFromBytesToStringArray(
                        Encoding, dataConnectionStatus.ConnectedReaderNames),
                Status = dataConnectionStatus.Status
            });
        }
Beispiel #12
0
        /// <inheritdoc />
        /// <summary>
        /// Lists readers within given reader groups.
        /// </summary>
        /// <param name="readerGroups">Names of the reader groups</param>
        /// <returns>String array with names of active readers.</returns>
        public IReadOnlyList <string> ListReaders(IReadOnlyList <string> readerGroups)
        {
            byte[] multiNullTerminatedBytesArray;

            try
            {
                var readerGroupsBytes = readerGroups == null
                    ? null
                    : BinaryHelper.ConvertMultiNullTerminatedByteArrayFromStringEnumerable(Encoding, readerGroups)
                                        .ToArray();

                multiNullTerminatedBytesArray = WinSCardWrapper.ListReaders(Handle, readerGroupsBytes);
            }
            catch (Win32Exception e) when(e.ErrorCodeEquals(0x8010002E))  // 0x8010002E -> SCARD_E_NO_READERS_AVAILABLE
            {
                multiNullTerminatedBytesArray = new byte [0];
            }

            return((IReadOnlyList <string>)BinaryHelper.ConvertByteToString(Encoding,
                                                                            multiNullTerminatedBytesArray));
        }
        public IReadOnlyList <byte> Control(ReaderControlCode controlCode, IReadOnlyList <byte> dataBytes)
        {
            WinSCardWrapper.Control(Handle, controlCode, dataBytes.ToArray(), ref _buffer, out var dataSize);

            return(_buffer.Take(dataSize).ToArray());
        }
        public IReadOnlyList <byte> Transmit(ref IoRequest sendPci, ref IoRequest recivePci, IReadOnlyList <byte> apdu)
        {
            WinSCardWrapper.Transmit(Handle, ref sendPci, ref recivePci, apdu.ToArray(), ref _buffer, out var dataSize);

            return(_buffer.Take(dataSize).ToArray());
        }
Beispiel #15
0
        /// <inheritdoc />
        /// <summary>
        /// Removes reader from the smart card resource manager.
        /// </summary>
        /// <param name="readerName">Name of the reader.</param>
        public void ForgetReader(string readerName)
        {
            var nullTerminatedBytesArray1 = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, readerName).ToArray();

            WinSCardWrapper.ForgetReader(Handle, nullTerminatedBytesArray1);
        }
        public IReadOnlyList <byte> GetAttribiute(Attribiutes attribiuteId)
        {
            WinSCardWrapper.GetAttrib(Handle, attribiuteId, ref _buffer, out var dataSize);

            return((IReadOnlyList <byte>)_buffer.Take(dataSize));
        }
Beispiel #17
0
 /// <inheritdoc />
 /// <summary>
 /// Cancel blocking request of <see cref="M:HidGlobal.OK.Readers.ContextHandler.GetStatusChange(System.Int32,HidGlobal.OK.Readers.Components.ReaderState[]@)" />.
 /// </summary>
 public void Cancel()
 {
     WinSCardWrapper.Cancel(Handle);
 }
 public void SetAttribiute(Attribiutes attribiuteId, IReadOnlyList <byte> attribute)
 {
     WinSCardWrapper.SetAttrib(Handle, attribiuteId, attribute.ToArray());
 }
Beispiel #19
0
        /// <inheritdoc />
        /// <summary>
        /// Deletes reader group from smart card resource manager.
        /// </summary>
        /// <param name="groupName">Name of the reader group.</param>
        public void ForgetReaderGroup(string groupName)
        {
            var nullTerminatedBytesArray = BinaryHelper.ConvertNullTerminatedByteArrayFromString(Encoding, groupName).ToArray();

            WinSCardWrapper.ForgetReaderGroup(Handle, nullTerminatedBytesArray);
        }
 public void BeginTransaction()
 {
     WinSCardWrapper.BeginTransaction(Handle);
 }
        public IReadOnlyList <byte> Transmit(IReadOnlyList <byte> apdu)
        {
            WinSCardWrapper.Transmit(Handle, ActiveProtocol, apdu.ToArray(), ref _buffer, out var dataSize);

            return(_buffer.Take(dataSize).ToArray());
        }
 public void EndTransaction(CardDisposition disposition)
 {
     WinSCardWrapper.EndTransaction(Handle, disposition);
 }