我正在开发一个javascript库,通过chrome webusb API使用CCID协议执行智能卡操作。当我在Linux和MacOS上插入智能卡读卡器时,一切顺利,但是当我尝试声明接口时,我被卡在窗户上。 我试图以管理员身份运行chrome,禁用智能卡服务/ Windows上的CCID驱动程序,如果它们声称接口,但没有任何东西。我一直都有 “无法声明界面:访问被拒绝(权限不足)” 信息。这真的是一个许可问题吗?或者它是一些我不知道阻止访问的Windows服务?
编辑:我尝试了另一个mac,读者无法正常工作。从CCID驱动程序info.plist中删除特定供应商ID /产品ID后,我设法使其工作。所以我想在Windows上发生同样的问题,CCID驱动程序正在“阻止”访问接口。我有什么选择?
设备描述符:
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1a44 VASCO Data Security International
idProduct 0x0001 Digipass 905 SmartCard Reader
bcdDevice 1.02
iManufacturer 1 VASCO
iProduct 2 DP905v1.1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 93
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 50mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 11 Chip/SmartCard
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
ChipCard Interface Descriptor:
bLength 54
bDescriptorType 33
bcdCCID 1.00
nMaxSlotIndex 0
bVoltageSupport 3 5.0V 3.0V
dwProtocols 3 T=0 T=1
dwDefaultClock 3700
dwMaxiumumClock 3700
bNumClockSupported 1
dwDataRate 9946 bps
dwMaxDataRate 318280 bps
bNumDataRatesSupp. 53
dwMaxIFSD 254
dwSyncProtocols 00000007 2-wire 3-wire I2C
dwMechanical 00000000
dwFeatures 000404BE
Auto configuration based on ATR
Auto activation on insert
Auto voltage selection
Auto clock change
Auto baud rate change
Auto PPS made by CCID
Auto IFSD exchange
Short and extended APDU level exchange
dwMaxCCIDMsgLen 272
bClassGetResponse echo
bClassEnvelope echo
wlcdLayout none
bPINSupport 0
bMaxCCIDBusySlots 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 32
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 0
答案 0 :(得分:4)
您的编辑中的洞察力是正确的,如果CCID驱动程序阻止访问该设备,则Chrome无法访问该设备。此外,在Windows上,操作系统必须知道要对设备加载WinUSB.sys驱动程序(随Windows附带),否则任何用户空间应用程序(如Chrome)都无法访问它。这可以使用this one等INF文件或将Microsoft OS descriptors添加到设备以将“兼容ID”设置为“WINUSB”来完成。
如果您正在构建自己的设备,则后一选项更可取,因为它将为您的用户提供即插即用支持,而前者仍需要Windows用户的手动安装步骤。
如果您正在使用现有设备但可以控制Windows系统,那么类似于编辑macOS驱动程序的Info.plist,您可以进入Windows设备管理器并使用WinUSB.sys替换现有驱动程序像上面这样的INF文件。
答案 1 :(得分:0)
我对此非常陌生,但据我所知,当本机驱动程序占用您的USB设备时,您丢失了,浏览器无法做到这一点。似乎修复可能是更改供应商或产品ID(如果您可以这样做),因此没有本机驱动程序会声明您的设备。如果这不是一个解决方案,Chrome应用程序有更多的可能性,并且可能能够克服这个问题。