/// <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); }
/// <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)); }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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 }); }
/// <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()); }
/// <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)); }
/// <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()); }
/// <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); }