예제 #1
0
        public bool ResetReader(
            string SelectedReader,
            out string ATR)
        {
            String atr_temp = "";
            String s        = "";
            bool   boRet    = true;

            ATR = atr_temp;

            // Disconnect to with reset disposition
            LastError = WinSCard.SCardDisconnect(
                _cardHandle,
                (int)SCardReaderDisposition.Reset);

            if (!IsSuccess(LastError))
            {
                return(false);
            }

            // Connect to selected reader
            if (!ConnectReader(SelectedReader))
            {
                return(false);
            }

            // Init readerState
            SCARD_READERSTATE readerState = new SCARD_READERSTATE
            {
                RdrName       = SelectedReader,
                RdrCurrState  = 0,
                RdrEventState = 0,
                UserData      = "Card",
            };

            // Get Status Change
            LastError = WinSCard.SCardGetStatusChange(
                _context,
                0,
                ref readerState,
                1);

            if (!IsSuccess(LastError))
            {
                return(false);
            }

            StringBuilder hex = new StringBuilder(readerState.ATRValue.Length * 2);

            foreach (byte b in readerState.ATRValue)
            {
                hex.AppendFormat("{0:X2}", b);
            }
            atr_temp = hex.ToString();

            ATR = atr_temp;
            return(boRet);
        }
예제 #2
0
        public bool DisconnectReader()
        {
            try
            {
                // Disconnect to selected Card Handle
                LastError = WinSCard.SCardDisconnect(
                    _cardHandle,
                    (int)SCardReaderDisposition.Unpower);

                if (!IsSuccess(LastError))
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception)
            {
                throw;
            }
        }