C++智能卡通信

C++ SmartCard communication

本文关键字:通信 智能卡 C++      更新时间:2023-10-16

我正在使用Windows.Devices.SmartCards命名空间与智能卡进行通信。我找到了读卡器,也找到了卡片。我还可以向卡发送 APDU 命令。但问题是,在几个 ADPU 之后,我收到的响应0x63 00 而不是 0x90 00。大多数情况下,它会在第二个或第三个 APDU 之后停止接收命令,在此之后,响应始终0x63 00,直到我取出卡并重新连接。

这是我的传输代码:

String^ NFC::transmit(Array<unsigned char>^ outgoing)
{
    String^ response = "";
    IBuffer^ out = CryptographicBuffer::CreateFromByteArray(outgoing);
    auto task = create_task(connection->TransmitAsync(out)).then([](IBuffer^ buffer) {
        return buffer;
    });
    IBuffer^ responseBuffer = task.get();
    response = CryptographicBuffer::EncodeToHexString(responseBuffer);
    return response;
}

connection是有效的SmartCardConnection^对象。

create_task函数来自 concurrency 命名空间。

  1. 我在沟通中错过了什么吗?
  2. 正如我发现的那样,0x63 00 意味着一般错误。你知道更多吗?
  3. 我在这个命名空间中没有发现如何使用协议 t=0 或 t=1。这很重要还是自动找到?

您需要捕获异常以查看实际发生的情况。

例如,在获取缓冲区时尝试如下操作:

    try
    {
        IBuffer^ responseBuffer = task.get();
    }
    catch (COMException ^ex)
    {
        std::cout << "Transmit APDU failed with exception:" + ex->ToString() << std::endl;
    }

裁判