为了从CryptAcquireContext()
获取加密上下文,我需要知道插槽中当前智能卡的提供商名称。
根据文档,SCardGetCardTypeProviderName()
将执行此操作,但参数2是卡名称,我无法看到如何以非交互方式确定此名称。我见过的所有文档/示例都要么对名称进行编码,要么依赖SCardUIDlgSelectCard()
来显示UI。
同样阅读SCardLocateCards()
,虽然它需要一个智能卡名称列表(我正在为SCardListCards()
填充),它似乎没有传回任何标识智能卡名称的内容插入
我怀疑我错过了一些明显的东西,但我看不清楚。
答案 0 :(得分:0)
我错过了一些东西。 SCardLocateCards
作为结构的一部分返回智能卡的ATR,然后可以在SCardListCards
中使用:
SCARD_READERSTATE smartcardState[MAXIMUM_SMARTCARD_READERS];
result = SCardLocateCards (context, cardsList, smartcardState, readerCount);
if (result == SCARD_S_SUCCESS) {
int i;
for (i = 0; i < readerCount; i++)
{
if (SCARD_STATE_ATRMATCH & smartcardState[i].dwEventState) {
break;
}
}
result = SCardListCards (NULL, smartcardState[i].rgbAtr, NULL, NULL, cardName, &count);
if (result == SCARD_S_SUCCESS) {
// Cardname for CryptAquireContext in cardName
}
}
如果有人有更好的前进路线让我知道 - 我认为这是我能看到的唯一途径。