Driver 如何正确获取SCARD\u ATTR\u设备\u单元

Driver 如何正确获取SCARD\u ATTR\u设备\u单元,driver,smartcard,smartcard-reader,pcsc,umdf,Driver,Smartcard,Smartcard Reader,Pcsc,Umdf,我正在开发一个智能卡UMDF windows驱动程序。我希望实现以下行为: 当使用API调用列出所有连接的读卡器时,我希望为每个连接的读卡器检索正确的友好名称。因此,例如,如果我有两个相同品牌的阅读器,我希望司机返回: SmartcardBrand USBReader 0 SmartcardBrand USBReader 1 我知道友好名称由驱动程序返回的属性SCARD\u ATTR\u VENDOR\u name、SCARD\u ATTR\u VENDOR\u IFD\u TYPE和SCAR

我正在开发一个智能卡UMDF windows驱动程序。我希望实现以下行为:

当使用API调用列出所有连接的读卡器时,我希望为每个连接的读卡器检索正确的友好名称。因此,例如,如果我有两个相同品牌的阅读器,我希望司机返回:

SmartcardBrand USBReader 0
SmartcardBrand USBReader 1
我知道友好名称由驱动程序返回的属性
SCARD\u ATTR\u VENDOR\u name
SCARD\u ATTR\u VENDOR\u IFD\u TYPE
SCARD\u ATTR\u DEVICE\u UNIT
组成

我的问题是,在我的驱动程序中,如何区分
SmartcardBrand USBReader 0
SmartcardBrand USBReader 1

当请求了
SCARD\u ATTR\u DEVICE\u UNIT
时,我应该返回操作系统什么。我无法在我的驱动程序中使用和增加全局静态变量,因为每次连接新的读卡器时,都会启动一个新的UMDF主机进程(我可以在任务管理器中看到它),从而产生一个单独的新内存区域

在UMDF驱动程序中计算设备实例的正确方法是什么


我用电脑解决了这个问题。基本上,我的驱动程序的每个UMDF进程都会创建一个内存映射文件,文件名为阅读器的友好名称。当其他进程尝试创建同名文件时,表示驱动程序已在运行

但是,当我连接使用我的驱动程序的读卡器时,与随后连接使用Windows本机驱动程序的读卡器时,存在不一致。Windows驱动程序将看不到我创建的内存映射文件,并为其设备应用索引0

我发现,当加载Windows驱动程序时,它会从我的驱动程序(以及当前加载的所有其他驱动程序)查询
SCARD\u ATTR\u VENDOR\u IFD\u TYPE
SCARD\u ATTR\u VENDOR\u IFD\u TYPE
SCARD\u ATTR\u DEVICE\u UNIT
。我想这样Windows驱动程序就可以知道使用了哪些设备单元,并将一个免费单元应用到它的读卡器上