Smartcard 获得;名称“;SCardGetCardTypeProviderName()智能卡的
为了从Smartcard 获得;名称“;SCardGetCardTypeProviderName()智能卡的,smartcard,winscard,Smartcard,Winscard,为了从CryptAcquireContext()获取加密上下文,我需要知道插槽中当前智能卡的提供商名称 根据文档,SCardGetCardTypeProviderName()将执行此操作,但param 2是卡名,我看不出如何以非交互方式确定该名称。我所看到的所有文档/示例要么为名称编码,要么依赖于显示UI的SCardUIDlgSelectCard() 类似地,阅读周围的SCardLocateCards(),虽然它需要一个智能卡名称列表(我从SCardListCards()中填充),但它似乎没有传
CryptAcquireContext()
获取加密上下文,我需要知道插槽中当前智能卡的提供商名称
根据文档,SCardGetCardTypeProviderName()
将执行此操作,但param 2是卡名,我看不出如何以非交互方式确定该名称。我所看到的所有文档/示例要么为名称编码,要么依赖于显示UI的SCardUIDlgSelectCard()
类似地,阅读周围的SCardLocateCards()
,虽然它需要一个智能卡名称列表(我从SCardListCards()
中填充),但它似乎没有传回任何标识插入的智能卡名称的内容
我怀疑我遗漏了一些明显的东西,但我看不到什么。我遗漏了一些东西。
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
}
}
SCARD_读卡器状态智能卡状态[最大智能卡读卡器];
结果=SCardLocateCards(上下文、卡片列表、smartcardState、readerCount);
如果(结果==SCARD\U S\U SUCCESS){
int i;
对于(i=0;i
如果有人有更好的前进路线,请告诉我——从我所看到的情况来看,我认为这是唯一的办法