(57)【特許請求の範囲】
【請求項１】
リーダ／ライタを介してＩＣカードに接続可能な情報処理装置であって：
前記ＩＣカード用の複数のアプリケーションで共用される基本機能を前記各アプリケーションに提供するミドルウェアと；
前記リーダ／ライタに対応して設けられ，前記複数のアプリケーションが前記リーダ／ライタにアクセスできるように，前記複数のアプリケーションから前記ミドルウェアを介して受け取った複数のコマンドを受け取り順に順次処理して，前記リーダ／ライタを制御するデバイスドライバと；
を備え，
前記デバイスドライバは，あるアプリケーションからのコマンドの処理中に，他のアプリケーションからのコマンドを受け取った場合，当該コマンドの受け取り時から所定のタイムアウト時間が経過するまでは前記他のアプリケーションからのコマンドを処理待ち状態とし，前記タイムアウト時間が経過したときには前記他のアプリケーションにタイムアウトエラーを通知することを特徴とする，情報処理装置。
【請求項２】
前記デバイスドライバは，前記複数のアプリケーションから受け取った前記複数のコマンドを受け取り順に順次処理することで前記複数のアプリケーションが前記リーダ／ライタにアクセス可能な共有モードと，１つの前記アプリケーションのみが前記リーダ／ライタにアクセス可能とされ、当該１つのアプリケーションが前記リーダ／ライタを専有する専有モードとを切り替えて設定可能であることを特徴とする，請求項１に記載の情報処理装置。
【請求項３】
前記ミドルウェアは，前記アプリケーションが前記共有モード又は前記専有モードを選択できるようなアプリケーションプログラミングインターフェースを前記アプリケーションに提供し，
前記デバイスドライバは，前記アプリケーションからのモード選択に基づいて，前記共有モードと前記専有モードとを切り替えることを特徴とする，請求項２に記載の情報処理装置。
【請求項４】
前記共有モードに設定されている場合に，
前記デバイスドライバは，あるアプリケーションからの要求に応じて，前記リーダ／ライタに対するアクセス権を一時的に当該アプリケーションに付与し，当該アプリケーションに前記アクセス権が付与されている間は，当該アプリケーションから受け取ったコマンドのみを処理し，他のアプリケーションから受け取ったコマンドを処理待ち状態にすることを特徴とする，請求項２に記載の情報処理装置。
【請求項５】
前記ミドルウェアは，前記アプリケーションが前記デバイスドライバに対して前記アクセス権の付与を要求できるようなアプリケーションプログラミングインターフェースを前記アプリケーションに提供することを特徴とする，請求項４に記載の情報処理装置。
【請求項６】
前記デバイスドライバは，前記アプリケーションごとに前記タイムアウト時間を設定可能であることを特徴とする，請求項１に記載の情報処理装置。
【請求項７】
前記デバイスドライバは，１つの前記リーダ／ライタに同時にアクセス可能な前記アプリケーションの数を所定の最大アクセス数以下に制限することを特徴とする，請求項１に記載の情報処理装置。
【請求項８】
前記デバイスドライバは，前記各アプリケーションと前記リーダ／ライタとの間の通信情報を，前記アプリケーションごとに保持する通信情報記憶部を有することを特徴とする，請求項１に記載の情報処理装置。
【請求項９】
前記情報処理装置には前記リーダ／ライタが複数接続されており，
前記ミドルウェアは，前記アプリケーションからの使用要求に応じて，前記複数のリーダ／ライタのうちから１つのリーダ／ライタを選択し，当該選択されたリーダ／ライタに対応する前記デバイスドライバに対し，前記アプリケーションによる当該選択されたリーダ／ライタの使用が可能な状態にするよう要求し，
前記デバイスドライバは，前記ミドルウェアからの要求に応じて，当該選択されたリーダ／ライタが前記アプリケーションによりアクセス可能な状態であるか否かを判定し，アクセス可能な状態であると判定すれば，前記アプリケーションが当該選択されたリーダ／ライタを使用可能な状態にすることを特徴とする，請求項１に記載の情報処理装置。
【請求項１０】
前記ミドルウェアは，前記複数のリーダ／ライタのうち前記アプリケーションが使用可能な１又は２以上のリーダ／ライタのリストを保持しており，前記リスト内のリーダ／ライタを順次選択して，当該選択された各リーダ／ライタに対応する各デバイスドライバに対し，前記アプリケーションが当該選択された各リーダ／ライタを使用可能な状態にするよう順次要求することを特徴とする，請求項９に記載の情報処理装置。
【請求項１１】
リーダ／ライタを介してＩＣカードに接続可能な情報処理装置において，前記ＩＣカード用の複数のアプリケーションを調停するアプリケーション調停方法であって：
前記リーダ／ライタに対応して設けられたデバイスドライバは，前記複数のアプリケーションが前記リーダ／ライタにアクセスできるように，前記複数のアプリケーションから，前記複数のアプリケーションで共用される基本機能を前記各アプリケーションに提供するミドルウェアを介して，複数のコマンドを受け取り，当該受け取った複数のコマンドを受け取り順に順次処理して，前記リーダ／ライタを制御し，前記デバイスドライバは，前記複数のアプリケーションから受け取った前記複数のコマンドを受け取り順に順次処理することで前記複数のアプリケーションが前記リーダ／ライタにアクセス可能とされ、当該１つのアプリケーションが前記リーダ／ライタを専有する共有モードと，１つの前記アプリケーションのみが前記リーダ／ライタにアクセス可能な専有モードとを切り替えて設定可能であり，
前記デバイスドライバは，あるアプリケーションからのコマンドの処理中に，他のアプリケーションからのコマンドを受け取った場合，当該コマンドの受け取り時から所定のタイムアウト時間が経過するまでは前記他のアプリケーションからのコマンドを処理待ち状態とし，前記タイムアウト時間が経過したときには前記他のアプリケーションにタイムアウトエラーを通知することを特徴とする，アプリケーション調停方法。
【請求項１２】
前記ミドルウェアは，前記アプリケーションが前記共有モード又は前記専有モードを選択できるようなアプリケーションプログラミングインターフェースを前記アプリケーションに提供し，
前記デバイスドライバは，前記アプリケーションからのモード選択に基づいて，前記共有モードと前記専有モードとを切り替えることを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１３】
前記共有モードに設定されている場合に，
前記デバイスドライバは，あるアプリケーションからの要求に応じて，前記リーダ／ライタに対するアクセス権を一時的に当該アプリケーションに付与し，当該アプリケーションに前記アクセス権が付与されている間は，当該アプリケーションから受け取ったコマンドのみを処理し，他のアプリケーションから受け取ったコマンドを処理待ち状態にすることを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１４】
前記ミドルウェアは，前記アプリケーションが前記デバイスドライバに対して前記アクセス権の付与を要求できるようなアプリケーションプログラミングインターフェースを前記アプリケーションに提供することを特徴とする，請求項１３に記載のアプリケーション調停方法。
【請求項１５】
前記デバイスドライバは，前記アプリケーションごとに前記タイムアウト時間を設定可能であることを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１６】
前記デバイスドライバは，１つの前記リーダ／ライタに同時にアクセス可能な前記アプリケーションの数を所定の最大アクセス数以下に制限することを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１７】
前記デバイスドライバは，前記各アプリケーションと前記リーダ／ライタとの間の通信情報を，前記アプリケーションごとに保持する通信情報記憶部を有することを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１８】
前記情報処理装置には前記リーダ／ライタが複数接続されており，
前記ミドルウェアは，前記アプリケーションからの使用要求に応じて，前記複数のリーダ／ライタのうちから１つのリーダ／ライタを選択し，当該選択されたリーダ／ライタに対応する前記デバイスドライバに対し，前記アプリケーションによる当該選択されたリーダ／ライタの使用が可能な状態にするよう要求し，
前記デバイスドライバは，前記ミドルウェアからの要求に応じて，当該選択されたリーダ／ライタが前記アプリケーションによりアクセス可能な状態であるか否かを判定し，アクセス可能な状態であると判定すれば，前記アプリケーションが当該選択されたリーダ／ライタを使用可能な状態にすることを特徴とする，請求項１１に記載のアプリケーション調停方法。
【請求項１９】
前記ミドルウェアは，前記複数のリーダ／ライタのうち前記アプリケーションが使用可能な１又は２以上のリーダ／ライタのリストを保持しており，前記リスト内のリーダ／ライタを順次選択して，当該選択された各リーダ／ライタに対応する各デバイスドライバに対し，前記アプリケーションが当該選択された各リーダ／ライタを使用可能な状態にするよう順次要求することを特徴とする，請求項１８に記載のアプリケーション調停方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，情報処理装置，アプリケーション調停方法及びプログラムに関する。
【背景技術】
【０００２】
ＩＣカードの普及とともに，ＩＣカードに情報を読み書きするリーダ／ライタの設置環境が急速に広がりつつある。ＩＣカードが導入開始された初期段階では，業務用機器での利用が中心であったが，近年では，一般消費者が所有するコンシューマエレクトロニクス機器（以下，ＣＥ機器）用途の低価格なリーダ／ライタが普及し始めており，このため，ＩＣカードを利用したアプリケーションも急速に拡大している。
【０００３】
特に，パーソナルコンピュータ（以下，ＰＣ）や携帯電話などのＣＥ機器では，予めリーダ／ライタ機能が予め組み込まれた機器も急速に増え始めており，さらに，このようなリーダ／ライタが予め組み込まれたＣＥ機器に，別途のリーダ／ライタを外部接続させるケースも想定される。このようなＣＥ機器では，ＩＣカードを利用するための多数のアプリケーションが予め組み込まれたり，ユーザが後から自由にアプリケーションをＣＥ機器に追加したりすることができるため，１つのＣＥ機器内にＩＣカード用の複数のアプリケーションが共存する機会が増大しつつある。
【０００４】
【特許文献１】特開２００３−１６４０３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら，上記ＣＥ機器等の情報処理装置で動作する従来のＩＣカード用アプリケーションは，１つのアプリケーションが１つのリーダ／ライタを専有することを前提としたアーキテクチャーであった。従って，あるアプリケーションがリーダ／ライタを使用している間は，他のアプリケーションはリーダ／ライタを使用することができなかった。例えば，あるアプリケーションによりＩＣカード内の電子マネーの残高や購入履歴情報を表示している最中に，別のアプリケーションにより当該ＩＣカード内の乗車券の履歴情報を表示させることができなかった。このように，従来のＩＣカードを利用する情報処理装置においては，マルチアプリケーション対応がなされておらず，複数のアプリケーション間の調停を好適に実行することができないという問題があった。
【０００６】
なお，特許文献１には，ＩＣカードに複数のアプリケーションを組み込んで，このＩＣカード内のアプリケーション毎にアクセス権を設定する技術が記載されている。しかし，この特許文献１の技術はＩＣカード内に複数のアプリケーションが設けられている場合を想定しているが，アプリケーションを組み込まずに，ＣＥ機器側からのコマンドに応じてデータを読み書きするだけのＩＣカードでは，上記マルチアプリケーション対応を実現できなかった。
【０００７】
そこで，本発明は，上記問題に鑑みてなされたものであり，本発明の目的とするところは，複数のＩＣカード用アプリケーションが同時にリーダ／ライタを使用する場合において，アプリケーション間の調停を好適に実現することが可能な，新規かつ改良された情報処理装置，アプリケーション調停方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために，本発明のある観点によれば，リーダ／ライタを介してＩＣカードに接続可能な情報処理装置であって，ＩＣカード用の複数のアプリケーションで共用される基本機能を各アプリケーションに提供するミドルウェアと，リーダ／ライタに対応して設けられ，複数のアプリケーションがリーダ／ライタにアクセスできるように，複数のアプリケーションからミドルウェアを介して受け取った複数のコマンドを受け取り順に順次処理して，リーダ／ライタを制御するデバイスドライバと，を備えることを特徴とする，情報処理装置が提供される。
【０００９】
かかる構成により，各アプリケーションは，ミドルウェアから提供された複数のアプリケーションで共用される基本機能を用いて，デバイスドライバに対してコマンドの実行要求を行い，デバイスドライバは，複数のアプリケーションからミドルウェアを介して受け取った複数のコマンドを，受け取り順に順次処理して，リーダ／ライタを制御して，ＩＣカードにコマンドを送信できる。これにより，複数のアプリケーションが同一のリーダ／ライタを使用できるようになるので，アプリケーション間の調停を好適に実現できる。
【００１０】
また，デバイスドライバは，複数のアプリケーションがリーダ／ライタにアクセス可能な共有モードと，１つのアプリケーションのみがリーダ／ライタにアクセス可能な専有モードとを切り替えて設定可能であるようにしてもよい。
【００１１】
また，ミドルウェアは，アプリケーションが共有モード又は専有モードを選択できるようなアプリケーションプログラミングインターフェースをアプリケーションに提供し，デバイスドライバは，アプリケーションからのモード選択に基づいて，共有モードと専有モードとを切り替えるようにしてもよい。
【００１２】
また，共有モードに設定されている場合に，デバイスドライバは，あるアプリケーションからの要求に応じて，リーダ／ライタに対するアクセス権を当該アプリケーションに付与し，当該アプリケーションにアクセス権が付与されている間は，当該アプリケーションから受け取ったコマンドのみを処理し，他のアプリケーションから受け取ったコマンドを処理待ち状態にするようにしてもよい。
【００１３】
また，ミドルウェアは，アプリケーションがデバイスドライバに対してアクセス権の付与を要求できるようなアプリケーションプログラミングインターフェースをアプリケーションに提供するようにしてもよい。
【００１４】
また，デバイスドライバは，あるアプリケーションからのコマンドの処理中に，他のアプリケーションからのコマンドを受け取った場合，当該コマンドの受け取り時から所定のタイムアウト時間が経過するまでは他のアプリケーションからのコマンドを処理待ち状態とし，タイムアウト時間が経過したときには他のアプリケーションにタイムアウトエラーを通知するようにしてもよい。
【００１５】
また，デバイスドライバは，アプリケーションごとにタイムアウト時間を設定可能であるようにしてもよい。
【００１６】
また，デバイスドライバは，１つのリーダ／ライタに同時にアクセス可能なアプリケーションの数を所定の最大アクセス数以下に制限するようにしてもよい。
【００１７】
また，デバイスドライバは，各アプリケーションとリーダ／ライタとの間の通信情報を，アプリケーションごとに保持する通信情報記憶部を有するようにしてもよい。
【００１８】
また，情報処理装置にはリーダ／ライタが複数接続されており，ミドルウェアは，アプリケーションからの使用要求に応じて，複数のリーダ／ライタのうちから１つのリーダ／ライタを選択し，当該選択されたリーダ／ライタに対応するデバイスドライバに対し，アプリケーションが当該選択されたリーダ／ライタを使用可能な状態にするよう要求し，デバイスドライバは，ミドルウェアからの要求に応じて，当該選択されたリーダ／ライタがアプリケーションによりアクセス可能な状態であるか否かを判定し，アクセス可能な状態であると判定すれば，アプリケーションによる当該選択されたリーダ／ライタの使用が可能な状態にするようにしてもよい。
【００１９】
また，ミドルウェアは，複数のリーダ／ライタのうちアプリケーションが使用可能な１又は２以上のリーダ／ライタのリストを保持しており，リスト内のリーダ／ライタを順次選択して，当該選択された各リーダ／ライタに対応する各デバイスドライバに対し，アプリケーションが当該選択された各リーダ／ライタを使用可能な状態にするよう順次要求するようにしてもよい。
【００２０】
また，上記課題を解決するために，本発明の別の観点によれば，リーダ／ライタを介してＩＣカードに接続可能な情報処理装置において，ＩＣカード用の複数のアプリケーションを調停するアプリケーション調停方法であって，リーダ／ライタに対応して設けられたデバイスドライバは，複数のアプリケーションがリーダ／ライタにアクセスできるように，複数のアプリケーションから，複数のアプリケーションで共用される基本機能を各アプリケーションに提供するミドルウェアを介して，複数のコマンドを受け取り，当該受け取った複数のコマンドを受け取り順に順次処理して，リーダ／ライタを制御し、デバイスドライバは，複数のアプリケーションがリーダ／ライタにアクセス可能な共有モードと，１つのアプリケーションのみがリーダ／ライタにアクセス可能な専有モードとを切り替えて設定可能であることを特徴とする，アプリケーション調停方法が提供される。
【００２２】
また，ミドルウェアは，アプリケーションが共有モード又は専有モードを選択できるようなアプリケーションプログラミングインターフェースをアプリケーションに提供し，デバイスドライバは，アプリケーションからのモード選択に基づいて，共有モードと専有モードとを切り替えるようにしてもよい。
【００２３】
また，共有モードに設定されている場合に，デバイスドライバは，あるアプリケーションからの要求に応じて，リーダ／ライタに対するアクセス権を当該アプリケーションに付与し，当該アプリケーションにアクセス権が付与されている間は，当該アプリケーションから受け取ったコマンドのみを処理し，他のアプリケーションから受け取ったコマンドを処理待ち状態にするようにしてもよい。
【００２４】
また，ミドルウェアは，アプリケーションがデバイスドライバに対してアクセス権の付与を要求できるようなアプリケーションプログラミングインターフェースをアプリケーションに提供するようにしてもよい。
【００２５】
また，デバイスドライバは，あるアプリケーションからのコマンドの処理中に，他のアプリケーションからのコマンドを受け取った場合，当該コマンドの受け取り時から所定のタイムアウト時間が経過するまでは他のアプリケーションからのコマンドを処理待ち状態とし，タイムアウト時間が経過したときには他のアプリケーションにタイムアウトエラーを通知するようにしてもよい。
【００２６】
また，デバイスドライバは，アプリケーションごとにタイムアウト時間を設定可能であるようにしてもよい。
【００２７】
また，デバイスドライバは，１つのリーダ／ライタに同時にアクセス可能なアプリケーションの数を所定の最大アクセス数以下に制限するようにしてもよい。
【００２８】
また，デバイスドライバは，各アプリケーションとリーダ／ライタとの間の通信情報を，アプリケーションごとに保持する通信情報記憶部を有するようにしてもよい。
【００２９】
また，情報処理装置にはリーダ／ライタが複数接続されており，ミドルウェアは，アプリケーションからの使用要求に応じて，複数のリーダ／ライタのうちから１つのリーダ／ライタを選択し，当該選択されたリーダ／ライタに対応するデバイスドライバに対し，アプリケーションが当該選択されたリーダ／ライタを使用可能な状態にするよう要求し，デバイスドライバは，ミドルウェアからの要求に応じて，当該選択されたリーダ／ライタがアプリケーションによりアクセス可能な状態であるか否かを判定し，アクセス可能な状態であると判定すれば，アプリケーションによる当該選択されたリーダ／ライタの使用が可能な状態にするようにしてもよい。
【００３０】
また，ミドルウェアは，複数のリーダ／ライタのうちアプリケーションが使用可能な１又は２以上のリーダ／ライタのリストを保持しており，リスト内のリーダ／ライタを順次選択して，当該選択された各リーダ／ライタに対応する各デバイスドライバに対し，アプリケーションが当該選択された各リーダ／ライタを使用可能な状態にするよう順次要求するようにしてもよい。
【発明の効果】
【００３２】
以上説明したように本発明によれば，複数のＩＣカード用アプリケーションが同時にリーダ／ライタを使用する場合において，アプリケーション間の調停を好適に実現することができる。
【発明を実施するための最良の形態】
【００３３】
以下に添付図面を参照しながら，本発明の好適な実施の形態について詳細に説明する。なお，本明細書及び図面において，実質的に同一の機能構成を有する構成要素については，同一の符号を付することにより重複説明を省略する。
【００３４】
まず，図１を参照して，本発明の第１の実施形態にかかるリーダ／ライタを介してＩＣカードに接続可能な情報処理装置の概略構成について説明する。なお，図１は，本実施形態にかかる情報処理装置１がリーダ／ライタ２を介してＩＣカード３に接続する状態を示す概略図である。
【００３５】
図１に示すように，本実施形態にかかる情報処理装置１は，例えば，複数のリーダ／ライタ２Ａ，２Ｂ（以下，リーダ／ライタ２と総称する場合もある。）を介して複数のＩＣカード３Ａ，３Ｂ（以下，ＩＣカード３と総称する場合もある。）に接続可能な装置であり，リーダ／ライタ２を介してＩＣカード３に各種の情報を読み書きすることができる。この情報処理装置１は，例えば，パーソナルコンピュータ（ＰＣ）等のコンピュータ装置（ノート型，デスクトップ型を問わない。）や携帯電話などのＣＥ機器で構成されるが，かかる例に限定されず，例えば，ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ），携帯型映像／音声プレーヤ，家庭用ゲーム機，携帯型ゲーム機，情報家電，電子辞書，業務用機器など，各種の電子機器で構成することも可能である。
【００３６】
リーダ／ライタ２は，ＩＣカード３に対して例えば非接触方式で各種情報を送受信可能な装置である。このリーダ／ライタ２は，情報処理装置１からの指示に基づき，ＩＣカード３に対して各種の情報を読み書きしたり，その近傍にＩＣカード３が存在するか否かを探索（ポーリング）したりすることができる。
【００３７】
このようなリーダ／ライタ２は，例えば，情報処理装置１に内蔵（プレインストール）されてもよいし，或いは，ＵＳＢ（Ｕｎｉｖａｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ケーブル等の有線ケーブル４若しくは無線通信を介して情報処理装置１に外部接続されてもよい。また，複数のリーダ／ライタ２が，１つの情報処理装置１に外部接続又は内蔵されてもよい。図１の例では，１つのリーダ／ライタ２Ａが有線ケーブル４を介して情報処理装置１に外部接続され，１つのリーダ／ライタ２Ｂが情報処理装置１に内蔵されている。これにより，情報処理装置１は，これらのリーダ／ライタ２Ａ，２Ｂを介して，同一又は異なる種類の２つのＩＣカード３Ａ，３Ｂに接続可能になっている。しかし，かかる例に限定されず，情報処理装置１は，１つリーダ／ライタ２のみ，又は３以上のリーダ／ライタ２を介して，任意の数のＩＣカード３に接続可能に構成されてもよい。
【００３８】
ＩＣカード３は，例えば，上記リーダ／ライタ２から近距離（例えば０〜１０ｃｍ程度）の通信範囲内であれば，リーダ／ライタ２に対して非接触方式で無線通信することが可能な非接触型ＩＣカードである。このＩＣカード３内の記憶装置には，電子マネー情報等のセキュアなデータや，ログ情報などを記憶することができる。
【００３９】
次に，図２を参照して，本実施形態にかかる情報処理装置１として例えばパーソナルコンピュータ（ＰＣ）のハードウェア構成例について説明する。なお，図２は，本実施形態にかかる情報処理装置１のハードウェア構成例を示すブロック図である。
【００４０】
図２に示すように，情報処理装置１は，例えば，ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と，ＲＯＭ１０２と，ＲＡＭ１０３と，ホストバス１０４と，ブリッジ１０５と，外部バス１０６と，インタフェース１０７と，入力装置１０８と，出力装置１０９と，記憶装置１１０と，例えば複数の接続ポート１１１Ａ，１１１Ｂ（以下，接続ポート１１１と総称する場合もある。）と，通信装置１１２とを備える。
【００４１】
ＣＰＵ１０１は，各種プログラムに従って各種の処理を実行する処理装置の一例であり，情報処理装置１内の各部を制御する。ＲＯＭ１０２は，ＣＰＵ１０１が使用するプログラムや演算パラメータ等を記憶する。ＲＡＭ１０３は，ＣＰＵ１０１の実行において使用するプログラムや，その実行において随時変化するパラメータ等を一次記憶する。これらはＣＰＵバスなどから構成されるホストバス１０４により相互に接続されている。
【００４２】
ホストバス１０４は，ブリッジ１０５を介して，ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バスなどの外部バス１０６に接続されている。インタフェース１０７は，外部バス１０６と以下のような各装置とを接続する通信インタフェースである。
【００４３】
入力装置１０８は，例えば，マウス，キーボード，タッチパネル，ボタン，スイッチ，レバー等の操作手段と，入力信号を生成してＣＰＵ１０１に出力する入力制御回路などから構成されている。情報処理装置１を利用するユーザは，この入力装置１０８を操作することにより，情報処理装置１に対して各種のデータを入力したり，処理動作を指示したりすることができる。
【００４４】
出力装置１０９は，例えば，ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）ディスプレイ装置，液晶ディスプレイ（ＬＣＤ）装置，ランプ等の表示装置や，スピーカ等の音声出力装置などで構成される。この出力装置１０９は，例えば，後述するＩＣカード用のアプリケーションの動作に伴う画面などといった各種情報を表示出力する。
【００４５】
記憶装置１１０は，記憶媒体を備えたデータ格納用の装置であり，例えば，ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などで構成される。この記憶装置１１０は，後述するアプリケーション，ミドルウェア，オペレーションシステム，デバイスドライバ等の各種のプログラムや，各種データを記憶する。この記憶装置１１０は，ＨＤＤに限らず，例えば，フラッシュメモリ，ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ），ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）等の半導体メモリや，光ディスク，光磁気ディスク，磁気メモリなど，ランダムアクセス可能な各種の記憶媒体で構成されてもよい。
【００４６】
接続ポート１１１は，例えば，上記リーダ／ライタ２等の外部周辺機器を接続するポートであり，ＵＳＢ，ＩＥＥＥ１３９４等の接続端子を有する。この接続ポート１１１は，インタフェース１０７，および外部バス１０６，ブリッジ１０５，ホストバス１０４等を介してＣＰＵ１０１等に接続されている。かかる接続ポート１１１Ａ，１１１Ｂにリーダ／ライタ２Ａ，２Ｂを接続することで，情報処理装置１は，リーダ／ライタ２Ａ，２Ｂを介してＩＣカード３Ａ，３Ｂとそれぞれ通信接続して，コマンド，レスポンス等の各種のデータを送受信することができるようになる。なお，接続ポート１１１の設置数を増減して，情報処理装置１にリーダ／ライタ２を１つ又は３つ以上接続できるようにしてもよい。
【００４７】
通信装置１１２は，例えば，インターネット，ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ），電話回線網等のネットワーク（図示せず。）に接続するための通信デバイス等で構成され，上記ネットワークを介して外部装置との間で各種データを送受信する。
【００４８】
次に，図３に基づいて，本実施形態にかかるリーダ／ライタ２とＩＣカード３のハードウェア構成について説明する。なお，図３は，本実施形態にかかるリーダ／ライタ２及びＩＣカード３のハードウェア構成を示すブロック図である。
【００４９】
まず，リーダ／ライタ２の構成について説明する。図３に示すように，リーダ／ライタ２は，制御部２０１と，変調回路２０３と，復調回路２０２と，発信器２０４と，メモリ２０５と，アンテナ２０６とを備える。
【００５０】
制御部２０１は，例えば，各種のプロセッサと，ＲＯＭ，ＲＡＭ等のメモリとを備えたＩＣなどで構成される。この制御部２０１は，フラッシュメモリ等で構成されたメモリ２０５を利用して，リーダ／ライタ２内の各部を制御する。また，制御部２０１は，情報処理装置１から入力されたデータ（コマンド等）を処理して，ＩＣカード３に送信するために変調回路２０３に出力する。さらに，制御部２０１は，ＩＣカード３から送信されたデータを復調回路２０２から受け取って処理する。また，制御部２０１は，上記情報処理装置１との通信処理を行う。さらに，制御部２０１は，ＩＣカード３との通信時に，リーダ／ライタ２とＩＣカード３との間の認証処理を実行し，この認証結果を情報処理装置１に送信する。
【００５１】
変調回路２０２は，発信器２０４から供給される所定の周波数の搬送波を，制御部２０１から入力されたデータで変調（例えばＡＳＫ（Ａｍｐｌｉｔｕｄｅ  Ｓｈｉｆｔ  Ｋｅｙｉｎｇ）変調）し，当該変調波を，アンテナ２０６を介してＩＣカード３に送信する。一方，復調回路２０３は，アンテナ２０６を介してＩＣカード３から受信した変調波を復調し，当該復調したデータを制御部２０１に出力する。
【００５２】
次に，ＩＣカード３の構成について説明する。図３に示すように，ＩＣカード３は，アンテナ３０１と，コンデンサ３０２と，ＩＣ３０３とで構成され，ＩＣ３０３がアンテナ３０１を介して，リーダ／ライタ２との間で変調波を送受信するようになっている。なお，コンデンサ３０２は，アンテナ３０１と共にＬＣ回路を構成し，所定のキャリア周波数の電磁波に同調（共振）するようになっている。ＩＣ３０３は，インタフェース部３０４と，変調回路３０６と，復調回路３０５と，制御部３０７と，メモリ３０８とを備える。
【００５３】
インタフェース部３０４は，アンテナ３０１を介して受信した変調波を検波して得られた信号を復調回路３０５に出力する。また，インタフェース部３０４は，制御部３０７から変調回路３０６を介して入力される信号を，アンテナ３０１を介してリーダ／ライタ２に送信する。また，インタフェース部３０４は，図示しない電圧レギュレータで上記検波した信号を安定化し，各回路に電源として供給する
【００５４】
復調回路３０５は，上記インタフェース部３０４から入力された信号を復調し，復調したデータを制御部３０７に出力する。また，変調回路３０６は，制御部３０７から入力されたデータを変調してインタフェース部３０４に出力する。
【００５５】
制御部３０７は，復調回路３０５から入力されたデータ（コマンド）に基づいて所定の処理，例えば，メモリ３０８に記憶されているデータの読み出し／書き込みや，制御部３０７に対して入出力されるデータの演算処理などを行う。また，制御部３０７は，メモリ３０８に記憶されているデータを管理（追加，変更，削除など）する。また，制御部３０７は，上記所定の処理に対応する応答データ（レスポンス）を生成して，リーダ／ライタ２に送信するために，変調回路３０６に出力する。なお，制御部３０７は，復調回路３０５から入力されたデータや，変調回路３０６に出力するデータを，例えば，マンチェスタ符号化方式等で復号化／符号化処理したり，暗号化／暗号解読化したりすることもできる。
【００５６】
メモリ３０８は，ＩＣカード３に関する各種のデータを記憶する記憶装置であり，例えば，フラッシュメモリ，ＳＲＡＭ，ＥＥＰＲＯＭ，ＲＯＭ等の半導体メモリなどで構成される。メモリ３０８は，例えば，ＩＣカード３に固有のカードＩＤや，ＩＣカード３にチャージされた電子マネーの金額を表す電子マネー情報などを記憶している。また，メモリ３０８は，上記制御部３０７が，コマンドの解析，レスポンスの生成，メモリ３０８に対するデータの読み書き，データの符号化及び暗号化などといった各種の処理を行うためのプログラム（ＩＣカード３用のオペレーティングシステム：ＯＳ）を記憶している。これらの情報は，ＩＣカード３とリーダ／ライタ２との通信が終了して電力供給が停止した後も，メモリ３０８に記憶され続ける。
【００５７】
なお，上記ＩＣカード３とリーダ／ライタ２間の通信プロトコルとしては，例えば，ＮＦＣ（Ｎｅａｒ  Ｆｉｅｌｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ）通信，ＩＳＯ／ＩＥＣ１４４４３や，ＲＦタグ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  Ｔａｇ）の通信について規定するＩＳＯ／ＩＥＣ１５６９３や，さらには，Ｂｌｕｅｔｏｏｔｈ，ＵＷＢ（Ｕｌｔｒａ  Ｗｉｄｅ  Ｂａｎｄ），ＩＥＥＥ８０２．１１ｂなどの通信プロトコルを例示できる。
【００５８】
以上のような構成により，リーダ／ライタ２とＩＣカード３との間で，非接触方式でデータ（コマンド，レスポンス）を送受信可能であり，このため，リーダ／ライタ２によってＩＣカード３に記憶されている情報を読み書き可能となる。例えば，リーダ／ライタ２によって，ＩＣカード３に記憶されているカードＩＤを読み出して認証処理を行ったり，或いは，ＩＣカード３に記憶されている電子マネー情報を読み出して更新（金額変更）したりできるようになる。この際，非接触方式でデータをやりとりするので，ユーザは，自己の所有するＩＣカード３をリーダ／ライタ２に対して所定の距離範囲内に接近させるだけで，迅速かつ容易に当該ＩＣカード３内のデータを読み書きさせることができる。
【００５９】
次に，図４を参照して，本実施形態にかかる情報処理装置１及びＩＣカード３のソフトウェア構成について説明する。なお，図４は，本実施形態にかかる情報処理装置１及びＩＣカード３のソフトウェア構成を示すブロック図である。
【００６０】
図４に示すように，情報処理装置１は，ＩＣカード３を利用するための複数のアプリケーション１０Ａ，１０Ｂ，１０Ｃ，１０Ｄ，１０Ｅ，…（以下，アプリケーション１０と総称する場合もある。）と，ＩＣカード３を利用するための１つのミドルウェア２０と，オペレーションシステム（以下，ＯＳという。）３０と，リーダ／ライタ２を動作させるための複数のデバイスドライバ４０Ａ，４０Ｂ，…（以下，デバイスドライバ４０と総称する場合もある。）とを備える。このように，本実施形態にかかる情報処理装置１のソフトウェア構成は，アプリケーション１０，ミドルウェア２０，ＯＳ３０，デバイスドライバ４０という４階層に階層化されている。これらのアプリケーション１０，ミドルウェア２０，ＯＳ３０，デバイスドライバ４０は，上記情報処理装置１の記憶装置１１０に格納されたプログラムをＣＰＵ１０１が読み出すことによって実現される。以下に，各ソフトウェアの機能について説明する。
【００６１】
アプリケーション１０は，ユーザ（使用者）に対してＩＣカード３を利用した具体的なサービスを提供する機能を有するソフトウェアである。具体例を挙げると，各アプリケーション１０は，例えば，ＩＣカード３を用いたログイン認証機能，電車等の交通乗車券の履歴情報機能，ＩＣカード３にチャージされた電子マネーの残高表示機能，ＩＣカード３を利用したショッピングのポイント照会機能，ＩＣカード３に記憶されているクーポンや電子チケットの表示機能などの各種サービスを提供する。
【００６２】
これらのアプリケーション１０は，ミドルウェア２０及びデバイスドライバ４０と連携して動作することで，ユーザに対して上記各種のサービスを提供することができる。なお，かかるアプリケーション１０は，情報処理装置１の出荷時に予め組み込まれていてもよいし（プリインストール），或いは，ユーザにより事後的に情報処理装置１に追加設置されてもよい。また，情報処理装置１に設置されたアプリケーション１０を事後的に更新（アップグレード等）／削除することも可能である。
【００６３】
かかるアプリケーション１０は，上記各種機能を実行するために，ＩＣカード３に送信するコマンドの作成をミドルウェア２０に対して指示する。コマンドとしては，例えば，リーダ／ライタ２の周辺に所定のＩＣカード３が存在するか否かの探索を要求するポーリングコマンドや，ＩＣカード３に記憶されている各種情報（カードＩＤ，電子マネー情報，ショッピングの履歴情報，交通乗車券の履歴情報，クーポン情報，電子チケット情報など）を読み出すためのコマンド，ＩＣカード３に各種情報を書き込んだり更新したりするためのコマンドなどがある。また，情報処理装置１は，上記コマンドに対する応答として，ＩＣカード３からリーダ／ライタ２を介してレスポンスを受信するが，アプリケーション１０は，このレスポンスに含まれる情報に基づいて上記各種のサービス機能（電子マネーの残高表示等）をユーザに提供する。
【００６４】
ミドルウェア２０は，上記ＩＣカード３用の複数のアプリケーション１０で共通して利用される基本機能を，各アプリケーション１０に提供するソフトウェアである。これにより，ミドルウェア２０は，複数のアプリケーション１０が共通して使用する汎用的な機能を提供でき，個々のアプリケーション開発者が同一目的の機能をそれぞれ開発してしまう無駄を排除できる。かかるミドルウェア２０は，例えば共有ライブラリ形式（例えば，Ｗｉｎｄｏｗｓ（登録商標）のＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ）形式）のソフトウェアで構成される。
【００６５】
具体的には，ミドルウェア２０は，例えば，上記各種のアプリケーション１０で共通して利用されるアプリケーションプログラミングインターフェイス（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ：以下，ＡＰＩ）を有しており，このＡＰＩを各アプリケーション１０に提供する。このＡＰＩは，各アプリケーション１０の開発を容易にできるようにするためのコマンドや関数の集合である。アプリケーション１０は，かかるＡＰＩを呼び出すだけで，コマンドの実行要求などといったＩＣカード３の利用に関する基本機能を実行することができる。
【００６６】
また，ミドルウェア２０は，ＯＳ３０及びデバイスドライバ４０を介して，リーダ／ライタ２及びＩＣカード３を制御する機能を有する。具体的には，ミドルウェア２０は，各アプリケーション１０からのコマンド作成指示に基づき上記各種のコマンドを生成し，生成したコマンドをデバイスドライバ４０に出力して，コマンドの実行（即ち，リーダ／ライタ２を介したＩＣカード３へのコマンド送信）を要求する。また，ミドルウェア２０は，上記コマンドに応じてＩＣカード３から返信されたレスポンスを，リーダ／ライタ２及びデバイスドライバ４０を介して受け取り，当該レスポンスをアプリケーション１０に出力する。このように，ミドルウェア２０は，デバイスドライバ４０経由でリーダ／ライタ２にアクセスする。
【００６７】
また，上記各アプリケーション１０が使用できるリーダ／ライタ２は，予め規定されている。例えば，図４の例では，アプリケーション１０Ａ，１０Ｂ，１０Ｃはリーダ／ライタ２Ａを使用し，アプリケーション１０Ｄ，１０Ｅはリーダ／ライタ２Ｂを使用するように定められている。ミドルウェア２０は，複数のリーダ／ライタ２のうち各アプリケーション１０が使用可能な１または２以上のリーダ／ライタ２のリスト（即ち，各アプリケーション１０がアクセスしてコマンド・レスポンスをやり取り可能なリーダ／ライタ２のリスト）を保持している。ミドルウェア２０は，このリストに基づき各リーダ／ライタ２を走査して，アプリケーション１０が使用するリーダ／ライタ２を決定する。また，ミドルウェア２０は，アプリケーション１０によるリーダ／ライタ２の指定に基づき，アプリケーション１０が使用するリーダ／ライタ２を，上記指定されたリーダ／ライタ２に決定することもできる。このようなミドルウェア２０の機能により，複数の情報処理装置１に複数のリーダ／ライタ２が接続されている場合に，各アプリケーション１０が適切なリーダ／ライタ２を使用して，コマンド送信，レスポンス受信等の処理を円滑に実行できるようになる。
【００６８】
ＯＳ３０は，情報処理装置１全体を管理する基本ソフトウェアである。このＯＳ３０は，上記入力装置１０８や出力装置１０９による入出力機能や記憶装置１１０の管理機能などといった，複数のアプリケーション１０及びミドルウェア２０により共通して利用される基本的な機能を提供する。
【００６９】
デバイスドライバ４０は，リーダ／ライタ２を動作させるためのソフトウェアであり，ミドルウェア２０から受け取ったコマンドに基づいて，リーダ／ライタ２を制御する機能を有する。このデバイスドライバ４０は，各リーダ／ライタ２に対応してそれぞれ設けられる。図４の例では，リーダ／ライタ２Ａに対応するデバイスドライバ４０Ａと，リーダ／ライタ２Ｂに対応するデバイスドライバ４０Ｂとが設けられている。しかし，かかる例に限定されず，リーダ／ライタ２の接続数に応じて，１又は３つ以上のデバイスドライバ４０を設けることもできる。ＯＳ３０は，情報処理装置１にリーダ／ライタ２が接続されると，このリーダ／ライタ２に対応するデバイスドライバ４０をロードして，当該デバイスドライバ４０のインスタンスを生成する。
【００７０】
デバイスドライバ４０は，上記アプリケーション１０からミドルウェア２０を介して受け取ったコマンドを処理して，リーダ／ライタ２に出力する。これに応じて，リーダ／ライタ２は当該コマンドをＩＣカード３に送信する。また，デバイスドライバ４０は，ＩＣカード３からリーダ／ライタ２を介して受信したレスポンスを解析処理して，ミドルウェア２０に出力する。
【００７１】
このとき，複数のアプリケーション１０からミドルウェア２０を介して複数のコマンドを受け取った場合には，デバイスドライバ４０は，これらの複数のコマンドを，当該コマンドの受け取り順に順次処理する。具体的には，デバイスドライバ４０はミドルウェア２０からのコマンド実行要求を受け取ると，他のアプリケーション１０からのコマンドを処理中であるか否かを判定し，処理中でない場合には，当該受け付けたコマンドを実行し，一方，処理中である場合には，当該受け付けたコマンドを処理待ち状態とし，処理中のコマンドの処理がした後に，当該受け付けたコマンドを処理する。このようにして，デバイスドライバ４０が複数のアプリケーション１０から受け取った複数のコマンドを受け取り順に順次実行することにより，複数のアプリケーション１０が１つのリーダ／ライタ２を同時並行して使用できるようになり，マルチアプリケーション対応を好適に実現できる。
【００７２】
また，デバイスドライバ４０は，複数のアプリケーション１０が１つのリーダ／ライタ２に同時にアクセス可能な共有モードと，１つのアプリケーション１０のみが１つのリーダ／ライタ２にアクセス可能な専有モードとを切り替えて設定することができる。共有モードでは，あるアプリケーション１０Ａがリーダ／ライタ２Ａを使用中でも，他のアプリケーション１０Ｂが当該リーダ／ライタ２Ａにアクセスすることが可能になる。一方，専有モードでは，あるアプリケーション１０Ａがリーダ／ライタを使用中には，他のアプリケーション１０Ｂがリーダ／ライタにアクセスすることが不可能になる。デバイスドライバ４０は，例えば，各アプリケーション１０からミドルウェア２０を介して要求されるモード指定に基づいて，上記共有モードと専有モードとを切り替えることができる。
【００７３】
このように，デバイスドライバ４０により共有モードと専有モードを切り替え可能に構成することで，情報処理装置１において，共有モードでは複数のアプリケーション１０が１つのリーダ／ライタ２を同時並行して利用できるようになるため，マルチアプリケーション対応を好適に実現できる。一方，専有モードでは１のアプリケーション１０がリーダ／ライタ２を専有してコマンドやレスポンスをやり取りすることで，ＩＣカード３に関する自己の機能を安定して実行できる。
【００７４】
さらに，上記共有モードにおいて，デバイスドライバ４０は，あるアプリケーション１０からのアクセス権の付与要求に応じて，リーダ／ライタ２に対する独占的なアクセス権を当該アプリケーションに付与する。さらに，デバイスドライバ４０は，上記アクセス権を取得しているアプリケーション１０からのアクセス権の解除要求に応じて，当該アプリケーションに付与していたアクセス権を解除する。このようなアクセス権を付与することで，共有モードにおいても，デバイスドライバ４０は，当該アプリケーション１０にアクセス権を付与してから解除するまでの間は，クリティカルセクションとして，当該アプリケーション１０から受け付けたコマンドのみを連続して処理し，他のアプリケーション１０から受け付けたコマンドの処理を待ち状態として処理しないようにする。このアクセス権の詳細については後述する。
【００７５】
また，デバイスドライバ４０は，当該デバイスドライバ４０に対応する１つのリーダ／ライタ２に対して，同時にアクセス可能なアプリケーション１０の数を所定の最大アクセス数以下に制限する，これにより，上記最大アクセス数より多くのアプリケーション１０がリーダ／ライタ２にアクセスすることで，情報処理装置１又はリーダ／ライタ２の負荷が過度に増大してしまうことを防止できる。
【００７６】
次に，引き続き図４を参照して，ＩＣカード３のソフトウェア構成について説明する。図４に示すようにＩＣカード３には，ソフトウェアとして，例えば，ＩＣカード３用のオペレーションシステム（以下，ＯＳ）３２のみが設けられており，ＩＣカード３用のアプリケーションは設けられておらず，当該アプリケーションをユーザが事後的にＩＣカード３に追加することもできない。ＩＣカード３のメモリ３０８内には，例えば，予め登録されているディレクトリ構造のデータファイルがあり，このデータファイル内に各種の情報（例えば，電子マネー情報，交通乗車券の履歴情報，ショッピングのポイント情報，電子チケット情報，クーポン情報など）が記憶されている。ＯＳ３２は，上記情報処理装置１からリーダ／ライタ２を介して受信したコマンドに応じて，上記メモリ３０８内に記憶されている各種の情報を読み書きする。
【００７７】
このように，本実施形態にかかるＩＣカード３は，ＩＣカード用のアプリケーションは組み込まれておらず，ＯＳ３２が情報処理装置１からのコマンドに応じてメモリ３０８内のデータを読み書きするだけのシンプルな構造である。また，このＩＣカード３では，予めＯＳ３２で設定されたコマンドを後から変更（解釈変更，追加等）できないようになっている。従って，当該ＩＣカード３を利用する複数のアプリケーション１０を情報処理装置１に設けた場合，マルチアプリケーション対応を好適に実現するためには，情報処理装置１側だけで，ＩＣカード３用のミドルウェア２０やデバイスドライバ４０を好適に設計する必要がある。
【００７８】
次に，図５を参照して，本実施形態にかかるミドルウェア２０とデバイスドライバ４０の構成について詳細に説明する。なお，図５は，本実施形態にかかるミドルウェア２０とデバイスドライバ４０の構成を示すブロック図である。
【００７９】
まず，ミドルウェア２０の構成について説明する。図５に示すように，ミドルウェア２０は，例えば，ＡＰＩ２２と，ミドルウェアコア部２４と，通信情報記憶部２６と，デバイス制御部２８とを有する。
【００８０】
ＡＰＩ２２は，上記各アプリケーション１０がリーダ／ライタ２，ＩＣカード３を利用するためのコマンドや関数の集合である。このように，ミドルウェア２０が，複数のアプリケーション１０が共通して利用する基本機能であるＡＰＩ２２を提供することで，各アプリケーション１０の開発を容易にすることができる。
【００８１】
ここで，ミドルウェア２０が提供するＡＰＩ２２の具体例について説明する。例えば，ミドルウェア２０は，ＩＣカード３に送信するコマンドを作成するためのＡＰＩ２２を提供する。これにより，アプリケーション１０は，このＡＰＩ２２を利用して，当該コマンドを作成するようミドルウェア２０に指示することができる。
【００８２】
また，ミドルウェア２０は，アプリケーション１０が，リーダ／ライタ２（アクセスしたいリーダ／ライタ２）の接続ポート名（例えばＵＳＢポート名）や，通信速度などを指定できるようなＡＰＩ２２を提供する。これにより，アプリケーション１０は，このＡＰＩ２２を利用することで，ミドルウェア２０に対して，自身がアクセスを所望するリーダ／ライタ２や，リーダ／ライタ２との間の通信速度を指定できるようになる。
【００８３】
また，ミドルウェア２０は，アプリケーション１０が，上記共有モード又は専有モードのいずれかを選択できるようなＡＰＩ２２を提供する。これにより，アプリケーション１０は，このＡＰＩ２２を利用することで，リーダ／ライタ２にアクセスする際に共有モード又は専有モードのいずれでアクセスするかを選択できるようになる。デバイスドライバ４０は，かかるアプリケーション１０からのモード選択に応じて，共有モードと専有モードを切り替える設定を行う。
【００８４】
さらに，ミドルウェア２０は，上記共有モードにおいて，アプリケーション１０がリーダ／ライタ２へのアクセス権の付与／解除を要求できるようなＡＰＩ２２を提供する。これにより，アプリケーション１０は，例えば，連続して処理する必要がある一連のコマンドを実行する場合に，このＡＰＩ２２利用して，ミドルウェア２０を介してデバイスドライバ４０に対しアクセス権の付与／解除を要求して，リーダ／ライタ２への独占的なアクセス権を取得／解放できるようになる。
【００８５】
次に，ミドルウェアコア部２４は，ミドルウェア２０の中心的な処理を行う心臓部である。このミドルウェアコア部２４は，アプリケーション１０からの指示に基づき，上記各種のコマンドを作成して，デバイスドライバ４０に当該コマンドの実行を要求する。また，このミドルウェアコア部２４は，当該コマンドの暗号化／復号化処理，ユーティリティ処理なども行う。さらに，ミドルウェアコア部２４は，作成したコマンドをデバイス制御部２８に出力し，また，デバイス制御部２８から入力されたレスポンスをアプリケーション１０に出力する。
【００８６】
また，ミドルウェアコア部２４は，アプリケーション１０がリーダ／ライタ２を使用可能な状態とする（リーダ／ライタ２をオープンする）ために，リーダ／ライタ２を走査して，アプリケーション１０が使用可能なリーダ／ライタ２を選択する。ミドルウェアコア部２４は，この使用可能な状態とするリーダ／ライタ２の選択を，上述したようにアプリケーション１０からの指定に基づいて行ってもよいし，或いは，各アプリケーション１０が使用可能なリーダ／ライタ２のリストに基づき各リーダ／ライタ２を順次選択してもよい。
【００８７】
さらに，ミドルウェアコア部２４は，通信情報記憶部２６に記憶されている通信情報を管理する。この通信情報記憶部２６は，例えば上記情報処理装置１の記憶装置１１０などで構成される。この通信情報記憶部２６は，リーダ／ライタ２にアクセス可能な各アプリケーション１０Ａ，１０Ｂ，１０Ｃに対応する通信情報テーブル２７Ａ，２７Ｂ，２７Ｃ（以下，通信情報テーブル２７と総称する場合もある。）を記憶している。この通信情報テーブル２７は，各アプリケーション１０Ａ，１０Ｂ，１０Ｃとリーダ／ライタ２との間の通信状態に関する情報を含むテーブルである。この通信情報テーブル２７に含まれる通信情報は，例えば，ドライバハンドル，アクセス権待ちタイムアウト時間，通信タイムアウト時間，エラーコード，トランザクション情報などである。これらの通信情報の詳細については後述する。
【００８８】
デバイス制御部２８は，デバイスドライバ４０のコマンド受付部４２に対して，上記ミドルウェアコア部２４によって作成されたコマンドの実行処理を依頼して，リーダ／ライタ２やＩＣカード３等のデバイスを制御する。また，デバイス制御部２８は，デバイスドライバ４０のレスポンス解析部４５から受け取ったレスポンスをミドルウェアコア部２４に出力する。
【００８９】
次に，デバイスドライバ４０の構成について説明する。図５に示すように，デバイスドライバ４０は，例えば，コマンド受付部４２と，コマンド実行部４４と，レスポンス解析部４５と，通信情報記憶部４６と，バス制御部４８とを有する。
【００９０】
コマンド受付部４２は，ミドルウェア２０から要求されたコマンドを受け付け，コマンド実行部４４に当該コマンドの実行を依頼する。コマンド実行部４４は，コマンド受付部４２から依頼されたコマンドを実行して，当該コマンドをリーダ／ライタ２を介してＩＣカード３に送信するようにバス制御部４８に依頼する。レスポンス解析部４５は，リーダ／ライタ２からバス制御部４８を介して受け取ったレスポンスを解析し，ミドルウェア２０に出力する。
【００９１】
バス制御部４８は，コマンド実行部４４，レスポンス解析部４５からの指示に従い，情報処理装置１内におけるリーダ／ライタ２と通信するためのハードウェア（例えば，図２の外部バス１０６，インタフェース１０７，接続ポート１１１等）を制御する。このバス制御部４８を介して，コマンド実行部及びレスポンス解析部４５とリーダ／ライタ２との間で，コマンド及びレスポンスをやり取りできる。
【００９２】
このような構成のデバイスドライバ４０において，コマンド受付部４２は，アプリケーション１０からのモード指定に基づき，コマンドの受付モードを上記共有モードまたは専有モードに設定することができる。専有モードに設定されているときには，コマンド受付部４２は，専有モードを指定した特定の１つのアプリケーション１０からのコマンドのみを受け付けて，コマンド実行部４４にコマンドの実行を依頼し，他のアプリケーション１０からのコマンドは受け付けない。
【００９３】
一方，共有モードに設定されているときには，コマンド受付部４２は，複数のアプリケーション１０からのコマンドを受け付ける。そして，コマンド受付部４２は，この共有モードにおいて，複数のアプリケーション１０から複数のコマンドを受け取った場合には，これらのコマンドを受け取り順に順次実行するようにコマンド実行部４４に依頼する。
【００９４】
具体的には，コマンド受付部４２は，アプリケーション１０からのコマンドの実行要求を受け付けると，他のアプリケーション１０からの処理を実行していないシグナル状態であるか否かを判定し，シグナル状態であれば，当該受け付けたコマンドを即時実行するようコマンド実行部４４に依頼する。一方，他のコマンドの処理を実行している非シグナル状態であれば，当該受け付けたコマンドを実行待ち状態とし，当該他のコマンドの処理が終了し，かつ，先に処理待ち状態となっているコマンドの処理が全て終了した時点で，上記受け付けたコマンドを実行するようコマンド実行部４４に依頼する。このように，コマンド受付部４２は，先に受け付けたコマンドの実行が終了すると，非シグナル状態からシグナル状態とし，次に受け付けたアプリケーション１０からのコマンドを実行できるようにする。これにより，各コマンドの原子性を確保（即ち，各コマンドの処理が成功したか失敗したかを明確化）することができる。
【００９５】
さらに，上記共有モードに設定されている場合において，コマンド受付部４２は，アプリケーション１０からのアクセス権の付与／解除要求に応じて，リーダ／ライタ２に対するアクセス権を要求元のアプリケーション１０に付与／解除することができる。これにより，上記要求元のアプリケーション１０にアクセス権を付与してから解除するまでの間（換言すると，アプリケーション１０がアクセス権を取得してから解放するまでの間）は，クリティカルセクションとして，当該アクセス権が付与されたアプリケーション１０から受け取ったコマンドのみを実行するようにし，他のアプリケーション１０から受け取ったコマンドを実行待ち状態とする。これにより，上記クリティカルセクションの間は，当該アプリケーション１０からのコマンドのみの実行を許可し，他のアプリケーション１０からのコマンド実行を禁止することができる。
【００９６】
また，複数のアプリケーション１０から１つのリーダ／ライタ２にコマンド実行要求が重なると，コマンドの処理が遅延するため，各アプリケーション１０の機能に影響を与えてしまう可能性がある。そこで，コマンド受付部４２は，あるアプリケーション１０からのコマンドを処理中（非シグナル状態）のときに，他のアプリケーション１０からのコマンドを受け取ると，当該コマンドの受け取り時から，各アプリケーション１０から指定された所定のアクセス権待ちタイムアウト時間が経過するまでは，当該他のアプリケーション１０からのコマンドの実行を待機状態にする。この結果，上記アクセス権待ちタイムアウト時間が経過する前に，先行するコマンドの処理が終了したときには，待機中の上記他のアプリケーション１０からのコマンドを処理する。一方，先行するコマンドの処理が終了しないまま上記アクセス権待ちタイムアウト時間が経過したときには，当該他のアプリケーション１０にタイムアウトエラーを通知する。
【００９７】
これにより，コマンド受付部４２は，各アプリケーション１０からのコマンド実行前にタイムアウトのチェックができるようになる。このため，各アプリケーション１０のコマンド実行の待機時間を上記アクセス権待ちタイムアウト時間以下に抑制できる。従って，１つのリーダ／ライタ２に対して複数のアプリケーション１０からのコマンド実行要求が重なったときに，コマンドの処理遅延に伴うアプリケーション１０への悪影響を排除できる。なお，デバイスドライバ４０からのタイムアウトエラー通知を受け取ったアプリケーション１０は，例えば，同一コマンドの実行要求をリトライしたり，或いは，当該コマンドが実行されなかった旨のエラー表示を行いユーザに通知したりできる。
【００９８】
なお，コマンド実行中は，バス制御部４８でリーダ／ライタ２との通信中に発生したタイムアウトも，通信タイムアウトとしてアプリケーション１０に通知できる。これにより，デバイスドライバ４０とリーダ／ライタ２との間の通信異常が原因で，予め設定された通信タイムアウト時間以上にわたりコマンドの処理が完了しない場合に，アプリケーション１０は当該通信エラーを把握できる。
【００９９】
また，上記デバイスドライバ４０のコマンド実行部４４及びレスポンス解析部４５は，通信情報記憶部４６に記憶されている通信情報を管理する。通信情報記憶部４６は，例えば上記情報処理装置１の記憶装置１１０などで構成される。この通信情報記憶部４６は，リーダ／ライタ２にアクセス可能な各アプリケーション１０Ａ，１０Ｂ，１０Ｃに対応する通信情報テーブル４７Ａ，４７Ｂ，４７Ｃ（以下，通信情報テーブル４７と総称する場合もある。）を記憶している。この通信情報テーブル４７は，各アプリケーション１０Ａ，１０Ｂ，１０Ｃとリーダ／ライタ２との間の通信状態に関する情報を含むテーブルである。この通信情報テーブル４７に含まれる通信情報は，例えば，要求元アプリケーションＩＤ，レスポンスデータ，アクセス権待ちタイムアウト時間，通信タイムアウト時間，エラーコード，リーダ／ライタモード情報，トランザクション情報などである。
【０１００】
要求元アプリケーションＩＤは，コマンドの実行要求元のアプリケーション１０を識別するためのＩＤである。この要求元プロセスＩＤにより，通信情報テーブル４７Ａ，４７Ｂ，４７Ｃと，各アプリケーション１０Ａ，１０Ｂ，１０Ｃとをそれぞれ関連づけることができる。
【０１０１】
レスポンスデータは，上記リーダ／ライタ２からＩＣカード３に送信されたコマンドの応答として，ＩＣカード３からリーダ／ライタ２に送信されたレスポンスのデータである。このレスポンスデータは，リーダ／ライタ２がＩＣカード３から受信したレスポンスに基づき作成して，デバイスドライバ４０内の通信情報テーブル４７に保持される。このように，各アプリケーション１０に対応する通信情報テーブル４７内に，各アプリケーション１０に関するレスポンスデータをそれぞれ保持しておくことにより，デバイスドライバ４０は，複数のアプリケーション１０に関して複数のコマンド，レスポンスをやり取りするときでも，各アプリケーション１０についてどのようなレスポンスが返信されている状態であるかを把握できるようになる。
【０１０２】
アクセス権待ちタイムアウト時間は，上記のように各アプリケーション１０からのコマンドの実行待ちを行う際の上限となる時間である。このアクセス権待ちタイムアウト時間は，アプリケーション１０ごとに異なる時間値を自由に設定でき，各アプリケーション１０からの指定可能である。デバイスドライバ４０は，初期段階では，各通信情報テーブル４７内に，アクセス権待ちタイムアウト時間のデフォルト値（例えば５秒）を保持しており，各アプリケーション１０からアクセス権待ちタイムアウト時間が指定された場合には，アクセス権待ちタイムアウト時間をデフォルト値から，指定された時間値（例えば１０秒）に変更する。
【０１０３】
通信タイムアウト時間は，上記のようにデバイスドライバ４０とリーダ／ライタ２との通信時間を制限する際の上限時間である。この通信タイムアウトも，アプリケーション１０ごとに異なる時間値を設定することができる。デバイスドライバ４０は，リーダ／ライタにコマンドを出力してから，所定の通信タイムアウト時間以上レスポンスがなければ，通信タイムアウトとして，アプリケーション１０に通知する。
【０１０４】
エラーコードは，ドライバの中で発生する多様なエラーを表すコードであり，デバイスドライバ４０によって作成される。デバイスドライバ４０は，このエラーコードを保持することにより，各アプリケーション１０に関する処理でどのようなエラーが生じたかを把握できる。
【０１０５】
リーダ／ライタモード情報は，各アプリケーション１０がリーダ／ライタ２にアクセス可能であるか否かを表す情報である。アプリケーション１０がリーダ／ライタ２にアクセス可能にする（アプリケーション１０がリーダ／ライタ２をオープンする）ためには，まず，アプリケーション１０とリーダ／ライタ２との間で擬似的な相互認証を行う必要がある。本実施形態では，デバイスドライバ４０が当該擬似的な相互認証機能を有しているので，デバイスドライバ４０は，この擬似的な相互認証が成功したか否かを，リーダ／ライタモード情報として保持している。これにより，デバイスドライバ４０は，どのアプリケーション１０がリーダ／ライタ２にアクセス可能であるかを把握できる。
【０１０６】
トランザクション情報は，デバイスドライバ４０とリーダ／ライタ２との間の通信情報である。
【０１０７】
以上では，デバイスドライバ４０の通信情報テーブル４７内の各通信情報について説明した。なお，上記ミドルウェア２０の通信情報テーブル２７内の各通信情報も，これら通信情報テーブル４７内の各通信情報と同様であるので，詳細説明は省略する。ただし，通信情報テーブル２７内のドライバハンドルは，各アプリケーション１０がミドルウェア２０を介してデバイスドライバ４０にアクセスするためのＩＤであり，アプリケーション１０がどのデバイスドライバ４０にアクセスしているかを表す。
【０１０８】
上述したように，デバイスドライバ４０およびミドルウェア２０は，リーダ／ライタ２にアクセス可能となったアプリケーション１０ごとに，タイムアウト時間やリーダ／ライタ２との通信結果などの通信情報を保持している。これより，各アプリケーション１０は，任意のタイミングで通信結果をミドルウェア２０から取得できるようなる。さらに，デバイスドライバ４０は，アプリケーション１０ごとに任意のタイムアウト時間値を設定することができるようになる。
【０１０９】
以上，本実施形態にかかる情報処理装置１の構成について説明し，特に，デバイスドライバ４０とミドルウェア２０の構成について詳述した。次に，上記構成の情報処理装置１におけるアプリケーション調停方法について説明する。
【０１１０】
まず，本実施形態にかかるアプリケーション調停方法における，リーダ／ライタ２のオープン処理について説明する。各アプリケーション１０がリーダ／ライタ２を使用してコマンドやレスポンスをやり取りするためには，まず，アプリケーション１０に対してリーダ／ライタ２をオープンする必要がある。この「リーダ／ライタ２のオープン」とは，アプリケーション１０とリーダ／ライタ２との間でデバイスドライバ４０を介して擬似的な相互認証を行い，アプリケーション１０がリーダ／ライタ２を使用可能な状態（例えば，アプリケーション１０とリーダ／ライタ２との間でコマンドやレスポンスをやり取り可能な状態）にすることをいう。このオープン処理は，ミドルウェア２０とリーダ／ライタ２とが協同して動作することで実行される。
【０１１１】
ミドルウェア２０は，各アプリケーション１０からのリーダ／ライタ２のオープン要求（使用要求）に応じて，オープン対象のリーダ／ライタ２を選択し，選択したオープン対象のリーダ／ライタ２に対応するデバイスドライバ４０に対して，リーダ／ライタ２のオープンを実行するよう（アプリケーション１０が当該オープン対象のリーダ／ライタ２を使用可能な状態にするよう）要求する。
【０１１２】
情報処理装置１に複数のリーダ／ライタ２が接続されている場合，ミドルウェア２０が複数のリーダ／ライタ２の中からオープン対象のリーダ／ライタ２を選択する方法としては，例えば，（１）アプリケーション１０から指定されたリーダ／ライタ２をオープン対象のリーダ／ライタ２として選択する方法と，（２）ミドルウェア２０が保持しているリストを利用して，アプリケーション１０が使用可能な複数のリーダ／ライタ２を，オープン対象のリーダ／ライタ２として自動的に順次選択する方法とがある。
【０１１３】
まず，図６を参照して，上記（１）の選択方法を用いたミドルウェア２０の処理フローについて説明する。なお，図６は，本実施形態にかかるミドルウェア２０がアプリケーション１０から指定されたリーダ／ライタ２をオープンする処理を示すフローチャートである。
【０１１４】
図６に示すように，まず，ミドルウェア２０は，アプリケーション１０から，アプリケーション１０により指定されたリーダ／ライタ２（ＲＷｉ）のオープン要求を受け付ける（ステップＳ１０）。各アプリケーション１０は，自己の使用可能なリーダ／ライタ２の識別情報（例えば，ポート名，リーダ／ライタＩＤ等）を保持している。アプリケーション１０は，ミドルウェア２０に対してオープン要求を行う場合，オープンを所望するリーダ／ライタ２（ＲＷｉ）の識別情報をオープン要求に付加することで，オープン対象のリーダ／ライタ２を指定することができる。ミドルウェア２０は，上記アプリケーション１０から指定されたリーダ／ライタ２（ＲＷｉ）をオープン対象のリーダ／ライタ２として選択する。
【０１１５】
次いで，ミドルウェア２０は，アプリケーション１０により指定されたリーダ／ライタ２（ＲＷｉ）をオープンするよう，当該リーダ／ライタ２（ＲＷｉ）に対応するデバイスドライバ４０に対して要求する（ステップＳ１２）。このオープン実行要求を受けたデバイスドライバ４０は，上記指定されたリーダ／ライタ２（ＲＷｉ）が当該アプリケーション１０によりアクセス可能な状態であるか否かを所定の判定条件に基づき判定し，アクセス可能な状態であると判定すれば，当該リーダ／ライタ２（ＲＷｉ）のオープンし，アクセス可能な状態でないと判定すれば，当該リーダ／ライタ２（ＲＷｉ）をオープンしない。このデバイスドライバ４０による処理の詳細は後述する（図８参照）。
【０１１６】
次いで，ミドルウェア２０は，デバイスドライバ４０からのオープン成功／失敗の通知に基づき，リーダ／ライタ２（ＲＷｉ）のオープンに成功したか否かを判別する（ステップＳ１４）。この結果，リーダ／ライタ２（ＲＷｉ）のオープンに成功している場合には，ミドルウェア２０は，上記オープン要求元のアプリケーション１０がリーダ／ライタ２（ＲＷｉ）を使用できるように各種の設定（例えば，上記通信情報テーブル２７の設定等）を行い，当該アプリケーション１０にオープン成功を通知する（ステップＳ１６）。この場合には，当該アプリケーション１０がリーダ／ライタ２（ＲＷｉ）を使用可能な状態となり，それ以降は両者の間でコマンドやレスポンスをやり取りできるようになる。一方，リーダ／ライタ２（ＲＷｉ）のオープンに失敗している場合には，ミドルウェア２０は，上記オープン要求元のアプリケーション１０にオープン失敗を通知する（ステップＳ１８）。この場合，当該アプリケーション１０がリーダ／ライタ２（ＲＷｉ）を使用可能な状態とはならず，両者の間でコマンドやレスポンスをやり取りすることはできない。
【０１１７】
以上のように図６の処理フローでは，ミドルウェア２０は，アプリケーション１０から指定されたリーダ／ライタ２をオープンするように制御する。
【０１１８】
次に，図７を参照して，上記（２）の選択方法を用いたミドルウェア２０の処理フローについて説明する。なお，図７は，本実施形態にかかるミドルウェア２０が複数のリーダ／ライタ２を順次走査してオープンする処理を示すフローチャートである。
【０１１９】
図７に示すように，まず，ミドルウェア２０は，アプリケーション１０から，リーダ／ライタ２のオープン要求（リーダ／ライタ２を使用したい旨の要求）を受け付ける（ステップＳ２０）。図７のフローでは，アプリケーション１０は，ミドルウェア２０に対し，特定のリーダ／ライタ２を指定せず，情報処理装置１に接続された複数のリーダ／ライタ２のうち少なくともいずれかのリーダ／ライタ２をオープンするよう要求する。これに応じて，ミドルウェア２０は，以下の処理フローのように，アプリケーション１０が使用可能なリーダ／ライタ２を自動的に検索して順次オープンするよう制御する。
【０１２０】
次いで，ミドルウェア２０は，自動検索する１又は２以上のリーダ／ライタ２のリストを取得する（ステップＳ２２）。ミドルウェア２０は，各アプリケーション１０が使用可能なリーダ／ライタ２の識別情報を，自動検索するリーダ／ライタ２のリストとして，アプリケーション１０ごとに予め保持している。このように，ミドルウェア２０では，アプリケーション１０ごとに，どのリーダ／ライタ２を自動検索するかが予め設定されている。なお，このリーダ／ライタ２のリスト設定は，アプリケーション１０によって変更可能である。
【０１２１】
ミドルウェア２０は，上記のようにアプリケーション１０からオープン要求を受け付ける（Ｓ２０）と，当該オープン要求元のアプリケーション１０に対応するリストを読み出して，自動検索するリーダ／ライタ２の識別情報を取得する（Ｓ２２）。図７の例では，合計ｎ台のリーダ／ライタ２（ＲＷ１，ＲＷ２，…，ＲＷｎ）がオープン対象のリーダ／ライタ２としてリストアップされており，以下では，ＲＷ１，ＲＷ２，…，ＲＷｎの順で選択してオープン処理を実行する例について説明する。
【０１２２】
具体的には，ミドルウェア２０は，まず，変数ｉの初期値を「０」に設定し（ステップＳ２４），この変数ｉに「１」を加え（ステップＳ２６），さらに，変数ｉがｎ以下であるかを確認（ステップＳ２８）して，リーダ／ライタ２（ＲＷ１）をオープン対象のリーダ／ライタ２として選択する。
【０１２３】
次いで，ミドルウェア２０は，このリーダ／ライタ２（ＲＷ１）をオープンするよう，当該リーダ／ライタ２（ＲＷ１）に対応するデバイスドライバ４０に対して要求する（ステップＳ３０）。このステップＳ３０は，上記図６のステップＳ１２と同様である。この結果，ミドルウェア２０は，デバイスドライバ４０から取得したオープン成功／失敗の通知に基づき，リーダ／ライタ２（ＲＷ１）のオープンに成功したか否かを判別する（ステップＳ３２）。この結果，リーダ／ライタ２（ＲＷ１）のオープンに成功している場合には，ステップＳ３４に進み，ミドルウェア２０は，上記オープン要求元のアプリケーション１０がリーダ／ライタ２（ＲＷ１）を使用できるように上記各種の設定を行い，当該アプリケーション１０にリーダ／ライタ２（ＲＷ１）のオープン成功を通知する（ステップＳ３４）。一方，リーダ／ライタ２（ＲＷ１）のオープンに失敗している場合には，ステップＳ２６に戻り，ミドルウェア２０は，上記リスト内の次のリーダ／ライタ２（ＲＷ２）をオープン対象のリーダ／ライタ２として選択して，上記リーダ／ライタ２（ＲＷ１）と同様にリーダ／ライタ２（ＲＷ２）のオープンを試みる。
【０１２４】
このような処理を，いずれかのリーダ／ライタ２のオープンが成功する（ステップＳ３２）まで繰り返す。この結果，ｎ台全てのリーダ／ライタ２（ＲＷ１，ＲＷ２，…，ＲＷｎ）のオープンが失敗した場合には，ステップＳ２８で「変数ｉ＞ｎ」と判定されてステップＳ３６に進み，ミドルウェア２０は，上記オープン要求元のアプリケーション１０に対して，全てのリーダ／ライタ２についてオープンできなかった旨を通知する（ステップＳ３６）。
【０１２５】
以上のように図７の処理フローでは，ミドルウェア２０は，予め設定されたリストの順番に従って，アプリケーション１０が使用可能なリーダ／ライタ２（ＲＷ１，ＲＷ２，…，ＲＷｎ）の中から，オープン対象のリーダ／ライタ２を自動的に順次選択する。そしてミドルウェア２０は，当該選択されたリーダ／ライタに対応する各デバイスドライバ４０に対し，当該選択されたリーダ／ライタ２をオープンするよう順次要求して，オープンを試みる。これにより，ミドルウェア２０は，アプリケーション１０からの要求があった場合に，当該アプリケーション１０に適したリーダ／ライタ２を自動的に検索してオープンさせることができる。
【０１２６】
なお，上記図７のフローでは，あるリーダ／ライタ２のオープンが成功すれば処理を終了し，他のリーダ／ライタ２のオープンを試みない例について説明したが，かかる例に限定されず，ミドルウェア２０が保持するリスト内のリーダ／ライタ２（ＲＷ１，ＲＷ２，…，ＲＷｎ）についてオープンを試みて，１つのアプリケーション１０に対して複数のリーダ／ライタ２を同時にオープンさせるようにしてもよい。このように同時にオープンされた複数のリーダ／ライタ２を利用するアプリケーション１０としては，例えば，複数の選択肢の中からユーザの回答を選択するアンケート機能やクイズ機能を有するアプリケーション１０が挙げられる。かかるアプリケーション１０では，各選択肢に対応づけられた複数のリーダ／ライタ２のうち，いずれのリーダ／ライタ２にＩＣカード３が接続されたかに基づいて，ユーザの回答を選択することができる。
【０１２７】
次に，図８を参照して，本実施形態にかかるデバイスドライバ４０が，ミドルウェア２０から要求されたリーダ／ライタ２をオープンする処理フローについて説明する。なお，図８は，本実施形態にかかるデバイスドライバ４０が，ミドルウェア２０から要求されたリーダ／ライタ２をオープンする処理を示すフローチャートである。
【０１２８】
図８に示すように，まず，デバイスドライバ４０は，ミドルウェア２０から，リーダ／ライタ２（ＲＷｉ）のオープン実行要求を受け付ける（ステップＳ４０）。このリーダ／ライタ２（ＲＷｉ）のオープン実行要求は，上述した図６の処理フローにおけるステップＳ１２，又は，図７の処理フローにおけるステップＳ３０にて成されたものである。
【０１２９】
このオープン実行要求に応じて，デバイスドライバ４０は，自身が保持しているリーダ／ライタ２の識別情報（ＲＷｊ）を取得し（ステップＳ４２），この識別情報（ＲＷｊ）と，上記ミドルウェア２０から要求されたリーダ／ライタ２の識別情報（ＲＷｉ）とが一致するか否かを判定する（ステップＳ４４）。デバイスドライバ４０は，リーダ／ライタ２と１：１対応で設けられており，各デバイスドライバ４０は，自身に対応するリーダ／ライタ２（ＲＷｊ）のみを制御可能である。そこで，デバイスドライバ４０は，上記識別情報（ＲＷｊ）と上記識別情報（ＲＷｉ）とを比較し，両者が一致すれば，自身に対応するリーダ／ライタ２に関する正当なオープン要求を受け付けたと判断できるため，ステップＳ４６に進み処理を続ける。一方，識別情報（ＲＷｊ）と上記識別情報（ＲＷｉ）とが一致しない場合には，デバイスドライバ４０に対応していない別のリーダ／ライタ２（ＲＷｉ）に関するオープン要求を受け付けたことになるため，ステップＳ５６に進み，リーダ／ライタ２（ＲＷｉ）のオープンを失敗とし，その旨をミドルウェア２０に通知する。
【０１３０】
次いで，ステップＳ４６では，デバイスドライバ４０は，リーダ／ライタ２（ＲＷｉ＝ＲＷｊ）が既に他のアプリケーション１０に対して専有モードでオープンされているか否かを判定する（ステップＳ４６）。専有モードでは，１つのアプリケーション１０のみがリーダ／ライタ２（ＲＷｉ）を使用できるので，後続の他のアプリケーション１０からのオープン要求を禁止する必要がある。そこで，本ステップＳ４６で，リーダ／ライタ２（ＲＷｉ）が専有モードでオープンされていると判定された場合には，ステップＳ５６に進み，リーダ／ライタ２（ＲＷｉ）のオープンを失敗とし，その旨をミドルウェア２０に通知する。一方，リーダ／ライタ２（ＲＷｉ）が専有モードでオープンされていない（例えば，他のいずれのアプリケーション１０によってもオープンされていない，或いは，他のアプリケーション１０によってオープンされているが共有モードでオープンされている）と判定された場合には，ステップＳ４８に進む。
【０１３１】
次いで，ステップＳ４８では，デバイスドライバ４０は，リーダ／ライタ２（ＲＷｉ）に対して既にアクセスしているアプリケーション１０の数が，所定の最大アクセス数に達しているか否かを判定する（ステップＳ４８）。上述したように共有モードでは，複数のアプリケーション１０が１つのリーダ／ライタ２に対して同時にアクセスできるが，情報処理装置１の処理装置（ＣＰＵ１０１等）の負荷等を考慮して，１つのリーダ／ライタ２に対してアクセス可能なアプリケーション１０の数を，所定の最大アクセス数（例えば８つ）以下に制限している。従って，本ステップＳ４６では，デバイスドライバ４０は，リーダ／ライタ２（ＲＷｉ）に対して既にアクセスしているアプリケーション１０の数が，所定の最大アクセス数に達しているか否かを判定し，所定の最大アクセス数に達していると判定した場合には，ステップＳ５６に進み，リーダ／ライタ２（ＲＷｉ）のオープンを失敗とし，その旨をミドルウェア２０に通知する。これにより，上記オープン要求元のアプリケーション１０が更にアクセス可能となることで，上記最大アクセス数を超える数のアプリケーション１０が上記リーダ／ライタ２（ＲＷｉ）にアクセスしてしまうことを防止でき，処理装置の負荷増大を抑制できる。一方，上記リーダ／ライタ２（ＲＷｉ）アクセス可能なアプリケーション１０の数が，まだ所定の最大アクセス数に達していないと判定された場合には，ステップＳ５０に進む。
【０１３２】
その後，ステップＳ５０では，ミドルウェア２０は，上記オープン要求元のアプリケーション１０をリーダ／ライタ２（ＲＷｉ）に接続して，リーダ／ライタ２（ＲＷｉ）の動作確認を行い（ステップＳ５０），リーダ／ライタ２（ＲＷｉ）が正常に動作するか否かを判定する（ステップＳ５２）。この判定の結果，リーダ／ライタ２（ＲＷｉ）が正常に動作しないと判定された場合には，ステップＳ５６に進み，リーダ／ライタ２（ＲＷｉ）のオープンを失敗とし，その旨をミドルウェア２０に通知する。これにより，リーダ／ライタ２（ＲＷｉ）の動作エラーが生じる場合に，アプリケーション１０に対してリーダ／ライタ２（ＲＷｉ）をオープンしないようにできる。一方，リーダ／ライタ２（ＲＷｉ）が正常に動作すると判定された場合には，ステップＳ５４に進み，デバイスドライバ４０は，上記オープン要求元のアプリケーション１０に対するリーダ／ライタ２（ＲＷｉ）のオープンを成功とし，上記オープン要求元のアプリケーション１０がリーダ／ライタ２（ＲＷ１）を使用できるように上記各種の設定（通信情報テーブル４７の設定等）を行い，また，オープン成功の旨をミドルウェア２０に通知する（ステップＳ５４）。
【０１３３】
以上のように，デバイスドライバ４０は，ミドルウェア２０からのオープン実行要求に応じて，上記各種の判定条件（Ｓ４４，Ｓ４６，Ｓ４８，Ｓ５２）に基づいて，ミドルウェア２０から指定されたリーダ／ライタ２（ＲＷｉ）が，オープン要求元のアプリケーション１０によりアクセス可能な状態であるか否かを判定し，アクセス可能な状態であると判定すれば，当該リーダ／ライタ２（ＲＷｉ）をオープンすることができる。
【０１３４】
以上，図６〜図８を参照して，本実施形態にかかるアプリケーション調停方法におけるリーダ／ライタ２のオープン処理方法について詳述した。次に，図９〜図１２を参照して，本実施形態にかかるアプリケーション調停方法におけるコマンド処理方法について詳細に説明する。
【０１３５】
上記のように，共有モードに設定されているときには，デバイスドライバ４０のコマンド受付部４２は，複数のアプリケーション１０からの複数のコマンドを順次受け付けて，これらのコマンドを受け取った順に順次実行するようコマンド実行部４４に依頼する。より詳細には，共有モードにおいては，コマンド受付部４２は，あるアプリケーション１０からのコマンド実行要求をミドルウェア２０から受け付けると，コマンド実行部４４において，それ以前に実行要求を受けた他のアプリケーション１０からのコマンドを実行しているか否かを判定する。この判定の結果，いずれのコマンドも実行していないシグナル状態であれば，コマンド受付部４２は，上記受け付けたコマンドを即時実行するようコマンド実行部４４に依頼し，非シグナル状態とする。一方，別のコマンドを実行している非シグナル状態であれば，コマンド受付部４２は，上記受け付けたコマンドを実行待ち状態とし，上記別のコマンドの実行が終了しシグナル状態となった時点で，上記受け付けたコマンドを実行するようコマンド実行部４４に依頼する。
【０１３６】
ここで，このようなコマンド処理について，図９の具体例を参照して説明する。なお，図９Ａ〜Ｃは，本実施形態にかかる複数のアプリケーション１０からのコマンド処理方法の具体例を示す模式図である。
【０１３７】
図９Ａ〜Ｃでは，３つのアプリケーション１０Ａ，１０Ｂ，１０Ｃからデバイスドライバ４０に対して，（１）コマンドＡ→（２）コマンドＡ’→（３）コマンドＡ”→（４）コマンドＢ→（５）コマンドＢ’→（６）コマンドＢ”の順序で，６つのコマンドの実行要求が発生する例を示している。
【０１３８】
この場合，デバイスドライバ４０は，まず図９Ａに示すように，最初に受け取ったアプリケーション１０ＡからのコマンドＡを実行してリーダ／ライタ２を制御し，このコマンドＡの実行中は，他のアプリケーション１０Ｂ，１０Ｃからそれぞれ受け取ったコマンドＡ’とコマンドＡ”を実行待ち状態とする。なお，この時点では，コマンドＢ，コマンドＢ’，コマンドＢ”は未発生である。
【０１３９】
次いで，最初のコマンドＡの実行が終了すると，デバイスドライバ４０は，図９Ｂに示すように，２番目に受け取ったコマンドＡ’を実行してリーダ／ライタ２を制御し，このコマンドＡ’の実行中は，他のアプリケーション１０Ｃ，１０Ａからそれぞれ受け取ったコマンドＡ”とコマンドＢを実行待ち状態とする。なお，アプリケーション１０Ａは，デバイスドライバ４０からの上記コマンドＡの実行終了の通知に応じて，次のコマンドＢの実行をデバイスドライバ４０に要求するが，上記のように，デバイスドライバ４０は，このコマンドＢよりも先に受け取った他のアプリケーション１０Ｂ，１０ＣからのコマンドＡ’とコマンドＡ”の処理を優先する。
【０１４０】
その後，２番目のコマンドＡ’の実行が終了すると，デバイスドライバ４０は，図９Ｃに示すように，３番目に受け取ったコマンドＡ”を実行してリーダ／ライタ２を制御し，このコマンドＡ”の実行中は，他のアプリケーション１０Ａ，１０Ｂからそれぞれ受け取ったコマンドＢとコマンドＢ’を実行待ち状態とする。その後は，デバイスドライバ４０は，上記と同様にして，コマンドＢ，コマンドＢ’及びコマンドＢ”を受け取り順に順次実行する。
【０１４１】
次に，図９の例のコマンド処理シーケンスについて，図１０を参照してより詳細に説明する。なお，図１０は，本実施形態にかかる情報処理装置１におけるコマンド処理フローの具体例を示すシーケンス図である。
【０１４２】
図１０に示すように，まず，アプリケーション１０Ａからのオープン要求に応じて，ミドルウェア２０及びデバイスドライバ４０は，上述した図６〜図８の手順に従い，アプリケーション１０Ａに対してリーダ／ライタ２をオープンする（ステップＳ６０，Ｓ６１）。また同様にして，アプリケーション１０Ｂに対してリーダ／ライタ２がオープンされ（ステップＳ６２，Ｓ６３），アプリケーション１０Ｃに対してリーダ／ライタ２がオープンされる（ステップＳ６４，Ｓ６５）。これにより，アプリケーション１０Ａ，１０Ｂ，１０Ｃは，それぞれリーダ／ライタ２を使用可能な状態になり，リーダ／ライタ２を介してＩＣカード３との間でコマンド，レスポンスをやり取りできるようになる。
【０１４３】
次いで，最初にアプリケーション１０Ａがミドルウェア２０を介してデバイスドライバ４０にコマンドＡの実行要求を行うと（ステップＳ６６），デバイスドライバ４０は，このコマンドＡを即時実行して，リーダ／ライタ２を介してＩＣカード３にコマンドＡを送信し（ステップＳ６７），このコマンドＡに対する応答としてＩＣカード３からリーダ／ライタ２を介してレスポンスＡを受け取り，アプリケーション１０Ａに出力する（ステップＳ７０）。このコマンドＡの実行中（Ｓ６７〜Ｓ７０の間）に，アプリケーション１０Ｂがデバイスドライバ４０にコマンドＡ’の実行要求をし（ステップＳ６８），さらにアプリケーション１０Ｃがデバイスドライバ４０にコマンドＡ”の実行要求をしたとしても（ステップＳ６９），デバイスドライバ４０は，これらのコマンドＡ’及びコマンドＡ”を実行待ち状態として，アプリケーション１０Ｂ，１０Ｃを待機させる。そして，デバイスドライバ４０は，コマンドＡの実行が完了した（ステップＳ７０）後に，コマンドＡ’を実行してＩＣカード３に送信し（ステップＳ７１），これに応じてＩＣカード３からレスポンスＡ’を受け取る（ステップＳ７３）。さらに，このコマンドＡ’の実行が完了した（ステップＳ７３）後に，コマンドＡ”を実行して（ステップＳ７４），ＩＣカード３からレスポンスＡ”を受け取る（ステップＳ７６）。
【０１４４】
さらに，デバイスドライバ４０は，上記と同様にして，アプリケーション１０Ａ，１０Ｂ，１０Ｃから順次，実行要求されたコマンドＢ，Ｂ’，Ｂ”（ステップＳ７２，Ｓ７５，Ｓ７８）についても，先行するコマンドＡ”，Ｂ，Ｂ’の実行が完了（ステップＳ７６，Ｓ７９，Ｓ８１）するまで待機させ，当該完了後に上記コマンドＢ，Ｂ’，Ｂ”をそれぞれ実行する（ステップＳ７７，Ｓ８０，Ｓ８２）。そして，デバイスドライバ４０が最後に受け取ったコマンドＢ”に応じて受け取ったレスポンスＢ”（ステップＳ８３）をアプリケーション１０Ｃに出力すると，すべての処理が終了する。
【０１４５】
以上のように，本実施形態にかかるコマンド処理方法では，原則として，デバイスドライバ４０が各アプリケーション１０から受け取ったコマンドを受け取り順に順次処理する。これによって，複数のアプリケーション１０が１つのリーダ／ライタ２を同時に使用することができるようになり，マルチアプリケーション対応を好適に実行できる。
【０１４６】
ところが，ＩＣカード３に対して用いられるコマンドの中には，特定のコマンドを実行後に別のコマンドを実行すると，ＩＣカード３の状態が変わってしまうコマンドが存在する。このため，共有モードにおいて，あるアプリケーション１０がリーダ／ライタ２をオープンして，連続処理する必要がある一連の複数のコマンドを実行する途中で，他のアプリケーション１０からのコマンドが割り込みで実行されてしまうと，上記一連のコマンドの実行が失敗してしまい，アプリケーション１０にとって予期せぬ動作になる可能性がある。
【０１４７】
例えば，コマンドＡがアプリケーション１０ＡとＩＣカード３との間で相互認証するというコマンドである場合に，他のアプリケーション１０ＢからコマンドＡ’（例えば，ポーリングコマンドや，読み書きコマンド）が割り込まれると，コマンドＡ’の種類によっては，上記相互認証がなされていない状態に強制的に戻されてしまう場合がある。この場合，コマンドＢがコマンドＡでの相互認証済みを前提としたコマンドであると，当該コマンドＢが失敗してしまう。
【０１４８】
そこで，本実施形態では上述したように，ミドルウェア２０は，各アプリケーション１０に対して，リーダ／ライタ２へのアクセス権の付与／解除を要求できるようなＡＰＩ２２を提供し，さらに，デバイスドライバ４０は，アプリケーション１０からのアクセス権の付与／解除要求に応じて，リーダ／ライタ２に対するアクセス権を要求元のアプリケーション１０に付与／解除することができるようになっている。これにより，上記要求元のアプリケーション１０がアクセス権を取得してから開放するまでの間（即ち，クリティカルセクションの間）は，当該アプリケーション１０からのコマンド実行のみを許可し，他のアプリケーション１０からのコマンド実行を禁止することができるようになる。
【０１４９】
さらに，デバイスドライバ４０は，あるアプリケーション１０がアクセス権を取得している間に，他のアプリケーション１０からのコマンドを受け取ると，当該コマンドの受け取り時から所定のアクセス権待ちタイムアウト時間が経過するまでは，当該他のアプリケーション１０からのコマンドの処理を待機する。そして，上記アクセス権待ちタイムアウト時間が経過したときには，他のアプリケーション１０にタイムアウトエラーを通知するようになっている。
【０１５０】
ここで，図１１を参照して，上記アクセス権の付与／解除と，アクセス権待ちタイムアウトの具体例について説明する。なお，図１１は，本実施形態にかかるアプリケーション１０に対するアクセス権の付与／解除と，アクセス権待ちタイムアウトの具体例を示す模式図である。
【０１５１】
図１１の例では，３つのアプリケーション１０Ａ，１０Ｂ，１０Ｃからデバイスドライバ４０に対して，（１）アクセス権の取得コマンド→（２）コマンドＡ，（３）コマンドＡ’→（４）コマンドＢ→（５）コマンドＢ’→（６）コマンドＡ”→（７）コマンドＣ→（８）コマンドＤ→（９）コマンドＣ’→（１０）コマンドＢ”→（１１）アクセス権の解放コマンドの順序で，コマンド実行要求が発生する例を示している。また，アプリケーション１０Ａが実行要求するコマンドＡ，Ｂ，Ｃ，Ｄは，連続して処理する必要がある一連のコマンドであるとする。
【０１５２】
この場合，アプリケーション１０Ａは，最初のコマンドＡを実行要求する前に，デバイスドライバ４０に対してアクセス権の付与を要求するコマンド（アクセス権取得コマンド）を出力し，また，最後のコマンドＤの実行が完了した後に，デバイスドライバ４０に対してアクセス権の解除を要求するコマンド（アクセス権解放コマンド）を出力する。デバイスドライバ４０は，上記アクセス権の付与要求に応じて，アプリケーション１０Ａに対してアクセス権を付与し，また，上記アクセス権の解除要求に応じて，アプリケーション１０Ａに付与していたアクセス権を解除する。なお，デバイスドライバ４０は，アプリケーション１０Ａに対するアクセス権の付与を表す情報を保持しており，アクセス権が付与されていない他のアプリケーション１０Ｂ，１０Ｃと区別することができる。
【０１５３】
これにより，アプリケーション１０Ａがアクセス権を取得して解放するまでのクリティカルセクションの間は，他のアプリケーション１０Ｂ，１０Ｃからのコマンド実行を禁止して，アプリケーション１０Ａからの一連のコマンドＡ，Ｂ，Ｃ，Ｄを連続して実行させることができる。また，アクセス権が解除された後は，受け取り順にコマンドが実行される。この結果，図１１の例では，コマンドＡ→コマンドＢ→コマンドＣ→コマンドＤ→コマンドＡ’→コマンドＢ’→コマンドＡ”→コマンドＣ’→コマンドＢ”の順で，コマンドが実行されるようになる。
【０１５４】
また，図１１の例では，アプリケーション１０ＡからのコマンドＢの実行中に，アプリケーション１０ＢからのコマンドＡ’と，アプリケーション１０ＣからのコマンドＡ”とがアクセス権待ち状態となっている。この場合，デバイスドライバ４０は，コマンドＡ’とコマンドＡ”の実行要求を受け付けてからの経過時間を計時しており，コマンドＢの実行が完了する前に，当該経過時間が各アプリケーション１０Ｂ，１０Ｃから指定されたアクセス権待ちタイムアウト時間以上となれば，アプリケーション１０Ｂ，１０Ｃにアクセス権待ちタイムアウトエラーを通知する。これにより，アプリケーション１０Ｂ，１０Ｃの待機時間を制限し，１つのリーダ／ライタ２に処理が集中して負荷が増大しないようにできる。
【０１５５】
次に，図１２を参照して，上記アクセス権の付与／解除と，アクセス権待ちタイムアウトを行うコマンド処理方法について更に説明する。なお，図１２は，本実施形態にかかる情報処理装置１におけるアクセス権付与を伴うコマンド処理フローの具体例を示すシーケンス図である。
【０１５６】
図１２に示すように，まず，図１０と同様に各アプリケーション１０Ａ，１０Ｂ，１０Ｃに対してリーダ／ライタ２がオープンされる（ステップＳ１００〜Ｓ１０５）。
【０１５７】
次いで，アプリケーション１０Ａは，ミドルウェア２０を介してデバイスドライバ４０に対して，リーダ／ライタ２へのアクセス権の付与を要求して，アクセス権を取得する（ステップＳ１０６）。このアクセス権の付与により，デバイスドライバ４０は，他のアプリケーション１０Ｂ，１０Ｃからのコマンドを実行できなくなる。なお，このようなアクセス権の付与時や解除時には，ミドルウェア２０は，アクセス権の付与／解除のインタフェースとなるだけであり，アプリケーション１０からＡＰＩ２２を呼び出されると，アクセス権の付与／解除を要求するコマンドをデバイスドライバ４０に出力する。デバイスドライバ４０は，アプリケーション１０からアクセス権の付与／解除要求を受けると，アクセス権の付与／解除の可否を判断した上で，アクセス権の付与／解除を設定し，その結果をミドルウェア２０を介してアプリケーション１０に通知する。
【０１５８】
その後，アクセス権を取得したアプリケーション１０Ａが，ミドルウェア２０を介してデバイスドライバ４０に対して，一連のコマンドＡ，Ｂ，Ｃの実行要求を順次行うと（ステップＳ１０７，Ｓ１１１，Ｓ１１５），デバイスドライバ４０は，このコマンドＡ，Ｂ，Ｃを即時実行して，リーダ／ライタ２を介してＩＣカード３にコマンドＡ，Ｂ，Ｃを送信し（ステップＳ１０８，Ｓ１１２，Ｓ１１６），このコマンドＡに対する応答としてＩＣカード３からリーダ／ライタ２を介してレスポンスＡ，Ｂ，Ｃを受け取り，アプリケーション１０Ａに出力する（ステップＳ１１０，Ｓ１１４，Ｓ１１８）。
【０１５９】
そして，アプリケーション１０Ａは，一連のコマンドＡ，Ｂ，Ｃの全ての処理が完了した（ステップＳ１１８）後に，ミドルウェア２０を介してデバイスドライバ４０に対して，リーダ／ライタ２へのアクセス権の解除を要求して，アクセス権を解放する（ステップＳ１１９）。このアクセス権の解放により，デバイスドライバ４０は，他のアプリケーション１０Ｂ，１０Ｃからのコマンドを実行できるようになる。
【０１６０】
上記のような，アプリケーション１０がアクセス権を取得してから解放するまでのクリティカルセクションの間（ステップＳ１０６〜Ｓ１１９）は，他のアプリケーション１０Ｂがデバイスドライバ４０にコマンドＡ’，Ｃ’の実行要求をしたとしても（ステップＳ１０９，Ｓ１１７），アプリケーション１０Ａに独占的なアクセス権が付与されているため，デバイスドライバ４０は，このコマンドＡ’，Ｃ’の実行をアクセス権待ち状態として，アプリケーション１０Ｂを待機させる。
【０１６１】
このうち，先に実行要求されたコマンドＡ’については，当該コマンドＡ’の受け取り時点（ステップＳ１０９）から，アプリケーション１０Ｂに設定されたアクセス権待ちタイムアウト時間が経過した時点（ステップＳ１１３）で，未だ上記アクセス権が解放されていない。このため，デバイスドライバ４０は，当該コマンドＡ’に関してアクセス権待ちタイムアウトエラーをアプリケーション１０Ｂに通知する（ステップＳ１１３）。
【０１６２】
一方，後に実行要求されたコマンドＣ’については，当該コマンドＣ’の受け取り時点（ステップＳ１１７）から，アプリケーション１０Ｂに設定されたアクセス権待ちタイムアウト時間が経過する前に，上記アクセス権が解放されている（ステップＳ１１９）。このため，デバイスドライバ４０は，上記アクセス権の解放後に，当該コマンドＣ’を実行して，リーダ／ライタ２を介してＩＣカード３にコマンドＣ’を送信し（ステップＳ１２０），この応答としてＩＣカード３からリーダ／ライタ２を介してレスポンスＣ’を受け取り，アプリケーション１０Ｂに出力する（ステップＳ１２１）。
【０１６３】
また，上記アプリケーション１０Ａによるアクセス権の解放後には，別のアプリケーション１０Ｃが，リーダ／ライタ２へのアクセス権を取得することができる（ステップＳ１２２）。これにより，アプリケーション１０Ｃが当該アクセス権を取得してから解放するまでのクリティカルセクションの間（ステップＳ１２２〜Ｓ１２８）は，デバイスドライバ４０は，当該アクセス権を有するアプリケーション１０Ｃから受け付けたコマンドＤ”のみを実行し（ステップＳ１２５，Ｓ１２６），他のアプリケーション１０Ａから受け付けたコマンドＤは，アクセス権待ち状態として実行しない（ステップＳ１２３〜Ｓ１２７）。そして，デバイスドライバ４０は，このコマンドＤの受け取り時点（ステップＳ１２３）から，アプリケーション１０Ａに設定されたアクセス権待ちタイムアウト時間が経過した時点（ステップＳ１２７）で，当該コマンドＤに関するアクセス権待ちタイムアウトエラーをアプリケーション１０Ａに通知する（ステップＳ１２７）。
【０１６４】
以上のように，本実施形態にかかるコマンド処理では，各アプリケーション１０からの要求に応じて，リーダ／ライタ２に対する独占的なアクセス権を要求元のアプリケーション１０に付与する。これにより，他のアプリケーション１０からのコマンドの割り込みを禁止し，連続処理する必要がある一連のコマンドを，確実に連続処理して成功させることができる。従って，アプリケーション１０を安定的に動作させることができる。
【０１６５】
さらに，上記アクセス権待ちタイムアウトを設けることで，あるアプリケーション１０がアクセス権を取得しているときに，他のアプリケーション１０が待機する時間を所定時間以下に制限できる。このため，１つのリーダ／ライタ２に複数のアプリケーション１０からの処理の集中を防止し，情報処理装置１の負荷を抑制できる。また，アプリケーション１０は，アクセス権待ちタイムアウトエラーの通知を受けることで，同一のコマンドをリトライするか，情報処理装置１のモニタにその旨をエラー表示したりできる。
【０１６６】
以上，本実施形態にかかる情報処理装置１と，これを用いたＩＣカード３用の複数のアプリケーション１０間の調停方法について詳細に説明した。本実施形態によれば，ＩＣカード３用のミドルウェア２０，デバイスドライバ４０によって，マルチアプリケーション対応を好適に実現できる。このため，ＩＣカード３用のリーダ／ライタ２に接続可能な情報処理装置１において，ＩＣカード３用の複数のアプリケーション１０が同時に動作しても，さらには，情報処理装置１に複数のリーダ／ライタ２を接続して複数のアプリケーション１０が動作しても，問題なく動作できるようになる。
【０１６７】
即ち，デバイスドライバ４０によって，複数のアプリケーション１０からのコマンド実行要求を順次処理するので，複数のアプリケーション１０によって１つのリーダ／ライタ２を同時に使用することができ，複数のアプリケーション１０の機能を同時に実現できる。例えば，あるアプリケーション１０でＩＣカード３内の電子マネーの残高や購入履歴情報を表示している最中に，別のアプリケーション１０によりＩＣカード３内の交通乗車券の履歴情報を表示させることができる。
【０１６８】
また，情報処理装置１に複数のリーダ／ライタ２が接続されている場合でも，ミドルウェア２０により，各アプリケーション１０のアクセス先のリーダ／ライタ２を適切に振り分けることができる。このため，特定のリーダ／ライタ２に対する負荷集中を抑制できるとともに，同時に動作する複数のアプリケーション１０の処理効率も向上できる。
【０１６９】
また，ＩＣカード３を利用するためのソフトウェアを，アプリケーション１０，ミドルウェア２０，デバイスドライバ４０の３層構造とすることで，リーダ／ライタ２のコマンド仕様が変更されても，ミドルウェア２０，デバイスドライバ４０にてリーダ／ライタ２の差異を吸収することできるようになるため，過去に開発したアプリケーション１０をそのまま動作させることができる。
【０１７０】
また，ソフトウェアとしてＯＳ３２のみを搭載し，ＩＣカード用のアプリケーションを搭載していないＩＣカード３や，予め設定されたＩＣカード用コマンドを後から変更できないＩＣカード３にアクセスする場合であっても，情報処理装置１側でマルチアプリケーション対応を好適に実現することができる。
【０１７１】
以上，添付図面を参照しながら本発明の好適な実施形態について説明したが，本発明は係る例に限定されないことは言うまでもない。当業者であれば，特許請求の範囲に記載された範疇内において，各種の変更例または修正例に想到し得ることは明らかであり，それらについても当然に本発明の技術的範囲に属するものと了解される。
【０１７２】
例えば，上記実施形態では，情報処理装置１に複数のリーダ／ライタ２が接続されている例について説明したが，本発明はかかる例に限定されず，例えば，１つのリーダ／ライタ２のみが接続されてもよい。
【０１７３】
また，上記実施形態では，ＩＣカード３は非接触型ＩＣカードで構成され，リーダ／ライタ２は非接触方式でＩＣカードと通信するものを採用していたが，本発明はかかる例に限定されない。例えば，接触方式のＩＣカード（磁気カード等）と，接触方式で読み書きするリーダ／ライタ２を利用してもよい。また，上記ＩＣカード３の機能を有する情報処理装置を，携帯電話等の携帯端末や腕時計などの各種装置に内蔵したり，或いは，各種商品，販売促進用の人形等のグッズ，アクセサリ，チラシなどの物品に装着したりすることで，これらの装置や物品等をＩＣカード３として代用してもよい。これらの装置や物品も，本発明のＩＣカードに含まれるものとする。
【図面の簡単な説明】
【０１７４】
【図１】本発明の第１の実施形態にかかる情報処理装置がリーダ／ライタを介してＩＣカードに接続する状態を示す概略図である。
【図２】同実施形態にかかる情報処理装置のハードウェア構成例を示すブロック図である。
【図３】同実施形態にかかるリーダ／ライタ及びＩＣカードのハードウェア構成を示すブロック図である。
【図４】同実施形態にかかる情報処理装置及びＩＣカードのソフトウェア構成を示すブロック図である。
【図５】同実施形態にかかるミドルウェアとデバイスドライバの構成を示すブロック図である。
【図６】同実施形態にかかるミドルウェアがアプリケーションから指定されたリーダ／ライタをオープンする処理を示すフローチャートである。
【図７】同実施形態にかかるミドルウェアが複数のリーダ／ライタを順次走査してオープンする処理を示すフローチャートである。
【図８】同実施形態にかかるデバイスドライバが，ミドルウェアから要求されたリーダ／ライタをオープンする処理を示すフローチャートである。
【図９Ａ】同実施形態にかかる複数のアプリケーションからのコマンド処理方法の具体例を示す模式図である。
【図９Ｂ】同実施形態にかかる複数のアプリケーションからのコマンド処理方法の具体例を示す模式図である。
【図９Ｃ】同実施形態にかかる複数のアプリケーションからのコマンド処理方法の具体例を示す模式図である。
【図１０】同実施形態にかかる情報処理装置におけるコマンド処理フローの具体例を示すシーケンス図である。
【図１１】同実施形態にかかるアプリケーションに対するアクセス権の付与／解除と，アクセス権待ちタイムアウトの具体例を示す模式図である。
【図１２】同実施形態にかかる情報処理装置におけるアクセス権付与を伴うコマンド処理フローの具体例を示すシーケンス図である。
【符号の説明】
【０１７５】
１      情報処理装置
２      リーダ／ライタ
３      ＩＣカード
４      有線ケーブル
１０      アプリケーション
２０      ミドルウェア
２２      アプリケーションプログラミングインタフェース
２４      ミドルウェアコア部
２６      通信情報記憶部
２７      通信情報テーブル
２８      デバイス制御部
３０      オペレーションシステム
３２      オペレーションシステム
４０      デバイスドライバ
４２      コマンド受付部
４４      コマンド実行部
４５      レスポンス解析部
４６      通信情報記憶部
４７      通信情報テーブル
４８      バス制御部
１１１      接続ポート
３０８      メモリ
【図１】
0004407662.tif 000002
【図２】
0004407662.tif 000003
【図３】
0004407662.tif 000004
【図４】
0004407662.tif 000005
【図５】
0004407662.tif 000006
【図６】
0004407662.tif 000007
【図７】
0004407662.tif 000008
【図８】
0004407662.tif 000009
【図９Ａ】
0004407662.tif 000010
【図９Ｂ】
0004407662.tif 000011
【図９Ｃ】
0004407662.tif 000012
【図１０】
0004407662.tif 000013
【図１１】
0004407662.tif 000014
【図１２】
0004407662.tif 000015