示例#1
0
        public Readers(ReaderScope scope)
        {
            uint retVal;

            switch (scope)
            {
            case ReaderScope.Null:
                context = new CardContextSafeHandler(IntPtr.Zero);
                break;

            case ReaderScope.System:
                retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_SYSTEM, IntPtr.Zero, IntPtr.Zero, out context);
                if (retVal != 0)
                {
                    throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
                }
                break;

            case ReaderScope.User:
                retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_USER, IntPtr.Zero, IntPtr.Zero, out context);
                if (retVal != 0)
                {
                    throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
                }
                break;
            }

            List = new List <string>();
            UpdateList();
        }
示例#2
0
        public Readers(ReaderScope scope)
        {
            uint retVal;

            switch (scope)
            {
            case ReaderScope.Null:
                context = new CardContextSafeHandler(IntPtr.Zero);
                break;

            case ReaderScope.System:
                retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_SYSTEM, IntPtr.Zero, IntPtr.Zero, out context);
                if (retVal != 0)
                {
                    throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
                }
                break;

            case ReaderScope.User:
                retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_USER, IntPtr.Zero, IntPtr.Zero, out context);
                if (retVal != 0)
                {
                    throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
                }
                break;
            }

            int size = 0;

            //List the readers
            //todo::listen for new readers changes (via the "\\?PnP?\Notification" reader)
            char[] readers = null;
            retVal = NativeMethods.SCardListReaders(context, null, readers, ref size);
            if (retVal != 0 && retVal != 0x8010002E)
            {
                throw new InvalidOperationException("Failed to list readers (length): 0x" + retVal.ToString("X"));
            }

            if (retVal == 0x8010002E) //no readers
            {
                List = new List <string>(0);
            }
            else
            {
                readers = new char[size];
                retVal  = NativeMethods.SCardListReaders(context, null, readers, ref size);
                if (retVal != 0)
                {
                    throw new InvalidOperationException("Failed to list readers: 0x" + retVal.ToString("X"));
                }

                List = MultiString.ToStringList(readers);
            }
        }
示例#3
0
文件: Readers.cs 项目: Cocotus/eid
 public Readers(ReaderScope scope)
 {
     uint retVal;
     switch (scope)
     {
         case ReaderScope.Null:
             context = new CardContextSafeHandler(IntPtr.Zero);
             break;
         case ReaderScope.System:
             retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_SYSTEM, IntPtr.Zero, IntPtr.Zero, out context);
             if (retVal != 0) throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
             break;
         case ReaderScope.User:
             retVal = NativeMethods.SCardEstablishContext(ContextScope.SCARD_SCOPE_USER, IntPtr.Zero, IntPtr.Zero, out context);
             if (retVal != 0) throw new InvalidOperationException("Failed to create static context for reader: 0x" + retVal.ToString("X"));
             break;
     }
 }