Присвойте MIFARE SmartCard посетителю, используя C# - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть читатель SmartCard. Эта карта будет использоваться для системы посетителей. Я хочу иметь возможность назначить карту посетителю. Я думаю написать номер посещения посетителя на карточке при регистрации и очистить номер на карточке при оформлении заказа. Карта MIFARE. Байт ответа APDU при считывании карты равен 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A

Ниже приведены основные методы:

public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref IntPtr phContext);

устанавливает контекст диспетчера ресурсов, в котором выполняются операции базы данных. выполняется.

public static extern int SCardConnect(IntPtr hContext, string szReaderName, int dwShareMode, int dwPrefProtocol, ref IntPtr phCard, ref int activeProtocol);

Эта функция устанавливает соединение

public static extern int SCardListReaders(
            IntPtr hContext,
            byte[] Groups,
            byte[] Readers,
            ref int pcchReaders
            );

Это Функция предоставляет список читателей в наборе именованных групп читателей, исключая дубликаты

public static extern int SCardStatus(IntPtr hCard, string szReaderName, ref int pcchReaderLen, ref int State, ref int Protocol, byte[] ATR, ref int ATRLen);

показывает состояние смарт-карты

    public static extern int SCardState(IntPtr hCard, ref uint State, ref uint Protocol, ref byte ATR, ref uint ATRLen);

    public static extern int SCardTransmit(IntPtr hCard, ref SCARD_IO_REQUEST pioSendRequest, byte[] SendBuff, int SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest, byte[] RecvBuff, ref int RecvBuffLen);

Эта функция отправляет запрос на обслуживание на смарт-карту и ожидает получения данных обратно с карты.

    public static extern int SCardControl(IntPtr hCard, uint dwControlCode, byte[] SendBuff, int SendBuffLen, [In, Out] byte[] RecvBuff, int RecvBuffLen, [In, Out]  ref int pcbBytesReturned);

Эта функция обеспечивает непосредственное управление считывателем. Вы можете позвонить в любое время после успешного вызова SCardConnect и до успешного вызова SCardDisconnect.

для полной информации c см. https://docs.microsoft.com/en-us/windows/win32/api/winscard/.

- это метод, который я использую для связи с SmartCard

void cardPolling_OnCardFound(object sender, CardPollingEventArg e)
        {
            CardSelector cardSelector = new CardSelector();

            TextBoxStatus.Text = "Card found";
            TextBoxAtr.Text = Helper.byteAsString(e.atr, true);

            cardSelector.pcscReader = _pcscReader;
            TextBoxCardType.Text = cardSelector.readCardType(e.atr, (byte)e.atr.Length);
        }

Я ценю вашу помощь. спасибо.

Обновление:

карты уже имеют ID. Как я могу прочитать идентификационный номер карты?

...