(57)【要約】【課題】  ソフトウェアプロダクトが共通サービスのライセンス管理機能を使用するのを可能にするソフトウェアライセンス化アプリケーションプログラミングインタフェース（ＡＰＩ）を提供する。【解決手段】  ライセンスが、ソフトウェアプロダクトの権利を規定する。ソフトウェアプロダクトは、権利を消費するために、ＡＰＩの消費メソッドを呼び出す。権利が存在する場合、サービスは、権利が見つけられるライセンスに権利をバインドする。ソフトウェアプロダクトは、権利の有効インスタンスが見つけられるかに応じて、いくつかまたはすべてのフィーチャへのアクセスを許可、または否定することによって、ライセンスの条項を施行する。任意のデータを権利に関連付けることができる。ＡＰＩは、消費メソッドによって以前にバインドされている権利からデータを取り出すメソッドを包含する。【選択図】  図３
2005129049.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプログラムのライセンスの施行を支援するシステムであって、
前記ライセンスが記憶されるライセンスストアを維持するライセンス化コンポーネントを備え、前記ライセンスは、ソフトウェアの権利、および前記権利に関連付けられる１組のデータを含み、前記ライセンス化コンポーネントは、呼出し可能インタフェースを前記コンピュータプログラムに公開し、前記呼出し可能インタフェースは、
前記コンピュータプログラムから前記権利の識別子を受け取り、前記権利を行使することができるかについて判定する権利消費メソッドと、
前記コンピュータプログラムから前記権利の識別子を受け取り、前記１組のデータ、または前記１組のデータに基づく情報を前記コンピュータプログラムに提供する情報取出しメソッドとを備える
ことを特徴とするシステム。
【請求項２】
前記ライセンス化コンポーネントは、複数のコンピュータプログラムによって使用可能であり、前記コンピュータプログラムは、前記複数のコンピュータプログラムの中に包含され、前記呼出し可能インタフェースは、
ハンドルを前記コンピュータプログラムに提供するハンドルオープンメソッドをさらに備え、
前記権利消費メソッドは、前記コンピュータプログラムから前記ハンドルを受け取り、前記ハンドルを使用して、前記権利消費メソッドに対するコールが取り出されるものである前記コンピュータプログラムを識別する
ことを特徴とする請求項１に記載のシステム。
【請求項３】
前記ライセンスは、前記ライセンスストアに記憶される複数のライセンスの１つであり、前記権利消費メソッドにより、前記ライセンス化コンポーネントが、
前記ライセンスストアが前記コンピュータプログラムに関連付けられるかどうかと、
どのライセンスが、前記コンピュータプログラムに関連付けられる複数のライセンスの中から選択されるかを判定する競合規則と
を備えた１つまたは複数のファクタに基づいて、前記ライセンスを選択する
ことを特徴とする請求項１に記載のシステム。
【請求項４】
前記呼出し可能インタフェースは、
非同期処理のコンテキストを確立し、かつ前記コンテキストの識別子を前記コンピュータプログラムに提供する非同期コンテキストイニシエータメソッドをさらに備え、
前記権利消費メソッドは、前記コンピュータプログラムから前記コンテキストの前記識別子を取り出し、前記コンテキストの前記識別子に応答して、権利消費要求を非同期的に処理する
ことを特徴とする請求項１に記載のシステム。
【請求項５】
前記権利消費メソッドは、前記権利が前記ライセンスにおいて識別されるかに基づいて、前記権利を行使することができるかについて判定する
ことを特徴とする請求項１に記載のシステム。
【請求項６】
前記コンピュータプログラムおよび前記ライセンス化コンポーネントが、マシン上で実行され、前記権利消費メソッドは、前記ライセンスが前記マシンにバインドされるかに基づいて、前記権利を行使することができるかについて判定する
ことを特徴とする請求項１に記載のシステム。
【請求項７】
前記コンピュータプログラムは、プロダクト識別子に関連付けられ、前記権利消費メソッドは、前記ライセンスが、前記マシン、または前記マシンがメンバであるマシンのクラスにバインドされるかに基づいて、前記権利を行使することができるかについて判定する
ことを特徴とする請求項１に記載のシステム。
【請求項８】
ライセンスに関連付けられるコンピュータプログラムの使用を制約する方法であって、前記ライセンスは、前記コンピュータプログラムの権利を規定し、前記方法は、
ライセンス化サービスを、前記ライセンス化サービスのインタフェースの第１のメソッドに対する第１のコールを作成することによって呼び出し、前記第１のコールが、前記権利に関連付けられる識別子によってパラメータ化されるステップと、
前記第１のコールに応答して、前記権利が行使可能であるかの指示を受け取るステップと、
前記指示に従って、第１のふるまいまたは第２のふるまいに従事するステップと
を備えることを特徴とする方法。
【請求項９】
前記第１のふるまいは、前記コンピュータプログラムが実行されることを可能にすることを備え、前記第２のふるまいは、前記コンピュータプログラムの実行を中止することを備える
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記第１のふるまいは、前記コンピュータプログラムが、第１の組の関数を実施することを可能にすることを備え、前記第２のふるまいは、前記第１の組の関数と同一ではない第２の組の関数を実施することを可能にすることを備えることを特徴とする請求項８に記載の方法。
【請求項１１】
前記権利は、１組のデータに関連付けられ、前記方法は、
前記インタフェースの第２のメソッドに対し、第２のコールを作成し、前記第２のメソッドが、前記権利の指示によってパラメータ化されるステップと、
前記第２のコールに応答して、前記１組のデータを受け取るステップと
をさらに備えることを特徴とする請求項８に記載の方法。
【請求項１２】
前記１組のデータに基づいて、前記コンピュータプログラムの動作を指図するステップ
をさらに備えることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記インタフェースの第２のメソッドに対し、第２のコールを作成するステップと、
前記第２のコールに応答して、ハンドルを受け取るステップとをさらに備え、
前記第２のコールが、前記第１のコールの前に作成され、前記第１のコールが、前記ハンドルによってさらにパラメータ化される
ことを特徴とする請求項８に記載の方法。
【請求項１４】
前記インタフェースの第２のメソッドに対し、第２のコールを作成するステップと、
前記第２のコールに応答して、非同期コンテキストを受け取るステップとをさらに備え、
前記第２のコールが、前記第１のコールの前に作成され、前記第１のコールが、前記非同期コンテキストによってさらにパラメータ化され、前記コンピュータプログラムが、前記第１のコールが非同期的に扱われている間に、少なくとも１つのアクションを実施する
ことを特徴とする請求項８に記載の方法。
【請求項１５】
前記第１のメソッドは、
前記ライセンスが、前記コンピュータプログラムが実行されているマシンまたは環境にバインドされるかどうかと、
前記ライセンスまたは権利が、前記コンピュータプログラムに関連付けられたプロダクト識別子にバインドされるかどうかと、
前記ライセンスまたは権利が満了したかどうかと、
前記権利が、前記ライセンスにおいて規定された権利の回数を超えて消費されたかどうかを含む１つまたは複数のファクタに基づいて、前記権利が行使可能であるかについて判定する
ことを特徴とする請求項８に記載の方法。
【請求項１６】
コンピュータプログラムに対するライセンスの施行を可能にする方法を実施するコンピュータ実行可能命令を上に符号化させたコンピュータ読み取り可能な記録媒体であって、前記方法は、
前記コンピュータプログラムから、前記コンピュータプログラムの権利を識別する第１のメソッドのコールを受け取るステップと、
前記権利が、前記ライセンスに包含され、かつ行使可能であることを判定するステップと、
前記権利が行使可能であるという指示を前記コンピュータプログラムに戻すステップと
を備えることを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記指示は、前記権利を前記ライセンスにバインドすることを備えることを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記判定するステップは、前記権利が前記ライセンスにおいて規定されているかに基づくことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記判定するステップは、前記ライセンスが、前記コンピュータプログラムが実行されているマシンにバインドされるかに基づくことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記判定するステップは、前記ライセンスまたは権利が、前記コンピュータプログラムにバインドされるかに基づくことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
前記判定するステップは、前記ライセンスまたは権利が満了していないかに基づくことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２２】
前記判定ふるまいは、前記ライセンスが限界を超える回数消費されているかに基づくことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２３】
前記方法は、
前記コンピュータプログラムから第２のメソッドのコールを受け取るステップと、
前記第２のメソッドのコールに応答して、前記コンピュータプログラムを識別するハンドルを前記コンピュータプログラムに戻すステップとをさらに備え、
前記第１のメソッドのコールが、前記第２のメソッドのコールの後で実施され、前記第１のメソッドのコールが、前記ハンドルをさらに識別することを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２４】
前記方法は、
第２のメソッドのコールを前記コンピュータプログラムから受け取るステップと、
前記第２のメソッドに応答して、非同期コンテキストを前記コンピュータプログラムに戻し、前記第１のメソッドのコールが、前記第２のメソッドのコールの後で実行され、かつ前記非同期コンテキストを識別するステップと、
前記コンピュータプログラムがアクションを実施する間、前記第１のメソッドのコールを非同期的に実行するステップとをさらに備える
ことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【請求項２５】
前記権利が、１組のデータと関連付けられ、前記方法は、
前記権利を示す第２のメソッドのコールを受け取るステップと、
前記第２のメソッドのコールに応答して、前記１組のデータを前記コンピュータプログラムに提供するステップとをさらに備える
ことを特徴とする請求項１６に記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムのライセンスの施行を支援するシステムに関する。より具体的には、一般に、コンピュータソフトウェアの分野に関し、電子ライセンスの施行を支援するプログラミングインタフェースに関連した、コンピュータプログラムのライセンスの施行を支援するシステム、ライセンスに関連付けられるコンピュータプログラムの使用を制約する方法、及び記録媒体に関する。
【背景技術】
【０００２】
商用生産されたソフトウェアは、従来、ソフトウェア使用の許容条項を確定するライセンスの下で利用可能とされた。ソフトウェアライセンス化の実施が最初に開始されたとき、ライセンスは、一般に、ソフトウェアに関するユーザの権利を確定する法律文書の形態を取った。そのような文書は、法的施行システムに依拠した。それ以来、ライセンスを電子的に施行することが所望されている。すなわち、コンピュータプログラムが、ライセンスとは対照的な方式で、ソフトウェアの使用を能動的に阻止する、または防止するコードを包含することが望ましい。
【０００３】
電子ライセンスの施行に備えるほとんどのソフトウェアは、ソフトウェアのライセンス化およびライセンスの使用を管理するために、それ自体のインフラストラクチャを提供する。したがって、通常の市販ソフトウェアプロダクトは、プロダクトの中核機能を実施するためのコードを含むことが可能であるだけでなく、そのコードと共に、ソフトウェアのライセンスを獲得、評価、および管理するためのコードをも所持することが可能である。各ソフトウェアベンダが、このインフラストラクチャを開発して、ソフトウェアに組み込むのは、しばしば、無駄な努力の重複である。したがって、ソフトウェアのライセンス化（licensing）に関する基本的な機能を実施するシステムを提供することが望ましい。この場合、広範なソフトウェア応用分野によって、一様かつ確定された方式で、システムを使用することができる。
【０００４】
いくつかの文献に上述のような従来の技術に関連した技術内容が開示されている（例えば、特許文献１、２参照）。
【０００５】
【特許文献１】米国特許第５，５３９，７４１号明細書
【特許文献２】米国特許第６，１００，８８２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
以上を考慮すると、従来の技術の欠点を克服する機構が必要である。
【０００７】
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、ライセンス化のためのプログラミングインタフェースを有する、コンピュータプログラムのライセンスの施行を支援するシステムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、ソフトウェアプロダクトによって使用されるあるライセンス化機能を提供するソフトウェアライセンス化アプリケーションプログラミングインタフェース（ＡＰＩ）を提供する。ライセンスサービスが、ライセンスの使用に関する機能を実施し、ＡＰＩによりこれらの機能をソフトウェアプロダクトに公開する。サービスは、ライセンスを獲得する、ライセンスを格納ならびに管理する、ライセンスを改竄から保護する、ライセンスの妥当性を評価する、および、ライセンスが、ライセンスが使用されるマシンならびに／もしくはソフトウェアプロダクトに適切にバインド（bind）されているかを評価する、などの機能を実施する。ソフトウェアは、ＡＰＩのメソッド（method）を呼び出すことによって、この機能を利用することができる。
【０００９】
ＡＰＩの通常の使用では、アプリケーションを識別するためにライセンスサービスによって使用される固有のハンドルを得るために、ソフトウェアプロダクトが、「オープン」ＡＰＩメソッドを呼び出す。次いで、ソフトウェアプロダクトは、「consume-right」ＡＰＩメソッドを呼び出す。「consume（消費する）」は、この文脈では、規定された権利の行使を意味する。「consume-right」メソッドの呼出しは、ソフトウェアプロダクトのハンドルおよび消費される権利の名称によってパラメータ化される。次いで、ライセンスサービスは、名称付き権利を包含する１つまたは複数の有効で適切にバインドされたライセンスを特定することを試行する。そのようなライセンスが存在しない場合、ソフトウェアプロダクトは、失敗（failure）を通知される。そのようなライセンスが存在する場合、権利は、ライセンスの１つにバインドされ、呼出しソフトウェアプロダクトは、バインディング（binding）を通知される。そのような場合、ソフトウェアプロダクトは、権利が存在することを認識しており、この権利に関連する機能であればどんなものでも実施することができる。
【００１０】
好適実施形態では、ライセンスサービスは、ソフトウェアが権利下で実施することができる、もしくはできないことを確定せず、または、ソフトウェアの使用に対する実質的な制約を強制しない。むしろ、ライセンスサービスは、権利が存在する、またはしないに関係なく、ソフトウェアプロダクトがＡＰＩを呼び出すことによって判定することができるような方式で、ライセンスを管理し、それにより、ソフトウェアは、相応してふるまうことができる。たとえば、権利は、ユーザがソフトウェアプロダクトを実行する権利を有することを示す「run」を呼び出される可能性がある。ソフトウェアプロダクトは、ＡＰＩを使用して、ソフトウェアを実行する有効な（および適切にバインドされ、かつ満了していない）権利が存在するかについて判定することができる。しかし、ＡＰＩコールが、ソフトウェアを実行する権利が存在しないという指示で戻る場合、この権利が存在しないということに基づいて、動作を停止する、またはある他のアクションを取るのは、ソフトウェアの役割である。
【００１１】
権利が、「consume-right」メソッドの呼出しに成功した後に利用可能になる情報に関連する可能性がある。たとえば、所与のソフトウェアプロダクトが、編集、印刷、保存などがいつ許容されるかに関する個々の規則を有する可能性があり、これらの規則は、権利を包含するライセンスに格納することができる。ＡＰＩは、この情報をライセンスから取り出すことを可能にする「get-information」メソッドを提供する。
【００１２】
本発明の他の特徴については、以下で記述する。
【００１３】
以上の概述、ならびに好適実施形態の以下の詳細な記述は、添付の図面と関連して読まれるとき、より良好に理解される。本発明を示すために、図面では、本発明の例示的な構築が示される。しかし、本発明は、開示される特定の方法および手段に限定されるものではない。
【発明の効果】
【００１４】
本発明によれば、ライセンス化のためのプログラミングインタフェースを提供できる。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。
【００１６】
概観 
市販ソフトウェアの使用は、通常、ライセンスによって管理され、このライセンスが、ソフトウェア自体によって施行することができる電子形態で埋め込まれることが、ますます一般的になっている。電子ライセンス化システムを創出する１つの課題は、ライセンスの使用を管理するために、インフラストラクチャが必要とされることである。このインフラストラクチャを各ソフトウェアプロダクトについて複製することは、厄介で無駄である。本発明は、異なるソフトウェアプロダクトが、様々なライセンス化機能を実施する共通インフラストラクチャを使用するのを可能にするＡＰＩを提供する。
【００１７】
例示的なコンピューティング構成
図１は、本発明の態様を実施することが可能である例示的なコンピューティング環境を示す。計算システム環境１００は、適切なコンピューティング環境の単なる一例であり、本発明の使用または機能の範囲に関する限定を示唆することを意図しない。また、コンピューティング環境１００は、例示的な動作環境１００に示される構成要素のいずれか１つまたは組合せに関するあらゆる依存性または用件として解釈されるべきではない。
【００１８】
本発明は、多くの他の汎用または専用のコンピューティングシステム環境または構成で動作する。本発明との使用に適している可能性がある周知のコンピューティングシステム、環境、および／または構成の例は、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラム可能家庭用電化製品、ネットワークＰＣ（personal computer）、ミニコンピュータ、メインフレームコンピュータ、組み込み式システム、上記のシステムまたは装置のいずれかを含む分散型コンピューティング環境などを含むが、これに限定されるものではない。
【００１９】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な状況において記述することが可能である。一般に、プログラムモジュールは、特定のタスクを実施する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。本発明は、分散型コンピューティング環境において実施することも可能であり、この場合、タスクは、通信ネットワークまたは他のデータ伝送媒体を経て連結されるリモート処理装置によって実施される。分散型コンピューティング環境では、プログラムモジュールおよび他のデータは、メモリ記憶装置を含むローカルなコンピュータ記憶媒体およびリモートコンピュータ記憶媒体の両方に位置することが可能である。
【００２０】
図１を参照すると、本発明を実施する例示的なシステムは、コンピュータ１１０の形態にある汎用計算装置を含む。コンピュータ１１０の構成要素は、プロセッサ１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステム構成要素をプロセッサ１２０に結合するシステムバス１２１を含む。プロセッサ１２０は、マルチスレッドプロセッサ上において支援されるものなど、複数の論理プロセッサを表す可能性がある。システムバス１２１は、メモリバスまたはメモリ制御装置、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のいずれかとすることが可能である。例として、そのようなアーキテクチャは、業界標準アーキテクチャ（ＩＳＡ）バス、ＭＣＡ（Ｍｉｃｒｏ−Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バスＥＩＳＡ（Ｅｘｔｅｎｄｅｄ  ＩＳＡ）、ＩＤＥ（Ｉｎｔｅｌｌｉｇｅｎｔ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）バス、ＶＥＳＡ（Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス（メザニンバスとしても既知）を含むが、これに限定されるものではない。システムバス１２１は、通信装置内において、ポイントツーポイント接続、スイッチングファブリックなどとして実施することも可能である。
【００２１】
コンピュータ１１０は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスすることができるあらゆる利用可能な媒体とすることができ、揮発性媒体および不揮発性媒体でリムーバブル媒体およびノンリムーバブル媒体の両方を含む。例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことが可能であるが、これに限定されるものではない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報を記憶するあらゆる方法または技術において実施される揮発性および不揮発性でリムーバブルおよびノンリムーバブルな媒体の両方を含む。コンピュータ記憶媒体は、ＲＡＭ（read-only memory）、ＲＯＭ（random access memory）、ＥＥＰＲＯＭ（electrically erasable programmable read-only memory）、フラッシュメモリもしくは他のメモリ技術、ＣＤ（compact disc）ＲＯＭ、ＤＶＤ（Digital Versatile Disc）もしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、あるいは、所望の情報を記憶するために使用することができ、かつコンピュータ１１０によってアクセスすることができるあらゆる他の媒体を含むが、これに限定されるものではない。通信媒体は、通常、搬送波または他のトランスポート機構などの変調データ信号において、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実現し、かつ任意の情報配信媒体を含む。「変調データ信号」という用語は、特性セットの１つもしくは複数を有する信号、または情報を信号に符号化するような方式で変更された信号を意味する。例として、通信媒体は、有線ネットワークまたは直接配線接続などの有線媒体、および音響、ＲＦ（radio frequency）、赤外線などの無線媒体、ならびに他の無線媒体を含むが、これに限定されるものではない。上記のいずれかの組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００２２】
システムメモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２など、揮発性メモリおよび／または不揮発性メモリの形態にあるコンピュータ記憶媒体を含む。スタートアップ中などにコンピュータ１１０内の要素間において情報を転送するのを補助する基本的なルーチンを含むＢＩＯＳ（Basic Input/Output System）１３３が、通常、ＲＯＭ１３１に記憶されている。ＲＡＭ１３２は、通常、プロセッサ１２０によって即座にアクセス可能である、および／または目下動作されているデータおよび／またはプログラムモジュールを含む。例として、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示すが、これに限定されるものではない。
【００２３】
コンピュータ１１０は、他のリムーバブル／ノンリムーバブルで揮発性／不揮発性のコンピュータ記憶媒体をも含むことが可能である。例としてのみ、図１は、ノンリムーバブル不揮発性磁気媒体から読み取る、またはそれに書き込むハードディスクドライブ１４０、リムーバブル不揮発性磁気ディスク１５２から読み取る、またはそれに書き込む磁気ディスクドライブ１５１、ＣＤ  ＲＯＭもしくは他の光学媒体などのリムーバブル不揮発性光ディスク１５６から読み取る、またはそれに書き込む光ディスクドライブ１５５を示す。例示的なオペレーティング環境において使用することができる他のリムーバブル／ノンリムーバブルで揮発性／不揮発性のコンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、これに限定されるものではない。ハードディスクドライブ１４１は、通常、インタフェース１４０などのノンリムーバブルメモリインタフェースを経てシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インタフェース１５０などのリムーバブルメモリインタフェースによってシステムバス１２１に接続される。
【００２４】
上記で解説され、かつ図１に示されたドライブおよび関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの記憶装置をコンピュータ１１０に提供する。図１では、たとえば、ハードディスクドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するように示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じ、または異なるとすることができることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７は、少なくともそれらが異なるコピーであることを示すために、ここでは異なる番号が与えられている。ユーザが、キーボード１６２、および一般にマウス、トラックボール、またはタッチパッドと呼ばれるポインティングデバイス１６１などの入力装置により、コマンドおよび情報を入力することが可能である。他の入力装置（図示せず）は、マイクロフォンフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどを含むことが可能である。これらおよび他の入力装置は、しばしば、システムバスに結合されるユーザ入力インタフェース１６０を経て、プロセッサ１２０に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースおよびバス構造によって接続することも可能である。モニタ１９１または他のタイプの表示装置も、ビデオインタフェース１９０などのインタフェースを介して、システムバス１２１に接続される。モニタの他に、コンピュータは、出力周辺インタフェース１９５を経て接続することが可能である、スピーカ１９７およびプリンタ１９６などの他の周辺出力装置をも含むことが可能である。
【００２５】
コンピュータ１１０は、リモートコンピュータ１８０など、１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク環境において動作することが可能である。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の共通ネットワークノードとすることが可能であり、通常、コンピュータ１１０に関して上記で記述した要素の多くまたはすべてを含むが、図１では、メモリ記憶装置１８１のみが示されていた。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むことも可能である。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００２６】
ＬＡＮネットワーキング環境において使用されるとき、コンピュータ１１０は、ネットワークインタフェースまたはアダプタ１７０を経てＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境において使用されるとき、コンピュータ１１０は、通常、インターネットなどのＷＡＮ１７３上で通信を確立するために、モデム１７２または他の手段を含む。モデム１７２は、内蔵または外付けとすることが可能であり、ユーザ入力インタフェース１６０または他の適切な機能を介して、システムバス１２１に接続することが可能である。ネットワーク環境では、コンピュータ１１０に関して示したプログラムモジュール、またはその一部は、リモートメモリ記憶装置に記憶することが可能である。例として、図１は、メモリ装置１８１上に存在するリモートアプリケーションプログラム１８５を示すが、これに限定されるものではない。図示したネットワーク接続は例示であり、かつコンピュータ間の通信リンクを確立する他の手段を使用することが可能であることが理解されるであろう。
【００２７】
ソフトウェアライセンス化サービス 
図２は、ソフトウェアライセンス化サービス２０２を提供する例示的なシステムを示す。ソフトウェアライセンス化サービス２０２は、コンピュータ１１０（図１に示す）の内部において動作する。一例では、ソフトウェアライセンス化サービス２０２は、コンピュータ１１０上で実行されるオペレーティングシステムの一部である。ソフトウェアライセンス化サービスは、ソフトウェアのライセンスファイルが記憶されるライセンスストア２０４を維持する。ライセンスファイルは、たとえば、ソフトウェアに対する権利を規定し、かつそれらの権利の行使する様々なタイプの条件をも規定することが可能であるＸｒＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｒｉｇｈｔｓ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルとすることが可能である。ソフトウェア２０４は、トラストストア２０６をも維持する。トラストストア２０６は、耐改竄方式で認証不可能動的データを記憶する。トラストストア２０６は、ライセンス確認プロセスにおいて使用されるデータを記憶する。たとえば、あるライセンスは、満了日を有する可能性があり、時計のロールバックのために満了日が迂回されることを防止するために、時計が常に先に進むことを保証するように、現行時間（および経過時間）をトラストストア２０６に周期的に記憶することが可能である。
【００２８】
ソフトウェアライセンス化サービス２０２は、ライセンスストア２０４およびトラストストア２０６を管理し、また、ソフトウェアのライセンス化に関する様々な機能を実施する。たとえば、ソフトウェアライセンス化サービス２０２は、ライセンスファイルをパースする（parse）モジュール、特定のマシンおよび／またはソフトウェアプロダクトの特定の事例にライセンスをバインドするのを施行するモジュール、ならびにセキュアタイマ／カウンタ（上記で記述された方式でトラストストア２０６を使用する）を包含することが可能である。
【００２９】
ソフトウェアライセンス化サービス２０２は、アプリケーションソフトウェア（アプリケーション１３５など）がソフトウェアライセンス化サービス２０２を使用するのを可能にするアプリケーションプログラミングインタフェース（ＡＰＩ）２０８を公開する。アプリケーション１３５は、ＡＰＩ２０８のメソッドに対するＬＰＣ（local procedure call）を作成することによって、ソフトウェアライセンス化サービスＡＰＩ２０８のフィーチャを呼び出すことが可能である。ソフトウェアライセンス化サービス２０２によって公開することが可能であるＡＰＩのメソッドの例示的なセットについて、以下で記述する。
【００３０】
ＡＰＩ２０８がアプリケーションによって使用される方式について、図３を参照して記述する。まず、アプリケーションは、ＡＰＩコールを作成する（３０２）。次いで、サービス２０２は、ＡＰＩコールを処理し（３０４）、ＡＰＩコールの結果をアプリケーションに戻す（３０６）。たとえば、ＡＰＩコールは、ライセンスにおいて許可された権利を行使（「consume（消費）」）する、またはライセンスから情報を取り出すことを要求することが可能である。次いで、アプリケーションは、ＡＰＩコールの結果を受け取り、その結果に基づいて、アプリケーションのふるまいがどうあるべきであるかを判定する（３０８）。すなわち、ソフトウェアライセンス化サービス２０２は、好適実施形態では、ライセンスを直接施行せず、ライセンスを管理し、かつ使用することができるインフラストラクチャを提供する。たとえば、アプリケーションが、権利を消費するためにＡＰＩコールを作成し、サービス２０２が、この権利を許可する有効なライセンスが存在しないと判定する場合、サービス２０２は、好適実施形態では、アプリケーションが実行されるのを阻止せず、代わりに、この権利が利用可能ではないことをアプリケーションに通知する。したがって、アプリケーションは、それ自体の機構を使用して、権利の利用不性能に応答して何を実施するかを判定することができる。ＡＰＩのこの側面は、サービス２０２によって提供されるライセンス化インフラストラクチャをどのように使用すべきであるかを決定する適応性をソフトウェアベンダに提供する。他の実施態様では、アプリケーションは、ライセンス化サービス機能にバインドすることができる。
【００３１】
ソフトウェアライセンス化ＡＰＩの例 
以下は、ソフトウェアライセンス化サービスによって公開することが可能である例示的な１組のＡＰＩのメソッドである。
【００３２】
ＳＬＯｐｅｎ 
ＳＬＯｐｅｎ関数（function）は、すべてのその後のＳＬ  ＡＰＩコールについて使用されなければならないＳＬクライアントコンテキストハンドルをオープンする。（例示的なＡＰＩの記述を通して、「ＳＬ」は、ソフトウェアライセンス化サービスを指す。したがって、ＳＬクライアントコンテキストハンドルは、ソフトウェアライセンス化サービスと通信するクライアントによって使用されるハンドルである。）
【００３３】
【数１】
2005129049.tif 000003
【００３４】
パラメータ  
ｐｇｕｉｄＡｐｐ  
「入力」アプリケーションを一意に識別するアプリケーションＧＵＩＤに対するポインタ。この引数がＮＵＬＬである場合、Ｅ＿ＩＮＶＡＬＩＤＡＲＧエラーが戻される。  
ｐｈＳＬＣ  
「出力」ＳＬクライアントコンテキストハンドル、または、失敗である場合、ＩＮＶＡＬＩＤ＿ＨＡＮＤＬＥ＿ＶＡＬＵＥ。
【００３５】
注釈  
ＳＬＯｐｅｎによって戻されたコンテキストハンドルをクローズするために、ＳＬＣｌｏｓｅ関数を使用する。
【００３６】
アプリケーションＧＵＩＤ：アプリケーションの固有ＩＤ。Ｍｉｃｒｏｓｏｆｔ（登録商標） ＯＦＦＩＣＥ（商標）アプリケーションスイートのＷＩＮＤＯＷＳ（登録商標）バージョンでは、ＷｉｎＷｏｒｄ（商標）は、Ｅｘｃｅｌ（商標）のアプリケーションＧＵＩＤとは異なるアプリケーションＧＵＩＤを有する。たとえば、ウィンドウズ（登録商標）自体は、アプリケーションであるが、多くのプログラムの複合体である。
【００３７】
オフィス(商標)の場合、ユーザが、オフィス（商標）スイート（Ｏｆｆｉｃｅ  Ｓｕｉｔｅ）およびＷｉｎＷｏｒｄ（商標）のスタンドアロンプロダクトの両方をマシンにインストールすることができる。ＳＬの観点から、両プロダクトのＷｉｎＷｏｒｄ（商標）は、同じアプリケーションＧＵＩＤを有する。ＷｉｎＷｏｒｄ（商標）のアプリケーションＧＵＩＤは、２つのプロダクトＧＵＩＤに関連する。すなわち、ＷｉｎＷｏｒｄ（商標）は、オフィス（商標）スイートのプロダクトライセンスまたはＷｉｎＷｏｒｄ（商標）のプロダクトライセンスの両方を使用することができる。
【００３８】
ＳＬＯｐｅｎが成功したとき：  
ＲＰＣ（remote procedure call）バインディングが確立されている。  
コンテキストメモリが、ＳＬサービス上に創出される。コンテキストは、クライアントのコーラー（caller）のステータス情報を維持するために使用される。  
ＳＬＣ（ＳＬクライアントコンテキスト）ハンドルは、ファイルハンドルと同様である。プロセスが、複数のＳＬコンテキストハンドルをオープンすることができるが、ハンドルは、コーラーのプロセス内において有効である。
【００３９】
リターン  
成功または失敗。
【００４０】
ＳＬＣｌｏｓｅ 
ＳＬＣｌｏｓｅ関数は、オープンされたＳＬクライアントコンテキストハンドルをクローズする。コンテキストのあらゆる情報が、自動的に解放される。
【００４１】
【数２】
2005129049.tif 000004
【００４２】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。
【００４３】
注釈  
ＳＬＣｌｏｓｅが実施されるとき、ＲＰＣバインディングが解放され、コンテキストは破壊される。
【００４４】
リターン  
成功または失敗。
【００４５】
ＳＬＩｎｓｔａｌｌ 
ＳＬＩｎｓｔａｌｌ関数は、アプリケーションのライセンスをインストールし、アプリケーションの情報を登録する。
【００４６】
【数３】
2005129049.tif 000005
【００４７】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。
【００４８】
ｐＡｐｐＰｒｄＫｅｙ  
「入力」アプリケーションプロダクトキー構造。プロダクトキーは、ＭＳ（マイクロソフト）プロダクトキーフォーマットまたはアプリケーションのプロダクトキーフォーマットとすることができる。
【００４９】
【数４】
2005129049.tif 000006
【００５０】
ｅＰｒｏｄＫｅｙＴｙｐｅは、以下の値の１つとすることができる。  
ＳＬ＿ＰＲＯＤＫＥＹ＿ＣＵＳＴＯＭ  
ＳＬ＿ＰＲＯＤＫＥＹ＿ＭＳ２００２  
ＳＬ＿ＰＲＯＤＫＥＹ＿ＭＳ２００３
プロダクトキーのタイプが、ＭＳプロダクトキーではない場合（すなわち、ｅＰｒｏｄＫｅｙＴｙｐｅ＝＝ＳＬ＿ＰＲＯＤＫＥＹ＿ＣＵＳＴＯＭ）、コーラーは、カスタムプロダクトキー情報を埋めなければならない。プロダクトがＭＳプロダクトキーを使用する場合、ＣｕｓｔｏｍＰｒｄＫｅｙＩｎｆｏを無視することができる。
【００５１】
【数５】
2005129049.tif 000007
【００５２】
ＳＬ＿ＰＲＯＤＫＥＹのカレントバージョン番号は、１である。コーラーは、ｄｗＶｅｒｓｉｏｎフィールドにおいて、ＳＬ＿ＣＵＲＲＥＮＴ＿ＰＲＯＤＬＫＥＹ＿ＶＥＲＳＩＯＮを使用することができる。
【００５３】
ｄｗＮｕｍＯｆＡｐｐｓ  
「入力」ｐｇｕｉｄＡｐｐｓのアプリケーションＧＵＩＤの番号。
【００５４】
ｐｇｕｉｄＡｐｐｓ  
「入力」ＧＵＩＤのアプリケーションのリスト。アプリケーションＧＵＩＤは、ライセンスがインストールされている対象のアプリケーションを表す。たとえば、オフィス（商標）セットアップ（Ｏｆｆｉｃｅ  Ｓｅｔｕｐ）プログラムは、この関数を呼び出して、ｐｇｕｉｄＡｐｐｓにおいて各アプリケーションＧＵＩＤを規定することによって、Ｗｏｒｄ（商標）、Ｅｘｃｅｌ（商標）のライセンスをインストールすることができる。ｐｇｕｉｄＡｐｐは、ここではＮＵＬＬではない場合もある。
【００５５】
ｄｗＮｕｍＯｆＡｐｐｓ  
「入力」ライセンスファイルの番号。
【００５６】
ｐｐｓｚＬｉｃＦｉｌｅ  
「入力」  ストリングのアレイにおけるファイル名。
【００５７】
リターン  
成功または失敗。
【００５８】
ＳＬＵｎｉｎｓｔａｌｌ 
ＳＬＵｎｉｎｓｔａｌｌ関数は、プロダクトのライセンスをアプリケーションからアンインストールする。
【００５９】
【数６】
2005129049.tif 000008
【００６０】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。
【００６１】
ｐＡｐｐＰｒｄＫｅｙ  
「入力」ＳＬＩｎｓｔａｌｌに関する上記の定義を参照。
【００６２】
注釈  
アプリケーションは、２つ以上のプロダクトライセンスを有することができる。たとえば、ユーザがオフィス（商標）スイートをアンインストールするとき、オフィス（商標）スイートのライセンスとＷｉｎＷｏｒｄ（商標）との関連は除去されるべきであるが、ＷｉｎＷｏｒｄ（商標）スタンドアロンプロダクトからのライセンスは、除去されるべきではない。
【００６３】
ＳＬＵｎｉｎｓｔａｌｌが成功したとき：  
このプロダクトキーに関連する情報は、除去される。（関連する情報について、上記のＳＬＩｎｓｔａｌｌ参照）  
アプリケーションＧＵＩＤに関連するプロダクトキーは、除去される。  
プロダクトＧＵＩＤに関連するライセンスファイルは、依然として維持されることが好ましい。
【００６４】
リターン  
成功または失敗。
【００６５】
ＳＬＣｏｎｓｕｍｅＲｉｇｈｔ 
ＳＬＣｏｎｓｕｍｅＲｉｇｈｔ関数は、アプリケーションに、局所的に記憶されたライセンスに対する権利を調査または行使させる。この関数を呼び出すことは、ライセンスを、ｐｓｚＲｉｇｈｔＮａｍｅに記述された権利にバインドする。この権利をカレントコーラーによって行使することができない場合、アプリケーションは失敗である。関数が成功する場合、この権利に関連するアクションを実行することができる（使用カウントを減少させる、時間割り当てを減少させる、または何もしない、など）。
【００６６】
【数７】
2005129049.tif 000009
【００６７】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。
【００６８】
ｐｓｚＲｉｇｈｔＮａｍｅ  
「入力」権利の名称は、評価される必要がある。現行の設計では、権利の名称は、アプリケーションによって確定される。ＳＬがライセンスをオープンし、権利の名称に基づいて、条件を評価する。  
ｐＡｓｙｎｃＣｏｎｔｅｘｔ  
「入力／出力」ｐＡｓｙｎｃＣｏｎｔｅｘｔがＮＵＬＬである場合、この関数は、同期モードにおいて作用し、そうでない場合、この関数は、非同期モードにおいて作用する。ＳＬ＿ＡＳＹＮＣ＿ＣＯＮＴＥＸＴは、コーラーにとって不明瞭であり、ＳＬＣによって管理される。
【００６９】
注釈  
アプリケーションＧＵＩＤ（ＳＬＯｐｅｎにおいて規定される）に関連するすべてのライセンスは、１つの論理ライセンスにおいて概念的に組み合わされる。  
権利の複数の消費可能な許可が存在する場合、より高い優先順位を有するライセンスが、まず消費される。
【００７０】
リターン  
成功または失敗。
【００７１】
ＳＬＩｎｉｔｉａｌｉｚｅＡｓｙｎｃＣｏｎｔｅｘｔ 
ＳＬＩｎｉｔｉａｌｉｚｅＡｓｙｎｃＣｏｎｔｅｘｔ関数は、非同期コールを作成するために、ＳＬＣ機能（function）の非同期コンテキストを初期化する。
【００７２】
【数８】
2005129049.tif 000010
【００７３】
パラメータ  
ｐＡｓｙｎｃＣｏｎｔｅｘｔ  
「入力／出力」非同期コール情報を包含する非同期コンテキストに対するポインタ。  
ｈＥｖｅｎｔ  
「入力」同期に使用されるイベントオブジェクト。  
ｐｖＲｅｓｅｒｖｅｄ  
「入力」拡張のためにリザーブされる。
【００７４】
リターン  
成功または失敗。
【００７５】
ＳＬＣａｎｃｅｌＡｓｙｎｃＣａｌｌ 
ＳＬＣａｎｃｅｌＡｓｙｎｃＣａｌｌ関数は、非同期コールを消去するために使用される。
【００７６】
【数９】
2005129049.tif 000011
【００７７】
パラメータ  
ｐＡｓｙｎｃＣｏｎｔｅｘｔ  
「入力」ＳＬ非同期コールの非同期コンテキスト。  
ｆＡｂｏｒｔＣａｌｌ  
「入力」ＴＲＵＥである場合、コールは、即座に消去される。ＦＡＬＳＥである場合、ＳＬがコールを完了するのを待機する。
【００７８】
注釈  
コーラーが非同期コールの消去を要求するのに、打切りおよび非打切りの２つの方式がある。打切り消去では（ｆＡｂｏｒｔＣａｌｌがＴＲＵＥである）、ＳＬＣａｎｃｅｌＡｓｙｎｃＣａｌｌ関数は、ＳＬＣからの応答を待機せずに、消去通知をＳＬＣに送信し、非同期コールは、即座に消去される。非打切り消去では（ｆＡｂｏｒｔＣａｌｌがＦＡＬＳＥである）、ＳＬＣａｎｃｅｌＡｓｙｎｃＣａｌｌ関数は、ＳＬＣに消去を通知し、コーラーは、ＳＬＣがコールを完了するのを待機する。
【００７９】
リターン  
成功または失敗。
【００８０】
ＳＬＣｏｍｐｌｅｔｅＡｓｙｎｃＣａｌｌ 
ＳＬＣｏｍｐｅｌｔｅＡｓｙｎｃＣａｌｌ関数は、ＳＬＣ非同期コールを完了するために使用される。
【００８１】
【数１０】
2005129049.tif 000012
【００８２】
パラメータ  
ｐＡｓｙｎｃＣｏｎｔｅｘｔ  
「入力」ＳＬ非同期コールの非同期コンテキスト。  
ｐｈｒＡｓｙｎｃＣａｌｌ  
「出力」提出された非同期コールのエラーコード。
【００８３】
注釈  
応答が到着する前に、コーラーがこの関数を呼び出す場合、コールは、Ｅ＿ＳＬＣ＿ＡＳＹＮＣ＿ＣＡＬＬ＿ＰＥＮＤＩＮＧを戻す。バッファは、有効でなければならず、また、リターン値を受け取るように十分大きくなければならない。コールが、Ｅ＿ＳＬＣ＿ＡＳＹＮＣ＿ＣＡＬＬ＿ＰＥＮＤＩＮＧを戻さない場合、このＳＬＣｏｍｐｌｅｔｅＡｓｙｎｃＣａｌｌの呼出しは、非同期コールについて最終である。この関数の呼出し後、成功または失敗に関係なく、この非同期コールに割り付けられたすべてのリソースが、自由になる（ＳＬ＿ＡＳＹＮＣ＿ＣＯＮＴＥＸＴ構造に対する新しいコールが開始されるまで、ＳＬＣｏｍｐｌｅｔｅＡｓｙｎｃＣａｌｌ関数またはＳＬＣａｎｃｅｌＡｓｙｎｃＣａｌｌ関数に対するその後のコールは、結果を確定しない）。
【００８４】
リターン  
値                              意味  
S_OK                            コールは、首尾よく完了された。  
E_SLC_INVALID_ASYNC_CONTEXT     非同期コールのコンテキストは、有効ではない。  
E_SLC_ASYNC_CALL_PENDING        コールは、まだ完了していない。  
E_SLC_CALL_CANCELLED            コールは、消去された。
【００８５】
ＳＬＧｅｔＩｎｆｏｒｍａｔｉｏｎ 
ＳＬＧｅｔＬｉｃｅｎｓｅＩｎｆｏ機能は、様々な情報を得るために使用される。
【００８６】
【数１１】
2005129049.tif 000013
【００８７】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。
【００８８】
ｄｗＣａｔｅｇｏｒｙ  
「入力」情報のカテゴリ。
【００８９】
［カテゴリ］                  ［意味］  
SL_CAT_RIGHTDATA          バインドされた権利から情報を得る。ライセンスは、これらの権利のデータを得る前に、首尾よく消費されなければならない。  
SL_CAT_DYNAMICPROPERTY    ライセンスにはないが、実行時間において計算される情報を得る。たとえば、ＲｅｍａｉｎｉｎｇＧｒａｃｅＰｅｒｉｏｄＤａｙｓである。権利は、コーリングの前に消費されなければならない。
【００９０】
【表１】
2005129049.tif 000014
【００９１】
SL_CAT_SERVICEINFO       ライセンスに依存しない情報を得る。コーラーは、ライセンスを消費せずに、このカテゴリの情報を得ることができる。
【００９２】
【表２】
2005129049.tif 000015
【００９３】
SL_CAT_WINDOWS（登録商標）INFO    ウィンドウズ（登録商標）ライセンスにおけるバインド権利プロパティである情報を得る。これは、コンポーネント化のためである。ウィンドウズ（登録商標）ライセンスは、ＳＬサービスによって消費されており、ＳＬサービスは、バインド権利プロパティを維持する。  
SL_CAT_ENUMLICINFO                ＳＬＥｎｕｍＬｉｃｅｎｓｅｉｓが呼び出され、成功したとき、コーラーは、このカテゴリを使用することによって、列挙されたライセンスの情報について質問することができる。
【００９４】
ｐｓｚＫｅｙＮａｍｅ  
「入力」ＢｕｉｌｄＮｕｍｂｅｒなどのキーの名称。  
ｐｄｗＴｙｐｅ  
「出力」データのタイプ。  
値                      意味  
SL_DATATYPE_SZ          ユニコードストリング  
SL_DATATYPE_DWORD       ＤＷＯＲＤ  
SL_DATATYPE_BINARY      バイナリ  
ｐｃｂＶａｌｕｅ  
「出力」割り付けられたバッファのサイズ（バイトで）。  
ｐｐｂＶａｌｕｅ  
「出力」成功である場合、データは、ＳＬＣによって割り付けられたバッファにおいて戻される。コーラーは、メモリを自由にするために、ＳＬＦｒｅｅＭｅｍｏｒｙを呼び出さなければならない。
【００９５】
リターン  
成功または失敗。
【００９６】
ＳＬＡｃｑｕｉｒｅＬｉｃｅｎｓｅ 
ＳＬＡｃｑｕｉｒｅＬｉｃｅｎｓｅ関数は、ユーザのオンラインライセンスを得るために使用される。ＳＬＣは、アプリケーションに関連するプロダクトキーを列挙して、最高プロダクト優先順位を有するプロダクトキーをピックアップする（ＳＬＩｎｓｔａｌｌ、登録情報参照）。次いで、ＳＬは、ボックス外ライセンスからクリアリングハウスＵＲＬ（Uniform Resource Locator）を得て、ライセンスを得るためにクリアリングハウスに接続される。
【００９７】
ＳＬＡｃｑｕｉｒｅＬｉｃｅｎｓｅは、長いプロセスであることがある。アプリケーションは、ｐＡｓｙｎｃＣｏｎｔｅｘｔを規定することによって、非同期モードにおいてこの関数を呼び出すことができる（ＮＵＬＬは、同期モードを意味する）。
【００９８】
【数１２】
2005129049.tif 000016
【００９９】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。  
ｐｓｚＰｒｏｄＫｅｙＨａｓｈ  
「入力」プロダクトキーハッシュのストリング。プロダクトキーハッシュは、ＳＬＩｎｓｔａｌｌが、ライセンス化サービスによって呼び出されて、維持されるときに創出される。  
ｐｓｚＰｕｂｌｉｓｈｉｎｇＬｉｃｅｎｓｅ  
「入力」発行ライセンスのストリング。  
ｐＡｓｙｎｃＣｏｎｔｅｘｔ  
「入力」ＳＬ非同期コールの非同期コンテキスト。
【０１００】
注釈  
得られたライセンスは、相応してライセンスストアに記憶され、ライセンス情報も登録される（ＳＬＩｎｓｔａｌｌ参照）。
【０１０１】
アプリケーションは、より多くのクライアント情報をライセンスに追加する必要がある可能性がある。アプリケーションは、情報をコールのｐｂＡｐｐＤａｔａに置くことができ、このデータは、クリアリングハウスに送信される。
【０１０２】
この関数が成功したとき：  
必要なバインド情報を規定されたライセンスサーバに送信した。  
ライセンスサーバからライセンスを受け取る。  
ライセンスをライセンスストアに記憶した。クライアントファイルを記憶する方式については、上記のＳＬＩｎｓｔａｌｌの記述を参照されたい。
【０１０３】
リターン  
成功または失敗。
【０１０４】
ＳＬＧｅｎｅｒａｔｅＴｅｘｔＣｈａｌｌｅｎｇｅ 
バンド外方式（電話、ｅメール、ファイルシェアなど）で、ライセンス発行者に経路指定されるチャレンジテキストを生成し、インストールする。
【０１０５】
【数１３】
2005129049.tif 000017
【０１０６】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。  
ｐｓｚＰｒｏｄＫｅｙＨａｓｈ  
「入力」プロダクトキーハッシュのストリング。プロダクトキーハッシュは、ＳＬＩｎｓｔａｌｌが、ライセンス化サービスによって呼び出されて、維持されるときに創出される。  
ｂＳｉｎｇｌｅＳｅｓｓｉｏｎ  
「入力」ライセンス発行からの対応するテキスト応答が、このＳＬＣセッションハンドルの寿命の間のみ有効であるかを規定する。  
ｐｐｓｚＣｈａｌｌｅｎｇｅ  
「出力」成功である場合、テキストチャレンジは、ＳＬＣによって割り付けられたバッファにおいて戻される。コーラーは、割り付けられたメモリを自由にするために、ＳＬＦｒｅｅＭｅｍｏｒｙを呼び出す必要がある。
【０１０７】
リターン  
成功または失敗。
【０１０８】
ＳＬＤｅｐｏｓｉｔＴｅｘｔＲｅｓｐｏｎｓｅ 
応答を、ライセンス化システムのインストールチャレンジテキストに付着させる（deposit）。条件付きアクセスコードでライセンスを活動化させるために使用される。ライセンスについて発行された未解決のテキストチャレンジが存在する場合のみ有効である。当初のライセンスが、チャレンジは単一セッションについてのみ有効であると規定した場合、このＡＰＩは、ＳＬＣハンドルがクローズされる前、または応答の付着が失敗する前に、応答で呼び出されなければならない。
【０１０９】
【数１４】
2005129049.tif 000018
【０１１０】
パラメータ  
ｈＳＬＣ  
「入力」カレント行ＳＬクライアントコンテキストハンドルに対するハンドル。  
ｐｓｚＰｒｏｄＫｅｙＨａｓｈ  
プロダクトキーハッシュのストリング。  
ｐｓｚＣｈａｌｌｅｎｇｅ  
「入力」応答テキスト。
【０１１１】
リターン  
成功または失敗。
【０１１２】
ＳＬＥｎｕｍＬｉｃｅｎｓｅ 
ＳＬＥｎｕｍＬｉｃｅｎｓｅ関数は、インストールされたライセンスを列挙して、ライセンスから情報を得るために使用される。
【０１１３】
【数１５】
2005129049.tif 000019
【０１１４】
パラメータ  
ｈＳＬＣ  
「入力」カレントＳＬクライアントコンテキストハンドルに対するハンドル。  
ｐｇｕｉｄＡｐｐ  
「入力」ＳＬＩｎｓｔａｌｌを参照されたい。ｐｇｕｉｄＡｐｐがＮＵＬＬではない場合、このＧＵＩＤに関連するライセンスが列挙される。ＧＵＩＤがＮＵＬＬである場合、すべてのライセンスが列挙される。  
ｄｗＩｎｄｅｘ  
「入力」取り出されるライセンスのインデックス番号。この値は、ＳＬＥｎｕｍＬｉｃｅｎｓｅ関数に対する第１のコールについてゼロであり、その後のコールについて増大されるはずである。  
関数は、任意の順序でライセンスを戻すことが可能である。
【０１１５】
リターン  
Ｅ＿ＳＬ＿ＮＯ＿ＭＯＲＥ＿ＤＡＴＡ−指定されたインデックスにライセンスはない。
【０１１６】
注釈  
ＳＬＥｎｕｍＬｉｃｅｎｓｅｓが成功した場合、ＳＬＧｅｔＩｎｆｏｒｍａｔｉｏｎを呼び出すことによって、選択されたライセンス情報にアクセスすることができ、カテゴリは、ＳＬ＿ＣＡＴ＿ＥＮＵＭＬＩＣＩＮＦＯである。
【０１１７】
サンプル：  
【０１１８】
【数１６】
2005129049.tif 000020
【０１１９】
ＳＬＦｒｅｅＭｅｍｏｒｙ 
ＳＬＦｒｅｅＭｅｍｏｒｙ関数は、ＳＬＣによって割り付けられたメモリを自由にするために使用される。
【０１２０】
【数１７】
2005129049.tif 000021
【０１２１】
パラメータ  
ｐｖＭｅｍＢｌｏｃｋ  
「入力」以前に割り付けられたメモリブロックが自由にされる。
【０１２２】
リターン  
なし
【０１２３】
ソフトウェアの使用を制御するためのソフトウェアライセンス化ＡＰＩの使用 
ソフトウェアプロダクトが、ライセンスの権利の消費、およびライセンスからのデータの取り出しを含めて、ライセンス化に関する様々な目的に本発明のＡＰＩを使用する。上記で留意したように、ＡＰＩにより、ソフトウェアは、どのような権利がライセンスに存在するかを判定することが可能であるが、フィーチャへのアクセスを許可または否定する、動作を完全に停止するなど、その情報でどうすべきであるかを判定するのは、ソフトウェアの役割であることが好ましい。図４および５の以下の記述は、本発明のＡＰＩがソフトウェアプロダクトによって使用される方式を示す。
【０１２４】
図４は、アプリケーションが権利を「消費する（consume）」例示的なプロセスを示す。アプリケーションは、ＳＬＣｏｎｓｕｍｅＲｉｇｈｔメソッドを呼び出す（４０２）。上記で解説したように、ＳＬＣｏｎｓｕｍｅＲｉｇｈｔ関数に対する引数は、ライセンス化サービスによって割り当てられるクライアントハンドル、および権利の名称（権利が属するソフトウェアのベンダによって割り当てられる）を含む。ライセンス化サービス（図２に示したサービス２０２）は、コールを受け取る（４０４）。次いで、サービスは、権利を包含するライセンスを特定し、ライセンスのバインディングおよび妥当性を検査する。上記で留意したように、ライセンスは、ライセンスストアに配置される。ＳＬＣｏｎｓｕｍｅＲｉｇｈｔコールが属するアプリケーションソフトウェアに属するライセンスが、２つ以上存在する場合、適用可能なライセンスの１つを選択するために、優先順位規則が使用される。バインディングを検査することは、（１）ライセンスが、クライアントハンドルによって識別されたアプリケーションのプロダクトキーにバインドされる、および（２）ライセンスが、ソフトウェアが実行されているマシン（または、カレントマシンがメンバであるマシンのグループ）にバインドされることについて判定することを意味する。妥当性を検査することは、権利が満了していない（満了日を規定するライセンスの場合）こと、および権利の使用の最大数を超えていない（ライセンスが、権利を使用する（すなわち「消費する」）ことが可能である時間の最大数を規定する場合）ことについて判定することを含むことが可能である。
【０１２５】
ライセンスおよび／または権利が、適切にバインドされ、かつ有効である場合（４０８）、ライセンスは、ＡＰＩコールにおいて要求された権利にバインドされている（４１２）。（ライセンスをマシン、環境、およびプロダクトキーに「バインドすること」は、ライセンスが、どのマシンおよびプロダクトキーでライセンスを使用することができるかを規定することを意味する；ライセンスを権利に「バインドすること」は、消費関数が成功したことを意味し、権利は、特定のライセンスから消費されていることに留意されたい。この記述を通して、上記は、「バインドすること」の意味が適用される文脈から明らかになるであろう。）次いで、ＡＰＩコールは、コーリングアプリケーションに戻り、コールが成功したことを示す（４１４）。ライセンスおよび／または権利が無効であることが判明した場合、またはマシン、環境、もしくはプロダクトＩＤに適切にバインドされていないことが判明した場合、ＳＬＣｏｎｓｕｍｅＲｉｇｈｔコールは、コーリングアプリケーションに戻り、動作が失敗したことを示す（４１０）。
【０１２６】
ＳＬＣｏｎｓｕｍｅＲｉｇｈｔコールが、失敗して戻る場合、コールにおいて規定された権利は、ライセンスから消費することができず、その権利に関する情報は、コーリングアプリケーションにとって利用可能ではない。しかし、権利が首尾よく消費される場合、アプリケーションは、ライセンスへの権利のバインディングを使用して、権利に関する情報をライセンスから得ることができる。たとえば、ライセンスが、アプリケーションを実行することが可能であることを示す「run」と呼ばれる一般的な権利を包含することが可能である。しかし、「run」の権利について、ライセンスは、アプリケーションの使用に関するより具体的なパラメータを包含することが可能である。たとえば、ライセンスは、アプリケーションの特定のフィーチャ（たとえば、印刷、編集、保存など）がターンオンまたはターンオフされるべきであるかを規定することが可能であり、また、これらのフィーチャの使用について特有のパラメータを与えることが可能である（たとえば、特定のドメインにおいて実行されているマシン上でのみ、ドキュメントを保存することができる、または、印刷フィーチャは、３０日間のみ使用することができる、など）。ＳＬ  ＡＰＩは、特定のタイプの情報が権利に関連付けられることを必要とせず、アプリケーションベンダが、任意のタイプの情報を権利に関連付けることができる機構を提供する。この情報は、その後、アプリケーションによって取り出し、解釈することができる。
【０１２７】
権利が、図４に記述されたように首尾よく消費されたと想定すると、アプリケーションは、次いで、権利に関連する情報を取り出すことが可能である。この情報を取り出すプロセスを図５に示す。
【０１２８】
まず、アプリケーションは、バインド権利についてＳＬＧｅｔＩｎｆｏｒｍａｔｉｏｎメソッドを呼び出す（５０２）。取り出すことのできる様々なタイプの情報は、ＳＬＧｅｔＩｎｆｏｒｍａｔｉｏｎメソッドの記述に関連して上記で記述されている。次いで、ライセンス化サービスは、コールを受け取る（５０４）。サービスは、バインド権利を包含するライセンスファイルから、要求された情報を取り出す（５０６）。次いで、ライセンス化サービスは、この情報をバッファに置き（５０８）、コーリングアプリケーションに戻る（５１０）。次いで、コーリングアプリケーションは、バッファの内容を読み取り、取り出された情報に基づいて、必要と見なされるアクションであればどんなものでも実施する。
【０１２９】
ライセンス化サービスは、ＳＬＧｅｔＩｎｆｏｒｍａｔｉｏｎコールの一部として扱われている情報の意味を認識しない可能性があることに留意されたい。上記で解説したように、ライセンス化フレームワークは、ソフトウェアベンダが権利を創出することができ、かつ情報を権利に関連付けることができる機構を提供する。本発明は、権利に関連付けることができる情報のいずれの特定のタイプにも限定されない。情報をライセンスから取り出すとき、情報は、単に、ライセンス化サービスによってバッファのアプリケーションに渡される。次いで、アプリケーションは、取り出された情報を解釈して、その情報に基づいて、取るべきアクションを決定し、それ自体のセキュリティフィーチャを使用して、アプリケーションの決定を施行する（たとえば、取り出された情報に基づいて、アプリケーションが印刷フィーチャを不能にする場合、アプリケーションは、このフィーチャを実際に不能にするコード、およびおそらくは、ハッカーが、印刷フィーチャを不能にすることで改竄することを防止するコードを包含する）。
【０１３０】
以上の例は、単に例示のために提供されており、決して本発明の限定と解釈されるべきではないことに留意されたい。本発明は、様々な実施形態に関して記述されているが、本明細書において使用される語は、限定の語ではなく、記述および例示の語であることを理解されたい。さらに、本発明は、本明細書において、特定の手段、材料、および実施形態に関して記述されているが、本発明は、本明細書において開示した具体例に限定されると解釈されるべきではない。むしろ、本発明は、請求項の範囲内にあるようなすべての機能的に等価な構造、方法、および使用に拡張される。当業者なら、本明細書の教示の利益を有することにより、多くの修正を実施することが可能であり、変更は、態様において、本発明の範囲および趣旨から逸脱せずに行うことが可能である。
【図面の簡単な説明】
【０１３１】
【図１】本発明を適用できる実施形態の例示的なコンピューティング環境のブロック図である。
【図２】本発明を適用できる実施形態のシステムが、ライセンス化機能を実施し、かつソフトウェアプロダクトによって使用されるＡＰＩを公開するアーキテクチャのブロック図である。
【図３】本発明を適用できる実施形態のソフトウェアプロダクトがライセンス化ＡＰＩを使用する方法の流れ図である。
【図４】本発明を適用できる実施形態のソフトウェアプロダクトが権利を消費する方法の流れ図である。
【図５】本発明を適用できる実施形態のソフトウェアプロダクトが消費権利に関する情報を取り出す方法の流れ図である。
【符号の説明】
【０１３２】
１１０  コンピュータ
１３５  アプリケーション
２０２  ソフトウェアライセンス化サービス
２０４  ライセンスストア
２０６  トラストストア
２０８  ＡＰＩ
【図１】
2005129049.tif 000022
【図２】
2005129049.tif 000023
【図３】
2005129049.tif 000024
【図４】
2005129049.tif 000025
【図５】
2005129049.tif 000026