我正在开发一个JavaScript库,以使用Chrome WebUSB API使用CCID协议执行智能卡操作。当我将智能卡读取器插入Linux和MacOS上时,一切都会顺利进行,但是当我尝试声明界面时,我会卡在Windows上。我试图以管理员的身份运行Chrome,禁用智能卡服务/窗户上的CCID驱动程序,以防这些驱动程序声称界面,但没有任何功能。我一直有"未能要求接口:访问被拒绝(权限不足)"信息。真的是一个许可问题吗?还是我不知道阻止访问的某些Windows服务?
编辑:我在另一个Mac上尝试了读者无法正常工作的Mac。从CCID驱动程序信息中删除特定的供应商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
编辑中的见解是正确的,如果CCID驱动程序阻止对设备的访问,则Chrome无法访问它。此外,在Windows上,操作系统必须知道要针对设备加载winusb.sys驱动程序(随附Windows),否则任何用户空间应用程序(例如Chrome)无法访问它。可以使用这样的INF文件或通过将Microsoft OSScriptor添加到设备将"兼容ID"设置为" Winusb"。
来完成。如果您要构建自己的设备,则最佳选项是可取的,因为它将为您的用户提供插件支持,而前者仍然需要为Windows用户提供手动安装步骤。
如果您正在使用现有设备,但可以控制Windows系统,类似于编辑信息。像上面的INF文件。
我对此非常新鲜,但据我所知,本机驱动程序何时掌握了您的USB设备,您的丢失,浏览器对此无能为力。似乎修复程序可能是更改供应商或产品ID(如果可以这样做),以便没有本机驱动程序会要求您的设备。如果这不是解决方案,则Chrome应用程序具有更多的可能性,并且可能能够克服问题。