配对过程
操作系统按照以下步骤将智能卡与已安装的微型驱动程序配对:
从智能卡获取 ATR。
循环访问HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards注册表项中的条目,并执行以下操作:
- 将存储在注册表中的 ATRMask 子项值应用于从智能卡获取的 ATR。
- 将屏蔽的 ATR 值与存储在注册表中的 ATR 子项值进行比较。
- 如果两个 ATR 值匹配,请停止处理,并将相应的微型驱动程序与智能卡配对。
必须仔细选择智能卡 ATR 和 ATRMask 值,以避免将微型驱动程序与智能卡错误配对。 将 ATRMask 应用于从智能卡读取的 ATR 后,存储在注册表中的智能卡 ATR 值应为预期值。 否则,卡的屏蔽 ATR 值与注册表不匹配,配对会失败。
从 Windows 7 开始,首次将智能卡插入卡读取器时,会触发即插即用事件,这些事件会导致在Windows 更新网站上搜索相应的微型驱动程序。 Windows 为在Windows 更新查找驱动程序而生成的设备 ID 取决于以下因素:
- ATR 中的历史字节数。 有关 ATR 历史字节的详细信息,请参阅 ISO/IEC 7816-4:2005 (E) 标准的第 8 部分。
- Microsoft 即插即用 AID 应用程序在标记0x7F68中是否存在 GUIDS 列表。
- 卡上存在 PIV 应用程序,该应用程序将与收件箱驱动程序配对。
- 在卡上存在带有 Microsoft 通用配置文件的 GIDS (通用标识设备规范) 应用程序,该应用程序将与收件箱驱动程序配对。
有关 即插即用 和 Winscard 的智能卡发现过程的更多详细信息,请参阅智能卡发现过程。 这些过程会导致生成智能卡的唯一设备 ID。
注意若要确定 Windows 为智能卡生成的设备 ID,建议的方法是将智能卡插入到连接到运行 Windows 7 或更高版本 Windows 的计算机的智能卡读取器中。 然后,可以通过在 设备管理器 中查看智能卡设备的“硬件 ID”属性来找到设备 ID。
x86 和 amd64 的示例 INF
下面是一个示例 INF 文件,用于在 Windows 8 及早期版本的 Windows 中安装智能卡。 此 INF 文件经过修饰,以便在 X86 和 AMD64 CPU 平台中安装。
注意 为了避免部署出现问题,强烈建议在将驱动程序包提交到 Winqual 之前,在所有目标操作系统的干净安装上测试驱动程序包。
;
;FabrikamVendor Smartcard Minidriver for an x86 and x64 based package.
;
[Version]
Signature="$Windows NT$"
Class=SmartCard
ClassGuid={990A2BD7-E738-46c7-B26F-1CF8FB9F1391}
Provider=%FABRIKAMVENDOR%
CatalogFile=delta.cat
DriverVer=10/03/2008,7.0.0.4
PnpLockdown=1
[Manufacturer]
%FABRIKAMVENDOR%=FabrikamVendor,NTamd64,NTamd64.6.1,NTx86,NTx86.6.1
[FabrikamVendor.NTamd64]
%FabrikamCardDeviceName%=FabrikamVendor64_Install,SCFILTER\CID_51FF0800
[FabrikamVendor.NTx86]
%FabrikamCardDeviceName%=FabrikamVendor32_Install,SCFILTER\CID_51FF0800
[FabrikamVendor.NTamd64.6.1]
%FabrikamCardDeviceName%=FabrikamVendor64_61_Install,SCFILTER\CID_51FF0800
[FabrikamVendor.NTx86.6.1]
%FabrikamCardDeviceName%=FabrikamVendor32_61_Install,SCFILTER\CID_51FF0800
[DefaultInstall]
CopyFiles=x86_CopyFiles
AddReg=AddRegDefault
[DefaultInstall.ntamd64]
CopyFiles=amd64_CopyFiles
CopyFiles=wow64_CopyFiles
AddReg=AddRegWOW64
AddReg=AddRegDefault
[DefaultInstall.NTx86]
CopyFiles=x86_CopyFiles
AddReg=AddRegDefault
[SourceDisksFiles]
Fabrikamcm64.dll=1
Fabrikamcm.dll=1
[SourceDisksNames]
1 = %MediaDescription%
[FabrikamVendor64_Install.NT]
CopyFiles=amd64_CopyFiles
CopyFiles=wow64_CopyFiles
AddReg=AddRegWOW64
AddReg=AddRegDefault
[FabrikamVendor64_61_Install.NT]
CopyFiles=amd64_CopyFiles
CopyFiles=wow64_CopyFiles
AddReg=AddRegWOW64
AddReg=AddRegDefault
Include=umpass.inf
Needs=UmPass
[FabrikamVendor32_Install.NT]
CopyFiles=x86_CopyFiles
AddReg=AddRegDefault
[FabrikamVendor32_61_Install.NT]
CopyFiles=x86_CopyFiles
AddReg=AddRegDefault
Include=umpass.inf
Needs=UmPass
[FabrikamVendor64_61_Install.NT.Services]
Include=umpass.inf
Needs=UmPass.Services
[FabrikamVendor32_61_Install.NT.Services]
Include=umpass.inf
Needs=UmPass.Services
[FabrikamVendor64_61_Install.NT.HW]
Include=umpass.inf
Needs=UmPass.HW
[FabrikamVendor64_61_Install.NT.CoInstallers]
Include=umpass.inf
Needs=UmPass.CoInstallers
[FabrikamVendor64_61_Install.NT.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
[FabrikamVendor32_61_Install.NT.HW]
Include=umpass.inf
Needs=UmPass.HW
[FabrikamVendor32_61_Install.NT.CoInstallers]
Include=umpass.inf
Needs=UmPass.CoInstallers
[FabrikamVendor32_61_Install.NT.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
[amd64_CopyFiles]
Fabrikamcm.dll,Fabrikamcm64.dll
[x86_CopyFiles]
Fabrikamcm.dll
[wow64_CopyFiles]
Fabrikamcm.dll
[AddRegWOW64]
HKLM, %SmartCardNameWOW64%,"ATR",0x00000001,3b,04,51,ff,08,00
HKLM, %SmartCardNameWOW64%,"ATRMask",0x00000001,ff,ff,ff,ff,ff,ff
HKLM, %SmartCardNameWOW64%,"Crypto Provider",0x00000000,"Microsoft Base Smart Card Crypto Provider"
HKLM, %SmartCardNameWOW64%,"Smart Card Key Storage Provider",0x00000000,"Microsoft Smart Card Key Storage Provider"
HKLM, %SmartCardNameWOW64%,"80000001",0x00000000,%SmartCardCardModule%
[AddRegDefault]
HKLM, %SmartCardName%,"ATR",0x00000001,3b,04,51,ff,08,00
HKLM, %SmartCardName%,"ATRMask",0x00000001,ff,ff,ff,ff,ff,ff
HKLM, %SmartCardName%,"Crypto Provider",0x00000000,"Microsoft Base Smart Card Crypto Provider"
HKLM, %SmartCardName%,"Smart Card Key Storage Provider",0x00000000,"Microsoft Smart Card Key Storage Provider"
HKLM, %SmartCardName%,"80000001",0x00000000,%SmartCardCardModule%
[DestinationDirs]
amd64_CopyFiles=10,system32
x86_CopyFiles=10,system32
wow64_CopyFiles=10,syswow64
; =================== Generic ==================================
[Strings]
FABRIKAMVENDOR ="FabrikamVendor"
MediaDescription="FabrikamVendor Smart Card Minidriver Installation Disk"
FabrikamCardDeviceName="FabrikamVendor Minidriver for Smart Card"
SmartCardName="SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\Fabrikam"
SmartCardNameWOW64="SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\SmartCards\Fabrikam"
SmartCardCardModule="Fabrikamcm.dll"
此类型的 INF 文件需要满足以下条件:
- 由 %FabrikamCardDeviceName% 字符串指定的硬件 ID 必须是设备的 ATR 历史字节或设备的智能卡框架标识符的解码值。 有关此标识符的详细信息,请参阅智能卡发现过程中的“Windows 智能卡框架卡标识符”部分。
- 对于智能卡微型驱动程序包,DefaultInstall 节在 INF 文件中是必需的。