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 ファイルで Class と ClassGUID に次を指定する必要があります。

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

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

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

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

注

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

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

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

関連項目

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