Windows 服务的智能卡

本主题面向 IT 专业人员和智能卡开发人员介绍了 Windows 智能卡服务 (以前称为智能卡资源管理器) 如何管理读取器和应用程序交互。

Windows 智能卡服务为所有其他智能卡组件提供基本基础结构,因为它管理计算机上的智能卡读取器和应用程序交互。 它完全符合 PC/SC 工作组设置的规范。 有关这些规范的信息,请参阅 PC/SC 工作组规范网站

适用于 Windows 的智能卡服务在本地服务的上下文中运行,它作为服务主机 (svchost) 进程的共享服务实现。 适用于 Windows 的智能卡服务 Scardsvr 具有以下服务说明:

<serviceData
    dependOnService="PlugPlay"
    description="@%SystemRoot%\System32\SCardSvr.dll,-5"
    displayName="@%SystemRoot%\System32\SCardSvr.dll,-1"
    errorControl="normal"
    group="SmartCardGroup"
    imagePath="%SystemRoot%\system32\svchost.exe -k LocalServiceAndNoImpersonation"
    name="SCardSvr"
    objectName="NT AUTHORITY\LocalService"
    requiredPrivileges="SeCreateGlobalPrivilege,SeChangeNotifyPrivilege"
    sidType="unrestricted"
    start="demand"
    type="win32ShareProcess"
    >
  <failureActions resetPeriod="900">
       <actions>
          <action
              delay="120000"
              type="restartService"
          />
          <action
              delay="300000"
              type="restartService"
          />
          <action
               delay="0"
              type="none"
          />
      </actions>
  </failureActions>
  <securityDescriptor name="ServiceXSecurity"/>
</serviceData>

  <registryKeys buildFilter="">
      <registryKey keyName="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SCardSvr\Parameters">
      <registryValue
          name="ServiceDll"
          value="%SystemRoot%\System32\SCardSvr.dll"
          valueType="REG_EXPAND_SZ"
          />
      <registryValue
          name="ServiceMain"
          value="CalaisMain"
          valueType="REG_SZ"
          />
      <registryValue
          name="ServiceDllUnloadOnStop"
          value="1"
          valueType="REG_DWORD"
          />
      </registryKey>
  </registryKeys>

注意

若要将 winscard.dll 调用为适当的类安装程序,智能卡读取器的 INF 文件必须为 ClassClassGUID 指定以下内容:

Class=SmartCardReader ClassGuid={50DD5230-BA8A-11D1-BF5D-0000F805F530}

默认情况下,服务配置为手动模式。 智能卡读取器驱动程序的创建者必须配置其 INF,以便自动启动服务,winscard.dll 文件调用预定义的入口点以在安装期间启动服务。 入口点定义为 SmartCardReader 类的一部分,不会直接调用它。 如果设备作为此类的一部分播发自身,则插入设备时会自动调用入口点以启动服务。 使用此方法可确保在需要时启用服务,但对不使用智能卡的用户也禁用该服务。

服务启动时,它会执行多个功能:

  1. 它自行注册服务通知
  2. 它注册与设备删除和添加相关的即插即用 (PnP) 通知
  3. 它初始化其数据缓存和一个全局事件,以指示服务已启动

注意

对于智能卡实现,请考虑通过适用于 Windows 的智能卡服务在具有智能卡读取器的 Windows 操作系统中发送所有通信。 这提供了一个接口,用于跟踪、选择和与声明自己是智能卡读取器设备组成员的所有驱动程序通信。

适用于 Windows 的智能卡服务将每个智能卡读取器槽分类为唯一的读取器,并且每个插槽也单独管理,而不管设备的物理特征如何。 适用于 Windows 的智能卡服务处理以下高级操作:

  • 设备简介
  • 读取器初始化
  • 通知客户端新读取者
  • 序列化对读取器的访问权限
  • 智能卡访问
  • 特定于读取器的命令的隧道

另请参阅

Windows 中智能卡登录的工作原理