Windows サービス用のスマート カード

IT プロフェッショナルおよびスマート カード開発者向けのこのトピックでは、スマート カード for Windows サービス (旧称スマート カード Resource Manager) がリーダーとアプリケーションの相互作用を管理する方法について説明します。

スマート カード for Windows サービスは、コンピューター上のスマート カード リーダーとアプリケーションの相互作用を管理する、他のすべてのスマート カード コンポーネントの基本的なインフラストラクチャを提供します。 PC/SC ワークグループによって設定された仕様に完全に準拠しています。 これらの仕様の詳細については、 PC/SC ワークグループ仕様の Web サイトを参照してください。

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}

既定では、サービスは手動モード用に構成されています。 スマート カード リーダー ドライバーの作成者は、サービスを自動的に開始し、winscard.dll ファイルが定義済みのエントリ ポイントを呼び出してインストール中にサービスを開始するように、その INF を構成する必要があります。 エントリ ポイントは SmartCardReader クラスの一部として定義され、直接呼び出されません。 デバイスがこのクラスの一部として自身をアドバタイズする場合、デバイスの挿入時にサービスを開始するためにエントリ ポイントが自動的に呼び出されます。 この方法を使用すると、必要なときにサービスが有効になりますが、スマート カードを使用しないユーザーにも無効になります。

サービスが開始されると、いくつかの関数が実行されます。

  1. サービス通知に自身を登録します
  2. デバイスの削除と追加に関連するプラグ アンド プレイ (PnP) 通知に自身を登録します
  3. データ キャッシュと、サービスが開始されたことを通知するグローバル イベントを初期化します

スマート カード実装の場合は、スマート カード リーダーを使用して Windows オペレーティング システムのすべての通信を Windows サービス用スマート カード経由で送信することを検討してください。 これにより、スマート カード リーダー デバイス グループのメンバーを宣言するすべてのドライバーを追跡、選択、通信するためのインターフェイスが提供されます。

Windows 用スマート カード サービスは、各スマート カード リーダー スロットを一意のリーダーとして分類し、デバイスの物理的な特性に関係なく、各スロットも個別に管理されます。 Windows 用スマート カード サービスは、次の大まかなアクションを処理します。

  • デバイスの概要
  • リーダーの初期化
  • 新しいリーダーのクライアントへの通知
  • リーダーへのアクセスのシリアル化
  • スマート カード アクセス
  • リーダー固有のコマンドのトンネリング

関連項目

Windows でのスマート カード サインインのしくみ