gpt4 book ai didi

C# WinScard.SCardListReaders 应该只列出已连接的阅读器(但它列出了所有过去安装的现在未连接的阅读器名称)

转载 作者:行者123 更新时间:2023-12-04 15:53:20 40 4
gpt4 key购买 nike

请检查我下面的 C# 代码。我正在尝试获取现在连接到我的计算机的智能卡读卡器列表。但是这个函数返回所有过去连接的智能卡读卡器名称(我的意思是现在没有连接)。我只想要事件的(当前)连接的读者姓名列表。我无法理解问题出在哪里。

我尝试了这个 website 中的一个 exe它是用 C 语言编写和编译的。它只显示已连接的读者。我比较了代码,但我发现没有区别。请帮助找到修复方法。

public static int GetPCSCReaders(out List<string> smartCardReaders, out string errMsg)
{
errMsg = string.Empty;
byte[] readersList = null;
smartCardReaders = new List<string>();

try
{
int hContext = 0;
int ret = SCardEstablishContext(WinSCard.SCARD_SCOPE_USER, 0, 0, ref hContext);
if (ret != 0)
{
errMsg = "WinSCard GetPCSCReader: EstablishContext Error: " + ret.ToString();
return ret;
}

int byteCnt = 0;
ret = WinSCard.SCardListReaders(hContext, null, null, ref byteCnt);
if (ret != SCARD_S_SUCCESS)
{
errMsg = "WinSCard GetPCSCReader: ListReaders Error: " + ret.ToString();
return ret;
}

readersList = new byte[byteCnt];
ret = WinSCard.SCardListReaders(hContext, null, readersList, ref byteCnt);
if (ret != SCARD_S_SUCCESS)
{
errMsg = "WinSCard GetPCSCReader: ListReaders Error: " + ret.ToString();
return ret;
}

int indx = 0;
string readerName = string.Empty;
int i = 0;

while (readersList[indx] != 0)
{
while (readersList[indx] != 0)
{
readerName = readerName + (char)readersList[indx++];
}

smartCardReaders.Add(readerName);
i++;

readerName = "";
indx++;
}

}
catch (Exception ex)
{
errMsg = ex.Message;
}
finally
{
readersList = null;
}
return 0;
}

最佳答案

如果手头没有智能卡读卡器,很难回答这个问题,尽管我是在 3 个月前才开发这些代码的。

我之前的代码是基于这个: https://github.com/nicbedford/CardBrowser/blob/master/PCSC/PCSCReader.cs

它不是很完美,你必须自己检测错误。但这确实有帮助。

不同的windows平台有不同的解决方案。

  1. 窗口 8.1+:

https://code.msdn.microsoft.com/windowsapps/Smart-card-sample-c7d342e0#content

  1. 窗口 10:

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SmartCard

https://learn.microsoft.com/en-us/uwp/api/windows.devices.smartcards

  1. Windows 7+:

https://github.com/nicbedford/CardBrowser/tree/master/PCSC

https://github.com/orouit/SmartcardFramework

https://github.com/danm-de/pcsc-sharp/tree/master/src/PCSC

如果您在将 C++ 转换为 C# 时遇到问题,您可以在此处找到所有函数: https://www.pinvoke.net/default.aspx/winscard/SCardTransmit.html只需从左上​​角搜索函数即可。

关于C# WinScard.SCardListReaders 应该只列出已连接的阅读器(但它列出了所有过去安装的现在未连接的阅读器名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956938/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com