(57)【要約】【課題】  ネットワーク化された周辺デバイスドライバの維持管理フレームワークおよび対応する方法。【解決手段】  フレームワークはドライババージョン記述のセットを備えるドライババージョン識別レベルを含み、各ドライババージョンは各特定のバージョン上に構成されるコンポーネントバージョンのセットを備える。ドライバコンポーネントレベルは、一意に識別されたコンポーネントバージョン（コンテナ）を備える。複数の同時にアクティブなネットワーク化された周辺デバイスドライバを維持管理するための方法は、新しいドライバをマシン上に格納することを含む。マシンはディレクトリ構造内で、ドライバコンポーネントのバージョンを構成するドライバファイルのセットを格納するためのコンテナを確立する。一意の識別子名が新しいコンテナに割り当てられる。このコンポーネントバージョンと関連付けられたドライバファイルのセットがコンテナ内に挿入される。【選択図】  図５ｂ
2004303252.tif 000002
【特許請求の範囲】
【請求項１】
複数の同時にアクティブなネットワーク化された周辺デバイスドライバのコンポーネントをネットワーク化されたマシン上で維持管理するための方法であって、前記同時にアクティブなネットワーク化された周辺デバイスドライバの異なるコンポーネントは、潜在的に同じ名前を有する異なる周辺デバイスドライバファイルを含み、該方法は、
ネットワーク化された周辺デバイスドライバコンポーネントのバージョンを構成するドライバファイルのセットを格納するためのコンテナを確立することと、
前記コンテナに一意の識別子名を割り当てることと、
前記コンテナ内に前記ドライバファイルのセットを挿入することと
を備えることを特徴とする方法。
【請求項２】
前記コンテナは、ファイルシステムのサブディレクトリであることを特徴とする請求項１に記載の方法。
【請求項３】
前記一意の識別子名は、前記デバイスドライバコンポーネントのバージョン識別を備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記バージョンは、日付を備えることを特徴とする請求項３に記載の方法。
【請求項５】
前記バージョンは、符号化され、マルチセグメント化された値を備えることを特徴とする請求項３に記載の方法。
【請求項６】
ネットワーク化された周辺デバイスのサーバによって維持管理された周辺デバイスキューのドライバ識別情報をリクエストすることと、
前記リクエストすることに応答して、ネットワーク化された周辺デバイスドライバの特定のバージョンを指定するドライバ識別を受け取ることと
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記ドライバ識別を、前記ディレクトリ構造において現在維持管理されているドライババージョンのセットと比較することをさらに備えることを特徴とする請求項６に記載の方法。
【請求項８】
前記ドライババージョンのセットが、前記ドライバ識別に対応する前記ドライババージョンを含まないことを判定することと、
前記ドライババージョンのコピーをアップロードすることと
をさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
前記ドライバ識別は、前記ネットワーク化された周辺デバイスドライバの前記バージョンが入っているドライバパッケージバージョンに対応するバージョン情報を含むドライバパッケージ識別をさらに指定し、
前記ドライバパッケージ識別を、利用可能なパッケージバージョンのセットと比較することをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記ドライバパッケージ識別が、前記パッケージバージョンのセットのパッケージバージョンに対応しないことを判定することと、
前記ドライバパッケージ識別を含むクエリをドライバパッケージのネットワーク化されたディレクトリに発行することと
をさらに備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記アップロードすることは、前記ドライババージョンの前記コピーが入っているドライバパッケージバージョンの完全なコピーをアップロードすることを備えることを特徴とする請求項８に記載の方法。
【請求項１２】
前記コンテナを保持するアクティブドライバコンポーネントストレージを提供することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１３】
複数の同時にアクティブなネットワーク化された周辺デバイスドライバをネットワーク化されたマシン上で維持管理するためのシステムであって、前記同時にアクティブなネットワーク化された周辺デバイスドライバの異なるものは、潜在的に同じ名前を有する異なる周辺デバイスドライバファイルを含み、該システムは、
ネットワーク化された周辺デバイスドライバコンポーネントのバージョンを構成するドライバファイルのセットを格納するためのコンテナを確立するための手段と、
前記コンテナに一意の識別子名を割り当てるための手段と、
前記コンテナ内に前記ドライバファイルのセットを挿入するための手段と
を備えたことを特徴とするシステム。
【請求項１４】
前記コンテナは、ファイルシステムのサブディレクトリであることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記一意の識別子名は、前記デバイスドライバコンポーネントのバージョン識別を備えたことを特徴とする請求項１３に記載のシステム。
【請求項１６】
前記バージョンは、日付を備えたことを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記バージョンは、符号化されマルチセグメント化された値を備えたことを特徴とする請求項１５に記載のシステム。
【請求項１８】
ネットワーク化された周辺デバイスのサーバによって維持管理された周辺デバイスキューのドライバ識別情報をリクエストするための手段と、
前記リクエストするための手段に応答して、ネットワーク化された周辺デバイスドライバの特定のバージョンを指定するドライバ識別を受け取るための手段と
をさらに備えたことを特徴とする請求項１３に記載のシステム。
【請求項１９】
前記ドライバ識別を、前記ディレクトリ構造において現在維持管理されているドライババージョンのセットと比較するための手段をさらに備えたことを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記ドライババージョンのセットが、前記ドライバ識別に対応する前記ドライババージョンを含まないことを判定するための手段と、
前記ドライババージョンのコピーをアップロードするための手段と
をさらに備えたことを特徴とする請求項１９に記載のシステム。
【請求項２１】
前記ドライバ識別は、前記ネットワーク化された周辺デバイスドライバの前記バージョンが入っているドライバパッケージバージョンに対応するバージョン情報を含むドライバパッケージ識別をさらに指定し、
前記ドライバパッケージ識別を、利用可能なパッケージバージョンのセットと比較するための手段をさらに備えたことを特徴とする請求項２０に記載のシステム。
【請求項２２】
前記ドライバパッケージ識別が、前記パッケージバージョンのセットのパッケージバージョンに対応しないことを判定するための手段と、
前記ドライバパッケージ識別を含むクエリをドライバパッケージのネットワーク化されたディレクトリに発行するための手段と
をさらに備えることを特徴とする請求項２１に記載のシステム。
【請求項２３】
前記アップロードするための手段は、前記ドライババージョンの前記コピーが入っているドライバパッケージバージョンの完全なコピーを得ることを特徴とする請求項２０に記載のシステム。
【請求項２４】
前記コンテナを保持するアクティブドライバコンポーネントストレージを提供するための手段をさらに備えたことを特徴とする請求項１３に記載のシステム。
【請求項２５】
マルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワークであって、
一意に識別されたドライババージョン記述のセットを備えるドライババージョン識別レベルであって、ドライババージョン記述は、ネットワーク化された周辺デバイスドライババージョンを構成するコンポーネントのリストを含むドライババージョン識別レベルと、
一意の識別子名によって識別されたバージョン固有のコンポーネントコンテナを備えるドライバコンポーネントレベルであって、前記コンポーネントコンテナは、前記ドライババージョン記述にリストされた指定コンポーネントバージョンの内容を保持するドライバコンポーネントレベルと
を備えたことを特徴とするマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項２６】
前記ドライババージョン識別レベルは、前記ドライババージョン記述を備えるデータベースによって履行されることを特徴とする請求項２５に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項２７】
前記ドライババージョン識別レベルは、前記一意に識別されたドライババージョン記述のセットを含むファイルシステム構造によって履行されることを特徴とする請求項２５に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項２８】
あるコンポーネントは、さらなるサブコンポーネントのリストを備えたことを特徴とする請求項２５に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項２９】
前記コンポーネントは、コンポーネントを構成する前記ドライバファイルの少なくとも一部を構成するドライバファイルのセットを備えたことを特徴とする請求項２８に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項３０】
あるコンポーネントの前記一意の識別子名は、バージョン識別を含むことを特徴とする請求項２５に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項３１】
あるコンポーネントの前記一意の識別子名は、署名データを含むことを特徴とする請求項２５に記載のマルチレベルのアクティブネットワークデバイスドライバストレージ／アクセスフレームワーク。
【請求項３２】
ドライバパッケージの複数のバージョンをネットワークにおいて維持管理するための方法であって、前記ドライバパッケージのうち異なるものは潜在的に同じ名前を有し、該方法は、
ディレクトリ構造内で、ドライバファイルを含む少なくとも１つのファイルを含むファイルのセットを備えるドライバパッケージバージョンを格納するための新しいコンテナを確立することと、
前記ドライバパッケージの前記バージョンを一意に識別する前記新しいコンテナに厳密名を割り当てることと、
前記ドライバパッケージバージョンの前記ファイルのセットを前記新しいドライバパッケージコンテナ内に挿入することと
を備えることを特徴とする方法。
【請求項３３】
複数の同時にアクティブなネットワーク化された周辺デバイスドライバのコンポーネントをネットワーク化されたマシン上で維持管理し易いようにするためのコンピュータ実行可能命令を含むコンピュータ可読媒体であって、前記同時にアクティブなネットワーク化された周辺デバイスドライバの異なるコンポーネントは、潜在的に同じ名前を有する異なる周辺デバイスドライバファイルを含み、該コンピュータ実行可能命令は、
ネットワーク化された周辺デバイスドライバコンポーネントのバージョンを構成するドライバファイルのセットを格納するためのコンテナを確立することと、
前記コンテナに一意の識別子名を割り当てることと、
前記コンテナ内に前記ドライバファイルのセットを挿入することと
からなる方法を実行することを容易にしたことを特徴とするコンピュータ可読媒体。
【請求項３４】
前記コンテナは、ファイルシステムサブディレクトリであることを特徴とする請求項３３に記載のコンピュータ可読媒体。
【請求項３５】
前記一意の識別子名は、前記デバイスドライバコンポーネントのバージョン識別を備えたことを特徴とする請求項３３に記載のコンピュータ可読媒体。
【請求項３６】
前記バージョンは、日付を備えたことを特徴とする請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
前記バージョンは、符号化され、マルチセグメント化された値を備えたことを特徴とする請求項３５に記載のコンピュータ可読媒体。
【請求項３８】
ネットワーク化された周辺デバイスのサーバによって維持管理された周辺デバイスキューのドライバ識別情報をリクエストすることと、
前記リクエストすることに応答して、ネットワーク化された周辺デバイスドライバの特定のバージョンを指定するドライバ識別を受け取ることと
を実行することを容易にするコンピュータ実行可能命令をさらに備えることを特徴とする請求項３３に記載のコンピュータ可読媒体。
【請求項３９】
前記ドライバ識別を、前記ディレクトリ構造において現在維持管理されているドライババージョンのセットと比較することを実行することを容易にするコンピュータ実行可能命令をさらに備えたことを特徴とする請求項３８に記載のコンピュータ可読媒体。
【請求項４０】
前記ドライババージョンのセットが、前記ドライバ識別に対応する前記ドライババージョンを含まないことを判定することと、
前記ドライババージョンのコピーをアップロードすることと
を実行することを容易にするコンピュータ実行可能命令をさらに備えたことを特徴とする請求項３９に記載のコンピュータ可読媒体。
【請求項４１】
前記ドライバ識別は、前記ネットワーク化された周辺デバイスドライバの前記バージョンが入っているドライバパッケージバージョンに対応するバージョン情報を含むドライバパッケージ識別をさらに指定し、
前記ドライバパッケージ識別を、利用可能なパッケージバージョンのセットと比較することを実行することを容易にするコンピュータ実行可能命令をさらに備えたことを特徴とする請求項４０に記載のコンピュータ可読媒体。
【請求項４２】
前記ドライバパッケージ識別が、前記パッケージバージョンのセットのパッケージバージョンに対応しないことを判定することと、
前記ドライバパッケージ識別を含むクエリをドライバパッケージのネットワーク化されたディレクトリに発行することと
を実行することを容易にするコンピュータ実行可能命令をさらに備えたことを特徴とする請求項４１に記載のコンピュータ可読媒体。
【請求項４３】
前記アップロードすることは、前記ドライババージョンの前記コピーが入っているドライバパッケージバージョンの完全なコピーをアップロードすることを備えたことを特徴とする請求項４０に記載のコンピュータ可読媒体。
【請求項４４】
前記コンテナを保持するアクティブドライバコンポーネントストレージを提供することを実行することを容易にするコンピュータ実行可能命令をさらに備えたことを特徴とする請求項３３に記載のコンピュータ可読媒体。
【請求項４５】
ドライバパッケージの複数のバージョンをネットワークにおいて維持管理し易いようにするためのコンピュータ実行可能命令を含むコンピュータ可読媒体であって、前記ドライバパッケージのうち異なるものは、潜在的に同じ名前を有し、該コンピュータ実行可能命令は、
ディレクトリ構造内で、ドライバファイルを含む少なくとも１つのファイルを含むファイルのセットを備えるドライバパッケージバージョンを格納するための新しいコンテナを確立することと、
前記ドライバパッケージの前記バージョンを一意に識別する前記新しいコンテナに厳密名を割り当てることと、
前記ドライバパッケージバージョンの前記ファイルのセットを前記新しいドライバパッケージコンテナ内に挿入することと
を備える方法を実行することを容易にしたことを特徴とするコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ネットワーク化されたコンピューティングシステムに関する。より詳細には、本発明は、クライアントマシンが周辺デバイス（例えば、プリンタ、スキャナ、多機能周辺デバイスなど）を共有するネットワーク環境において、ネットワーク化された周辺デバイスクライアントを管理するための方法およびコンピュータシステムのメカニズムに関する。こうしたネットワーククライアントは、クライアントマシン上にローカルにロードされたドライバ、および関連するドライバコンポーネントに依拠して、共有周辺デバイスと通信する。
【背景技術】
【０００２】
ネットワーク上で共にリンクされた多数の別個のユーザ／コンピュータを含む企業において、プリンタおよび他の周辺デバイスを利用するための普及している経済的な１つの方法は、ネットワーク化された周辺デバイスを多数の別個のユーザ／コンピュータの間で共有することである。専用周辺デバイスを各クライアントマシンに提供するのではなく、ネットワークにより、ネットワーク化されたクライアントマシンおよびサーバの本来備わっているマシン間の通信機能を利用して、周辺デバイスを多数のユーザの間で共有する。このような共有により、周辺デバイスの利用度が一般に改善され、周辺デバイスのサービスをネットワーク化されたユーザに提供するコストが削減される。
【０００３】
複数のネットワーク化されたクライアントによる周辺デバイスの共有により、ネットワーク上の周辺デバイス（例えば、プリンタ）の複数のインスタンスへの各クライアントによるアクセスを提供する機会が与えられ、これらのクライアントは、ドライバを通じて様々な周辺デバイスをサポートするサーバと通信する。周辺デバイスドライバは複数のコンポーネントを一般に備え（例えば、ファイルまたはファイルの組合せであり、「アセンブリ」とも称される）、これらは組み合わせて完全なドライバを提供する。ドライバは、周辺デバイス接続のためにクライアントおよびサーバの間の様々な点に関するやりとりをサポートする。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
何百ものユーザによって共有された複数の周辺デバイスを備える大規模ネットワークにおいて周辺デバイスドライバを管理することは、クライアントマシン上でドライバを見つけ、格納し、インストール（アクティブ化）し、そして更新することを伴う。このような状況下でのドライバの管理は、アドミニストレータが物理的に各クライアントマシンに出向き、新しいドライバを物理的にロードすることによっては容易に為されない。以前に、「ポイントアンドプリント」として知られたプリンタドライバ管理構成では、プリンタドライバがファイル毎にソースからターゲットクライアントマシンへ転送されていた。このような更新メカニズムはいくつかの問題につながり、これらの問題には、所与のデバイスに不完全なソフトウェアのパッケージをインストールすること、ファイル更新中に特定の周辺デバイスのドライバファイルの適切なバージョンを保持できないこと、および周辺デバイスサーバおよびクライアント上にロードされた複数のドライバの間で一貫性／互換性を維持管理することが一般にできないことが含まれる。
【０００５】
周辺デバイスドライバの不適合は、周辺デバイスがクライアント／サーバによりネットワーク化された周辺デバイス環境において利用されるとき懸案となる。クライアントとサーバは、同じバージョンのドライバを実行しているとき最も良く動作する。しかし、クライアントが一度に１つのバージョンのドライバしか実行できない場合、クライアントが同じドライバの異なるバージョンを実行している２つのサーバとやりとりするとき、ドライバの不適合が生じる可能性がある。デバイスドライバがクライアントマシン上にインストールされるとき、同じ名前を有するドライバファイルのただ１つのバージョンのみがクライアントマシン上に格納される。ファイル名が２つの異なるドライババージョンの間で重複する場合、クライアントマシン／ユーザは、２つの同じ名前のファイルのうち一方（例えば、より新しいファイル作成日を有するファイルバージョン）のみを格納する。結果として、完全なクライアントサーバドライバの互換性は、クライアントが周辺デバイスの接続を有し、ドライバの異なるバージョンを操作している複数のアクティブサーバの１つについて保証することができるだけである。これにより、アクティブドライバディレクトリにある他のドライバコンポーネントバージョンによって置き換えられた１つまたは複数のコンポーネントバージョンを含むデバイスドライババージョンを実行する周辺デバイスサーバについて、障害のある機能がもたらされる。アクティブドライバの置き換えは、クライアントマシン上で複数のレベルのいずれかで起こる可能性があり、これらには（１）あるドライババージョンのコンポーネントが第２のドライババージョンと異なるドライバレベル、（２）コンポーネントの内容がバージョンの間で異なるドライバコンポーネントレベル、および（３）あるファイルの２つの同じ名前のバージョンの内容が異なるドライバファイルレベルが含まれる。
【０００６】
ドライバ／コンポーネント／ファイルのバージョンを上書きすることから生じる可能性のある非互換性／障害のある機能の例には、サポートされていない構成の機能、オペレーション、およびユーザインターフェイスが含まれる。
【課題を解決するための手段】
【０００７】
本発明は、ネットターク化された周辺デバイス環境におけるマシン上で潜在的に異なるドライバのバージョンおよびそれらの関連コンポーネントのバージョンを維持管理することに関する、従来技術の欠点の多くに対処することを目指している。同時に複数のアクティブなネットワーク化された周辺デバイスドライバを維持管理するための方法が開示される。この方法は、例えば、ネットワークマシンによって行われて、同時にアクティブなネットワーク化された周辺デバイスドライバのうち異なるものが、同じ名前を潜在的に有する異なる周辺デバイスドライバコンポーネントおよび／またはファイルを含む状況において、すべてのネットワーク化された周辺デバイス／サーバとの互換性を確実なものとする。
【０００８】
この方法は、マシンによって実行される以下のステップを含む方法で新しいドライバをマシン上に格納することを含む。最初に、マシンは、ネットワーク化された周辺デバイスドライバの少なくとも１つのコンポーネントのバージョンを構成するドライバファイルのセットを格納するためのコンテナを確立する。次いで、一意の識別子名がコンテナに割り当てられる。その後、ドライバファイルのセットがコンテナ内に挿入される。
【０００９】
本発明の他の態様によれば、マシンは、マルチレベルのアクティブなネットワークデバイスドライバのアクセス／ストレージフレームワーク内でアクティブドライバを維持管理する。このフレームワークは、一意に識別されたドライババージョンのセットを備えるドライババージョン識別レベルを含む。第２のレベルで、一意に識別される各ドライババージョンは、ネットワーク化された周辺デバイスドライバのバージョンを構成するドライバコンポーネントのセットを参照する。本発明の一実施形態では、コンポーネントはファイルの複数のセットを備える。ドライバコンポーネントバージョンを構成するこれらのファイルが、コンポーネントバージョンに割り当てられた、一意に識別されるサブディレクトリに格納される。ドライバコンポーネントのこのような一意の識別により、コンポーネントの後続のバージョンがネットワーク化されたシステムのアクティブなドライバストレージ上にロードされるとき、ドライバファイルの第１のバージョンが、同じ名前を有するドライバファイルの第２のバージョンを上書きすることを防ぐことを容易にする。
【００１０】
添付の特許請求の範囲は、本発明の特徴を詳細に示すが、本発明およびその利点は、付随する図面と共に以下の詳細な説明から最も良く理解される。
【発明を実施するための最良の形態】
【００１１】
本発明は、例として、ネットワーク化されたコンピュータシステム環境内で実施され、これは、クライアント、サーバおよびネットワーク化された周辺デバイス（例えば、プリンタ、スキャナなど）を含む。本発明は、例えば、集中ドライバパッケージストアを含むネットワーク内で実行され、集中ドライバパッケージストアは、周辺デバイスドライバをリクエストしているクライアント上にインストールするためのポイントソースとして動作する。集中ドライバパッケージストアは完全なドライバパッケージのバージョンを維持管理し、これは、ネットワーク化された周辺デバイスについてサーバと通信するために、クライアントによって利用される潜在的に複数のドライバ／バージョンを含む。
【００１２】
さらに、本発明の一実施形態では、ドライバパッケージストア上にインストールされたパッケージの完全性が保証される。ドライバの完全性は、リクエストしているクライアントマシンへ後で配布するため、またはそのパッケージからドライバをインストールするためにパッケージが集中ドライバストレージまたは他の任意のマシン上にインストールされるとき、ドライバパッケージと関連付けられたファイルの全セットをコピーすることによって、保証される。冗長なファイルを除去しようと試みない。インストールされたパッケージにすべてのドライバ関連ファイルを完全に非選択的に格納することにより、クライアントマシンがドライバのインストールをリクエストするとき、特定のリクエストされたドライバと関連付けられたファイルのそのセットは、互換性があり、完全であることが保証される。
【００１３】
本明細書で開示されたさらに他の態様のドライバストレージおよび管理スキームは、アクティブドライバをシステム上で維持管理するための新しい方法を備える。本発明の一実施形態では、一意のドライババージョンの少なくとも一部を構成する関連ファイルのセットが、一意の識別子名を有するディレクトリコンテナ内で維持管理される。一意の識別子名は、本明細書で参照するように、同じ識別子名を有するコンテナは、本当に同一であるという、高度の確証を提供する。一意の識別子名の下でドライババージョンの少なくとも一部を構成するファイルをグループ化することによって、ドライバの異なるバージョンを同時にクライアントシステム上でアクティブ化することができる。
【００１４】
一意の識別子名は、いくつかの異なるフォーマットで提供することができる。このような一意の識別子名の一例は、．ＮＥＴアセンブリとの関連で使用される厳密名（ｓｔｒｏｎｇ  ｎａｍｅ）である。あるいは、ＧＵＩＤ＋バージョンの組合せを使用してドライバのあるバージョンを一意に識別することによって、適切な機能を得ることができる。同様に、ドライバの各バージョンに割り当てられたＧＵＩＤを一意の識別子名としてそれ自体で使用することができる。ドライバ／ファイルのバージョンを指定するＧＵＩＤは、２つの異なるドライバ／ファイルが単に同じドライバ／ファイルの２つのバージョンであるという簡単な判定をし易くせず、したがって、少なくともドライバ／製品ＧＵＩＤをバージョン識別子と組み合わせて使用することが、ドライバ管理の観点から一般に好まれる。さらに他の実施形態では、セキュリティ／認証性セグメント（例えば、公開鍵のハッシュ）を一意の識別子名に追加して、特定のドライバまたはそのコンポーネント／ファイルのソースの認証を容易にする。
【００１５】
本明細書で開示した実施形態に従って、異なる構成のドライバファイルが入っている、ドライバの異なるバージョンを識別するために、一意の識別子名を使用することにより、クライアントマシンが、同じ周辺デバイスドライバの異なるバージョンを実行するサーバと関連付けられた周辺デバイス（例えば、プリンタ）の接続を同時にサポートすることが可能になる。２つの異なるサーバ上で実行されているこのような異なるバージョンの一例は、２つのサーバが、同じ名前を有するドライバＤＬＬファイルの異なるバージョンを利用している場合であろう。２つのドライバＤＬＬファイルの一方を上書きするのではなく、本発明は、２つの異なるそれぞれのＤＬＬファイルをそれぞれの一意に識別されたディレクトリに格納することを企図している。
【００１６】
．ＮＥＴアセンブリ規定を利用する本発明の例示的な実施形態では、共有周辺デバイスのドライバのバージョンが最初に集中ドライバストレージ上に格納されるとき、ドライバの特定のバージョンについて厳密名が判定される。厳密名は、例えば、ドライバの作成者によって提供される。あるいは、本明細書で説明する特定のドライバストレージインフラストラクチャ／方法の知識なくドライバが作成される場合、ドライバが格納されるとき、特定のドライババージョンと関連付けられた１つまたは複数のファイルから抽出されたメタデータ（例えば、バージョン番号、タイムスタンプ、チェックサムなど）に基づいて適切な一意の識別子名が生成される。厳密名は、２つの同一ではないファイルの場合に異なる可能性が非常に高く、それにより、同じ厳密名を有する２つのファイルが本当に同一であるという高い確度を保証する。様々なバージョンコンテナのそれぞれに割り当てられた厳密名は、集中ドライバストレージおよびドライバの受領者（例えば、プリンタクライアント）がドライバコンポーネント（例えば、アセンブリ）バージョンを、潜在的にすでにマシン上に格納されている他のバージョンから区別できるようにする。
【００１７】
本発明の特定の実施形態では、メタデータストアは、インストールされたパッケージおよびドライバに関連する情報をコンパクトフォーマットにおいて維持管理する。コンパクトフォーマット（例えば、データベース）は、後にクライアントが任意の適切な周辺デバイスドライバインストール方法（例えば、ポイントアンドプリント）を通じてドライバのインストール／アクティブ化をリクエストするとき、簡単な検索（ｌｏｏｋ  ｕｐ）を容易にする。
【００１８】
本発明の開示された実施形態では、周辺デバイスドライバのクライアントがドライバの少なくとも一部（コンポーネント）をドライババージョン固有のコンテナに格納する。特定のドライバがクライアントマシンのアクティブドライバストア内に配置されるとき、一意の識別子名（例えば、厳密名）が割り当てられる。上の説明のように、厳密名は、ドライバの特定のバージョンが、クライアントによって現在維持管理されている同じドライバの他のバージョンから容易に区別されることを確実にする（バージョン情報を含むことによっても、例えば、どちらのドライバがより新しいかに基づく意志決定が容易になる）。特定のドライババージョンが受領者のクライアントマシン上でアクティブ化されると、特定のドライババージョンに割り当てられた厳密名は、このドライババージョンをクライアント上の同じドライバの他のアクティブ化されたバージョンから区別することを容易にする。
【００１９】
同じ名前を有するドライバファイルの前のバージョンを、ドライバインストール中にドライバディレクトリにコピーされるものとして潜在的に上書きするクライアント側ドライバ管理／ストレージスキームとは対照的に、本発明を実施しているクライアント側ドライバ管理／ストレージスキームは、クライアントドライバ管理機能がドライバおよびそれらの関連コンポーネント／ファイルの様々なバージョンを区別できることを保証する。例えば、ドライバのより新しいバージョンがクライアントマシン上に集中ドライバストレージからインストールされるとき、クライアントはより新しいドライババージョンと関連付けられた少なくとも新しいコンポーネントについて一意に識別されたコンテナ（例えば、ファイルシステムサブディレクトリ）をそのドライバファイルストレージ機能内に作成する。本発明の一実施形態では、ドライバコンポーネントの完全なセットを新しいディレクトリ下に格納するのではなく、新しいコンポーネントバージョンのみが、一意の識別子名を有する新しいコンテナ内に格納されて、同じドライバコンポーネントの複数のバージョンの間で区別される。前にインストールされた、より古いバージョンの同じドライバコンポーネントは、その一意に識別されたコンテナに変更されないまま残る。結果として、ネットワーク化された周辺デバイス（例えば、プリンタ）クライアントは、ネットワーク化されたプリンタドライバの２つの異なるバージョン（例えば、１．１および１．２）を現在実行中である２つの別個のネットワーク化されたデバイスサーバへのアクセスを同時にサポートすることができる。
【００２０】
図面を見ると、図１は、本発明を組み込む共有ネットワーク化された周辺デバイス環境内において、集中ドライバパッケージストア、周辺デバイスクライアントおよびサーバを実行するための適切なオペレーティング環境１００の一例を例示的に示している。オペレーティング環境１００は、適切なオペレーティング環境の一例でしかなく、本発明の用途または機能性の適用範囲についていかなる限定を示唆するように意図されたものではない。本発明との使用に適する可能性のある他の周知のコンピューティングシステム、環境および／または構成には、これらに限定されないが、パーソナルコンピュータ、サーバコンピュータ、ラップトップ／ポータブルコンピューティングデバイス、ハンドヘルドコンピューティングデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００２１】
プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令によって履行されるステップおよびプロセスのセットとの一般的な関連で本発明を説明する。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、特定の抽象データ型を実装する。例示的な実施形態は、単一のコンピュータシステム上でローカルに実行されたプロセスを参照して説明されているが、本発明は、タスクが通信ネットワークを通じてリンクされているリモート処理装置によって実行される分散コンピューティング環境において動作するネットワークノード内に潜在的に組み込まれる。分散コンピューティング環境では、プログラムモジュールは一般に、メモリストレージデバイスを含むローカルおよびリモートのコンピュータ記憶媒体の両方に位置する。
【００２２】
引き続き図１を参照すると、本発明を実施するための例示的なシステムは、コンピュータ１１０の形態の汎用コンピューティングデバイスを含む。コンピュータ１１０の構成要素は、これらに限定されないが、処理装置１２０、システムメモリ１３０、および、システムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１を含むことができる。システムバス１２１は、いくつかのタイプのバス構造のいずれかにすることができ、これらには、メモリバスまたはメモリコントローラ、周辺バスおよび様々なバスアーキテクチャのいずれかを使用するローカルバスが含まれる。限定ではなく、例として、このようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、および、メザニンバスとしても知られるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００２３】
コンピュータ１１０は通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスすることができる任意の利用可能な媒体にすることができ、これには、揮発性および不揮発性の媒体、取り外し可および取り外し不可の媒体が含まれる。限定ではなく、例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報の格納のための任意の方法または技術で実装された揮発性および不揮発性、取り外し可および取り外し不可の媒体を含む。コンピュータ記憶媒体には、これらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または、所望の情報を格納するために使用することができ、コンピュータ１１０によってアクセスすることができる他の任意の媒体が含まれる。通信媒体は通常、搬送波もしくは他のトランスポートメカニズムなどの変調データ信号においてコンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータを具体化し、任意の情報配信媒体をも含む。「変調データ信号」という用語は、信号において情報を符号化するような方法でその特性の１つまたは複数が設定または変更されている信号を意味する。限定ではなく、例として、通信媒体には、有線ネットワークまたは直接配線接続などの有線媒体、ならびに、音響、ＲＦ、赤外線および他の無線媒体などの無線媒体が含まれる。上記のいずれの組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００２４】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動中など、コンピュータ１１０内の複数の要素の間で情報を転送する助けとなる基本ルーチンが入っている基本入出力システム（ＢＩＯＳ）１３３は、時にＲＯＭ１３１に格納される。ＲＡＭ１３２は通常、処理装置１２０によって即座にアクセス可能および／または現在操作中であるデータおよび／またはプログラムモジュールを含む。限定ではなく、例として、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７を示す。
【００２５】
コンピュータ１１０は、他の取り外し可／取り外し不可、揮発性／不揮発性のコンピュータ記憶媒体を含むこともできる。例としてのみ、図１には、取り外し不可の不揮発性の磁気媒体に対して読み書きを行うハードディスクドライブ１４１、取り外し可の不揮発性磁気ディスク１５２に対して読み書きを行う磁気ディスクドライブ１５１、および、ＣＤ−ＲＯＭまたは他の光媒体など、取り外し可の不揮発性の光ディスク１５６に対して読み書きを行う光ディスクドライブ１５５を示す。例示的なオペレーティング環境で使用することができる他の取り外し可／取り外し不可、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定されないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどが含まれる。ハードディスクドライブ１４１は通常システムバス１２１に、インターフェイス１４０などの取り外し不可のメモリインターフェイスを通じて接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常システムバス１２１に、インターフェイス１５０などの取り外し可のメモリインターフェイスによって接続される。
【００２６】
上述し、図１に例示したドライブおよびそれらの関連するコンピュータ記憶媒体は、コンピュータ１１０のコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータのストレージを提供する。図１では、例えば、ハードディスクドライブ１４１が、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を格納するものとして例示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６およびプログラムデータ１３７と同じものとすることも異なるものとすることもできることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７には、少なくともそれらが異なるコピーであることを示すためにここでは異なる番号が付与されている。ユーザは、キーボード１６２、および、一般にマウス、トラックボールまたはタッチパッドと称されるポインティングデバイス１６１などの入力デバイスを通じて、コンピュータ１１０へコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星用アンテナ、スキャナなどが含まれることがある。これらおよび他の入力デバイスは、システムバスに結合されているユーザ入力インターフェイス１６０を通じて処理装置１２０へ接続されることが多いが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）など、他のインターフェイスおよびバス構造によって接続することもできる。モニタ１９１または他のタイプの表示デバイスも、ビデオインターフェイス１９０などのインターフェイスを介してシステムバス１２１へ接続することができる。モニタ１９１に加えて、コンピュータは、スピーカ１９７およびプリンタ１９６など他の周辺出力デバイスを含むことがあり、これらは出力周辺インターフェイス１９５を通じて接続することができる。
【００２７】
コンピュータ１１０は潜在的に、リモートコンピュータ１８０など、１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作する。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他の共通ネットワークノードとすることができ、通常は、コンピュータ１１０に関連して上述した要素の多くまたはすべてを含むが、図１にはメモリストレージデバイス１８１のみを例示した。図１に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含むが、他のネットワークを含むこともできる。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
【００２８】
ＬＡＮネットワーキング環境において使用するとき、コンピュータ１１０は、ネットワークインターフェイスまたはアダプタ１７０を通じてＬＡＮ１７１へ接続される。ＷＡＮネットワーキング環境において使用されるとき、コンピュータ１１０は通常、モデム１７２、またはインターネットなどのＷＡＮ１７３を介して通信を確立するための他の手段を含む。モデム１７２を内蔵または外付けとすることができ、ユーザ入力インターフェイス１６０または他の適切なメカニズムを介して、システムバス１２１へ接続することができる。ネットワーク化された環境では、コンピュータ１１０に関連して示したプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに格納することができる。限定ではなく、例として、図１には、リモートアプリケーションプログラム１８５をメモリデバイス１８１上に存在するものとして示す。図示したネットワーク接続は例示的であり、説明する周辺デバイスドライバ管理スキームを実行するための他の手段を使用することができることは理解されよう。
【００２９】
図２は、本発明の例示的な一実施形態によるネットワーク化された周辺デバイス（例えば、プリンタ）のドライバ管理構成に係るネットワークエンティティのセットを含む例示的なネットワークを示している。例示的なコンピュータネットワーク環境２００は、ログオンされたユーザに代わってアプリケーションプログラムを実行するクライアントマシン２０２（１〜ｎ）のセットを含む。クライアントコンピュータ（ｎ）の数は一般に、少数のコンピュータから数百、または場合によっては数千の程度である。このようなネットワークは考えるに、実質的にいかなる数の追加のクライアントマシンに対してもネットワークを開放するワイドエリアネットワークのリンクを含む。クライアントマシン２０２は、ネットワークプリンタドライバを通じて、プリント機能（例えば、方向、解像度、プリントモードなど）を構成し、ネットワークリンク２１０を介して、プリントリクエストをプリントサーバ２０４および２０５によって維持管理されたプリントキューに提出する。プリントサーバ２０４および２０５はプリントリクエストをクライアントマシン２０２によって使用されるプリンタドライバに対応するプリンタドライバを使用して処理して、リクエストを特定のプリントキューに提出する。プリントサーバ２０４および２０５は、特定のキューと関連付けられたプリンタドライバを利用して、プリントジョブが取り出されたプリントキューに対応する適切なプリンタにプリントジョブをレンダリングする。その後、プリントサーバ２０４および２０５は、レンダリングされたプリントジョブを、ネットワークリンク２１０を介して、クライアントマシン２０２の代わりに、ネットワーク化されたプリンタ２０６および２０８のセットのうち（クライアントの元のプリントリクエストに従って）適切な方に渡す。プリンタ２０６および２０８はその後、レンダリングされたプリントジョブをプリントサーバ２０４および２０５から受け取り、プリンタ２０６および２０８は、プリントされたドキュメント出力を生成する。
【００３０】
クライアントマシン２０２のクライアントコンピュータは、本発明の一実施形態では、プリントリクエストを、そのプリントリクエストが仕向けられたプリントサーバ（例えば、２０４または２０５）と関連付けられた、適切なネットワーク化されたプリンタドライバコンポーネントを最初にインストールおよびアクティブ化した後に発行する。本発明の一実施形態では、このようなコンポーネントは、ネットワーク２００上の集中ドライバストレージ２１２内に、最初はドライバパッケージの形態（本明細書の以下で図４ａおよび４ｂを参照して論じる）で維持管理される。集中ドライバストレージ２１２は、ドライバ（圧縮解除されたコンポーネントを含む）およびメタデータをパッケージからレンダリングする。メタデータは、パッケージ内のパッケージおよびドライバ（それぞれは潜在的に多くのコンポーネント／ファイルを備える）を、（１）同じパッケージ／ドライバの異なるバージョン間、または（２）異なるデバイスドライバに対応する同一の名前の付けられたファイル間で区別するための十分な詳細により識別する。
【００３１】
クライアントマシン２０２は、本発明の一実施形態では、クライアントマシン２０２のそれぞれによって維持管理されたアクティブドライバストア３０２に格納された、ドライバおよびドライバの構成ファイルを区別する。ネットワークデバイスドライバを集中ドライバストレージ２１２から（あるいは、プリントサーバ２０４および２０５の一方のように、必要とされるドライバと関連付けられたコンポーネント／ファイルの完全なセットが入っている他の任意のネットワークデバイスを介して間接的に）インストールすることと関連して、クライアントマシン２０２は、各別個のドライバについて、別々のコンテナ（例えば、ディレクトリ）を作成する。各ドライバコンテナに割り当てられた別個のラベルは、少なくとも部分的には、ドライバと関連付けられた署名情報からレンダリングされる。このような署名情報は、本発明の代替の実施形態において種々の形態を有する。
【００３２】
上述のネットワーク環境は、本発明が都合よく組み込まれる例示的なコンピュータネットワーク環境を示す。当業者には容易に理解されるように、本発明は、ネットワーク化された周辺デバイスのクライアントが、潜在的に重複する構成ドライバのファイル名を有する複数のアクティブドライバ（同じドライバの複数のバージョンを含む）を維持管理することが、必要でなければ、望まれる様々な場合に適用可能である。このような例示的なネットワーク環境を説明したが、周辺デバイスドライバパッケージの内容、パッケージの処理、ならびにパッケージから抽出されたドライバの配布および維持管理は、本明細書の以下で本発明の例示的な実施形態に従って論じる。
【００３３】
ここで図３を参照すると、ドライバストレージ構成におけるドライバおよび／またはドライバ情報の３つの表現が識別される。ドライバパッケージストア３００は、ドライバパッケージの完全なコピーを、例えば、メーカによってそれらが出荷される形態で格納する。このパッケージは、複数のコンピューティング環境をサポートする複数のドライバ、および本質的に同じドライバの異なるバージョン（例えば、追加／修正された機能および／またはバグ修正を含む、同じドライバの連続的リリース）を含むであろうことが、一般に企図される。ドライバパッケージストア３００は、本発明の一実施形態では、集中ドライバストレージ２１２上に位置する。しかし、ドライバパッケージストア３００は、クライアントマシン上にもサーバ上にも位置することができる。いずれの場合も、本発明の実施形態では、ドライバパッケージストア３００は分散ファイルシステムのパブリックディレクトリ（ファイル共有）に配置される。スペースを節約して使うために、ドライバパッケージの内容が圧縮される。ドライバパッケージストア３００の例示的なバージョンの構成要素について、さらに本明細書の以下で図４ａおよび４ｂを参照して説明する。
【００３４】
本発明の一実施形態では、ドライバファイルがドライバパッケージストア３００のパッケージから抽出され、アクティブドライバストア３０２内に入れられる。一般にネットワーク内のサーバおよびクライアント上で見つけられるアクティブドライバストア３０２は、ロードされ、圧縮解除されたドライバファイルを維持管理するためのディレクトリ構造である。本発明の一実施形態では、アクティブドライバストア３０２のドライバファイルは、ネットワーク上の他のクライアントおよびサーバマシンによってアクセス可能である分散ファイルシステム共有内で維持管理される。このような実施形態では、クライアントまたはサーバマシン上のアクティブドライバストア３０２は、マシンのストレージスペース内の他の非パブリックのコンポーネントから分離される。例示的なドライバストア３０２の形態および機能を、本明細書の以下で図５ａおよび５ｂを参照して説明する。
【００３５】
ネットワーク化された周辺デバイスドライバ維持管理フレームワークの一実施形態では、メタデータストア３０４は、キーベースの構成をサポートし、ならびに、ローカルマシン上にロードされ、および／またはローカルマシンに利用可能なドライバを検索するデータベースを備える。メタデータストア３０４は、本発明の一実施形態では、各ドライババージョンについて、特定のドライババージョンを構成するコンポーネントのセットをリストするマニフェストも含む。キー検索可能なフィールドの例には、例として、環境、製造業者、ドライバおよびパッケージが含まれる。例示的データベーススキーマを、本明細書の以下で図６を参照して説明する。
【００３６】
図４ａを参照すると、ドライバパッケージストア３００のドライバパッケージは様々な形態を取ることができる。しかし、例示的な実施形態では、ドライバパッケージは３つの主要な部分を含み、これらはＩＮＦファイル４００、ＣＡＴファイル４１０、および圧縮されてＣＡＢファイル４２０に入れられるドライバソースファイルである。ＩＮＦファイル４００は、ドライバパッケージの内容を記述する。本発明の一実施形態では、ＩＮＦファイル４００は、パッケージＩＤおよびバージョンによってパッケージを識別する一意のＩＤを含み、同じドライバパッケージの複数のバージョン間で区別し易くする。バージョンは、例として、ＩＮＦファイル４００のドライババージョンフィールド内に挿入されたタイムスタンプ（年／月／日）によって指定される。あるいは、特定のパッケージバージョンの一意のＩＤが、ＣＡＴファイル４１０、またさらにはＣＡＢファイル４２０内の署名情報のハッシングから生成される。さらの他の例では、バージョンは、メジャー／マイナーバージョンおよびバグ修正リリースを識別する複数のセグメントを備える、形式化されたバージョンコードである。情報を識別する適切なバージョンの数および種類からも明らかなように、本発明は、同一の識別バージョン値を有する２つのパッケージが本当に同じパッケージであるという高い確実性を提供するパッケージ関連データ／メタデータを使用することを企図する。このような識別は、本明細書で「厳密名（ｓｔｒｏｎｇ  ｎａｍｅ）」と称する。
【００３７】
ＩＮＦ４００は、ドライバパッケージのＣＡＴファイル４１０にアクセスするためのインストーラへの指示を含む。ＣＡＴファイル４１０は、パッケージを認証する一意の署名を含む。ＣＡＴファイル４１０は、限定ではなく、例として、署名が有効であるプラットフォームおよび署名を作成するために使用された証明書を識別するメタデータも含む。ＣＡＴファイル４１０の識別に加えて、ＩＮＦファイル４００は、１つまたは複数のドライバアセンブリ、すなわち、特定のドライババージョンを構成する関連ファイルのグループをレンダリングするために、ドライバパッケージ内でファイルを構成する方法を記述する。ＩＮＦはプラグアンドプレイＩＤも含む。本発明の一実施形態では、実際のドライバファイルは、ＣＡＢ（「キャビネット」）ファイル４２０において圧縮された形態で提供される。
【００３８】
以下は、ＩＮＦファイル４００の簡単な例である。  
[Version]
PackageID={packageGUID};パッケージ内容を識別する
DriverVer=mm/dd/yyyy   ;改訂を識別する（このバージョンをパッケージの他のバージョンから区別する）
[Manufacturer]
%FooCorp%=Foo,NT.5.1,NT.6.0;これらはTargetOsVersion IDである
[Foo]
;Win２kセクション
CopyFiles=@unidrv.dll,...
[Foo.NT.5.1]
<XP（NT 5.1）セクションは、必ずしもW2kとは異ならず、W2kと区別不可である場合、省略することができる>
[Foo.NT.6.0]
;NT 6.0セクション、以前のオペレーティングシステムのバージョンによって無視される
InstallPackage=InfName;現在のdirに関して参照されたINF
Manifest=foo.manifest
【００３９】
例示的なＩＮＦは、３つの別個のオペレーティングシステムの指示を含む。第３のもの（Foo．NT．6.0）は、ファイルをパッケージからロードすることに関する、追加のメカニズムを利用する。「InstallPackage」は、現在のパッケージと共にインストールされるべき別のパッケージのＩＮＦを識別する。コンポーネント（．ＮＥＴアセンブリは特定の例である）は、ドライバのビルディングブロックであり、複数のファイルおよび他のコンポーネントさえも備えることができる。Manifestはドライバの厳密名、およびドライバコンポーネント（例えば、．ＮＥＴアセンブリ）の厳密名を収容する。
【００４０】
本発明の一実施形態では、Ｕｎｉｄｒｖのみが入っているパッケージがサポートされ、ＩＮＦはその情報を運搬する。本発明の一実施形態では、これらのニーズは、“CompName”=CompGUIDを含むセクションタグ[PrintSoftwareComponents]によって達成される。あらゆるコンポーネントは、CompGuidという名前のセクションで記述される。
例えば、
[CompGuid]
CopyFiles=@Unidrv.dllなど
DriverVer=mm/dd/yyyy;オプションで、[Version]セクションとは異なる場合、必要とされる
【００４１】
パッケージはドライバパッケージストア３００内の構成可能な位置に格納される。デフォルトでは、ドライバパッケージストアは、ローカルマシン（例えば、集中ドライバストレージ２１２）上に存在する。しかし、本発明の一実施形態では、ドライバパッケージストア３００の内容は、他のネットワーク化されたマシンに対してアクセス可能にされる。このようなアクセス性は、例として、ネットワーク上の他のマシンに公開されている分散ファイルシステム共有上にパッケージストア３００を配置することによって、達成される。
【００４２】
図４ｂを参照すると、階層ツリー図がＩＮＦファイル４００によって指定されるように、ドライバパッケージストア３００内のドライバコンテナ（例えば、パッケージ、ドライバ、アセンブリなど）およびファイルの階層構成／関連を示している。異なるドライバアセンブリにおいて複数回使用されるファイルの場合、メモリを節約して使うために、単一のコピーが潜在的にパッケージ内に格納され、単一のドライバコピーへのリンクがパッケージ内に格納されることに留意されたい。あるいは、ファイルの完全なコピーが、それが関連付けられているアセンブリ毎に格納される。
【００４３】
共有ドライバパッケージストア３００の最高次のレベルで、ドライバパッケージコンテナ４５０が共有ディレクトリのルートに対応する。次のレベルで、パッケージＧＵＩＤ区切りパッケージコンテナ４６０、４６２および４６４のセットが、一意に識別されたパッケージ（パッケージ毎に別個のＧＵＩＤによって区別される）の潜在的に複数のバージョンを保持する。例示的な実施形態では、パッケージコンテナ４６０は、２つのパッケージ４７０および４７２を保持し、それぞれは、図４ｂで表現されたディレクトリ構造において、各特定のパッケージバージョンに割り当てられた厳密名（例えば、パッケージの日付）によって一意に識別される。本発明の一実施形態では、厳密名ではなくＧＵＩＤ＋バージョンの手法が使用され、図４ｂに示す階層ツリーは、以下のディレクトリ構成に対応する。
【００４４】
Root￥｛PackageGUID1｝￥PackageDate1￥  ：第１のパッケージの１つのバージョンを収容
Root￥｛PackageGUID1｝￥PackageDate2￥  ：第１のパッケージのより新しいバージョンを収容
Root￥｛PackageGUID2｝￥PackageDate3￥  ：第２のパッケージのバージョンを収容
...
Root￥｛PackageGUIDn｝￥PackageDate4￥  ：ｎ番目のパッケージのバージョンを収容
【００４５】
本発明の一実施形態では、パッケージ日付のフォーマットはｙｙｙｙｍｍｄｄである。さらに他の例示的な一実施形態では、厳密名、または、さらにＧＵＩＤ値だけが、ドライバパッケージバージョンを識別／区別するために使用される。
【００４６】
さらに、図４ｂに示すように、特定のドライババージョン（一意の識別子名によって識別される）を構成するコンポーネントを指定するドライバマニフェストなどの非ドライバコンポーネント固有のファイルを収容することに加えて、パッケージ４７２は、ドライバコンポーネントＡおよびドライバコンポーネントＢについて、ドライバコンポーネント固有のコンテナ４８０および４８２をそれぞれ指定する。あるいは、各ドライバにはそれ自体のコンテナが与えられる（しかし、これは、コンポーネントがパッケージの多くの異なるドライバに共通である場合、より望ましくない）。本発明の一実施形態では、ドライバコンポーネント固有のコンテナ４８０および４８２は、モデルおよびプロバイダＧＵＩＤ（ＭＰＧ：  Ｍｏｄｅｌ  ａｎｄ  Ｐｒｏｖｉｄｅｒ  ＧＵＩＤ）の組合せによって指定され、このＭＰＧは、例えば異なるドライバソフトウェアのプロバイダによって配布される、同じ名前を有するドライバコンポーネントを区別する。ドライバコンポーネント固有のコンテナ４８０（ドライバＡ）は、ドライバコンポーネントＡのバージョン１および２に対応する２つのバージョンコンテナ（例えば、アセンブリ）４９０および４９２を備える。アセンブリは、本発明の一実施形態では、ドライバの機能を履行するために１つにグループ化された１つまたは複数のファイルのセットを収容する。
【００４７】
本発明の例示的な実施形態では、ドライババージョンを他のドライババージョンから区別する、ドライババージョンの少なくとも一部（例えば、コンポーネント）が、別々の、別個にラベル付けされたコンテナに格納される。この構成により、ネットワーク化された周辺デバイスクライアントは、ドライバの複数の別個のバージョンをサポートすることができる。本発明の特定の実施形態では、ドライバコンポーネントの特定のバージョンを構成するファイルが、アセンブリの形態で一緒にグループ化される。各アセンブリは、別個にラベル付けされたコンテナ（例えば、ディレクトリサービスのサブディレクトリ）に割り当てられ、同じドライバの異なるバージョンと関連付けられたアセンブリに、異なるラベルが割り当てられるようにする。
【００４８】
ドライバコンポーネント（例えば、アセンブリ）バージョンは、各ドライバアセンブリコンテナを一意の識別子名で、すなわち、特定のドライバの２つの異なるバージョン間で区別する高い可能性を達成する任意の適切な識別子でラベル付けすることによって、区別される。特定の例示的な実施形態では、一意の識別子名は．ＮＥＴの厳密名である。厳密名は、特定のドライババージョンの少なくとも一部を構成する関連ドライバファイルのグループ（例えば、アセンブリ）に割り当てられたバージョンの日付を備える。あるいは、バージョンは、ａ．ｂ．ｃ．ｄの形態で表示される６４ビット値の形態で提供され、ここで、ａ．ｂ．は機能バージョン番号を意味し、ｃ．ｄ．はバグ修正番号を意味する。さらに他の実施形態では、厳密名は、ドライババージョンを他のドライババージョンから区別する情報について行われたチェックサムまたはハッシングオペレーションに基づく。
【００４９】
図５ａを参照すると、一般にネットワーク内のサーバおよびクライアント上で見つけられるアクティブドライバストア３０２は、ロードされ、圧縮解除されたドライバファイル５０２およびマニフェスト情報５０４を維持管理するディレクトリ構造である。本発明の一実施形態では、２つのタイプのマニフェストが使用され、これらは、（１）コンポーネントマニフェストがコンポーネントの内容を記述し（例えば、コンポーネント、および他の任意の必要とされるコンポーネント、を構成するファイルを識別する）、（２）ドライバマニフェストがドライバのコンポーネントを記述する（必要とされるコンポーネントのみであり、ファイル情報ではない。これはドライバ自体が、コンポーネントの一部ではないいかなるファイルも有していないからである）。本発明の一実施形態では、各ドライバコンポーネントの各バージョンに、アクティブドライバストア３０２内でそれ自体の一意に識別されたコンテナ（例えば、サブディレクトリ）が割り当てられる。さらに、アクティブドライバストア３０２はコンポーネント毎のマニフェスト情報５０４を含み、これは、アクティブドライバストア３０２内で維持管理された各特定のドライバコンポーネントバージョン（コンテナ）と関連付けられたファイルのグループを記述／列挙する。
【００５０】
本発明の一実施形態では、マニフェスト情報５０４は、アクティブドライバストア３０２においてドライババージョンを構成するコンポーネントを識別する、一意の識別子によって（各ドライババージョンについて）ラベル付けされたファイル内のリストも含む。各特定のドライババージョンには、それ自体の一意に識別されたコンテナ（例えば、ファイル）が提供され、これはドライババージョンのコンポーネントを列挙するドライバマニフェストのみ（他のファイルではない）を収容する。ドライバマニフェストコンテナ（ファイル）は、本発明の一実施形態では、アクティブドライバストア３０２内に、あるいは代替の実施形態では、ある他の適切な位置（メタデータストア３０４内のドライババージョンテーブルを含む）に位置する。各ドライバ／コンポーネントコンテナについての一意の識別子名は、例として、ドライバ／コンポーネントバージョンから抽出可能な特性データのいずれかの組合せに基づいて作成されて、同じドライバ／コンポーネントの２つの異なるバージョンが異なるコンテナ名を有することを確実にする一意の名前である。本明細書で上述したように、このような一意の識別子名の例は、（１）厳密名、ならびに（２）モデルおよびプロバイダＧＵＩＤ（ＭＰＧ）およびバージョンの組合せである。
【００５１】
本発明の一実施形態では、特定のドライバについてのコンテキストを設定するためのバージョニング情報が入っているコンポーネント記述は、特定のドライバコンポーネントバージョンをアクティブドライバストア３０２に格納するときにマニフェスト情報５０４に格納される。その後、特定のドライバを使用するサービスまたはアプリケーションは、ドライバコンポーネントファイルをロードする前に、マニフェスト情報５０４に基づいてコンテキストを設定する。コンテキスト（またの名を「アクティベーションコンテキスト」）は、システムがアプリケーションをリダイレクトして特定のファイルバージョン／アセンブリをロードするために使用することができる情報が入っているメモリ内のデータ構造である。この場合、これはドライバのマニフェストファイルから作成される。コンテキストは、ファイルの潜在的に多くのバージョン（例えば、ＤＬＬ）のどれが特定のドライババージョンに使用されるべきであるかを規定する。コンテキストは、例えば、アドミニストレータによって上書きすることができる。
【００５２】
以下は、アクティブドライバストア３０２のドライバファイル５０２にある２つの別個のサブディレクトリコンテナに割り当てられた、特定のドライバコンポーネント／アセンブリ（２つの関連ファイルを備える）の２つのバージョンについての、２つのマニフェスト情報５０４エントリを表す。
Assembly 1: Foo.dll(v x.y)
Fooui.dll(v a.b)
Assembly 1': Foo.dll(v x.y')
Fooui.dll(v a.b')
....
【００５３】
Assembly 1'は、Foo.dllおよびFooui.dll両方の異なるバージョンを有する。本発明の一実施形態では、特定のドライバコンポーネントの２つのファイルのセット間のいかなる違いも、ドライバファイル５０２のサブディレクトリに対応する、それら自体の別個のマニフェストを有する別個のコンポーネント（アセンブリ）を確立する結果となる。
【００５４】
本発明の一実施形態では、アクティブドライバストア３０２のドライバファイル５０２が、ネットワーク上の他のクライアントおよびサーバマシンによってアクセス可能である分散ファイルシステム共有において維持管理される。このような実施形態では、クライアントまたはサーバマシン上のアクティブドライバストア３０２は、マシンのストレージスペース内の他の非パブリックのコンポーネントから分離される。分散ファイルシステムj共有のドライバファイル５０２の構成は、マニフェスト情報５０４によって識別されたアセンブリに対応する。
【００５５】
図５ｂを参照すると、図は、本発明が特に有用である例示的な場合、すなわち、クライアント５４０が、同じドライバ（「Ｆｏｏ」）の２つの異なるバージョン（「ｘ」および「ｙ」）を実行している第１のサーバ５５０および第２のサーバ５６０への２つの異なる接続を維持管理する場合を例示的に示している。例示的な場合では、クライアント５４０はその能力を利用して、ドライバＦｏｏのバージョンｘ５５５およびドライバＦｏｏのバージョンｙ５６５両方を同時にアクティブ状態で維持管理し、これは、対応するネットワーク化された周辺デバイス５７０および５８０と関連付けられた周辺デバイス設定を取り扱うときに、サーバ５５０（ドライババージョンｘ５５６を実行中）およびサーバ５６０（ドライババージョンｙ５６６を実行中）両方との完全な同時互換性を達成するためである。このような設定は、サーバ５５０および５６０の設定５５７および５６７でそれぞれ永続化される。永続化された設定５５７および５６７のコピーが、クライアント５４０上で維持管理された設定５５８および５６８にそれぞれコピーされる。完全なドライババージョンの互換性を維持管理することができ、潜在的にクライアント５４０がサーバ５５０および５６０上の設定５５８および５６８を解釈できないことになる。
【００５６】
図６を参照すると、データベーススキーマは、例示的なドライバ管理機能のメタデータストア３０４の例示的な構成を示す。本明細書で上述したように、メタデータストア３０４は、少なくともクライアントマシン上で維持管理され、マシン上にロードされたアクティブドライバを正しい順序で要約する。メタデータストア３０４は、本発明を履行するために必須ではない。しかし、それがあることにより、ネットワーク環境で周辺デバイスドライバの大規模な集まりを管理するために都合の良い方法を提供する。本発明の一実施形態では、メタデータストア３０４はスプーラサービスによって管理される。
【００５７】
図６で要約された例示的なデータベーススキーマは、以下のように構成／アクセスされる。Packagesテーブル６００内のエントリは、「PackageID」を提出することによって、CompPackLookup関数６１０によって参照される。Packagesテーブル６００内のエントリのために提供されたサブフィールドは、各識別されたパッケージについてpackageGUID、バージョンおよびINFNameを含む。
【００５８】
CompPackLookup関数６１０は、「ComponentID」を通じてComponentsテーブル６２０内のエントリにもアクセスする。コンポーネントが列挙されるとき、これらにはEnvID、ComponentGUID、ComponentNameおよびVersionが含まれる。EnvIDフィールドは、Environmentsテーブル６３０上の検索キーとして使用することができる値を提供する。Environmentsテーブル６３０は、識別されたEnvironments（例えば、Ｗｉｎｄｏｗｓ（登録商標）ＮＴ  ｘ８６、Ｗｉｎｄｏｗｓ（登録商標）ＮＴ  ＩＡ６４など）について対応するEnvNameを含む。
【００５９】
他の企図されたテーブルエントリ検索関数は、PhysDriverComponentLookup関数６４０である。PhysDriverComponentLookup関数６４０は、ComponentID検索キーを通じてComponentsテーブル６２０のエントリにアクセスした。PhysDriverComponentLookup関数６４０は、PhysDriverID検索キーを通じてPhysicalDriversテーブル６５０にもアクセスする。PhysicalDriversテーブル６５０の物理ドライバエントリが列挙されるとき、これらには論理的driverID、EnvIDおよびlanguageIDが含まれる。EnvIDフィールドは、Environmentsテーブル６３０を検索するための値を提供する。さらに、論理的driverIDフィールドは、LogicalDriversテーブル６６０を検索するための値を提供する。本発明の一実施形態では、PhysicalDriversテーブル６５０はまた、一意に識別された物理ドライバ／バージョンの各組合せのドライバマニフェストリストも格納する。
【００６０】
このように、本発明の一実施形態では、論理ドライバは、特定のプラットフォームのコンパイルされたドライバから抽出された、あるいは特定のユーザ言語（例えば、英語）にローカライズされたドライバを参照する。物理ドライバは、それがコンパイルされた特定の識別された環境（例えば、「Ｗｉｎｄｏｗｓ（登録商標）ＮＴ  ｘ８６」、「Ｗｉｎｄｏｗｓ（登録商標）ＮＴ  ＩＡ６４」）、そして場合によっては、それがローカライズされた言語に付加される。識別された物理ドライバは潜在的に、いくつかのコンポーネント（例えば、ＨＰ  ＬａｓｅｒＪｅｔ  ４カスタマイゼーション、ｓＲＧＢプロファイルおよびＵｎｉｄｒｖ）を含む。すべてのコンポーネントが特定の環境（例えば、イメージカラー管理（ＩＣＭ）プロファイルまたはＧＰＤ（ｇｅｎｅｒｉｃ  ｐｒｉｎｔｅｒ  ｄｅｓｃｒｉｐｔｉｏｎ））に依存性を有するとは限らないことに留意されたい。
【００６１】
LogicalDriversテーブル６６０のエントリには、ドライバ名（DriverName）、製造業者ＩＤ（ManuID）、プラグアンドプレイＩＤ（PnpID）、バージョン（Version）およびプロバイダＩＤ（ProviderID）が含まれる。製造業者ＩＤは、Manufacturersテーブル６７０内のエントリを参照する。Manufacturersテーブル６７０のフィールドには、例として、名前（Name）フィールドおよびＵＲＬフィールドが含まれる。
【００６２】
メタデータストア３０４データベースは、本発明の一実施形態では、ドライバストレージを提供するサービスの最初のブートで作成される。本発明の一実施形態では、プリントスプーラがこのようなサービスを提供する。他の場合では、専用ドライバ管理サービスが使用される。メタデータストア３０４データベースは、オペレーティングシステムのコピーと共に提供されたＩＮＦの内容から取り込まれる。あるいは、ビルドプロセスを複雑にすることを犠牲にして事前に満たされたデータベースをビルドにロードする（データベースの情報がＩＮＦの情報に冗長であるとき、これは新しいビルド後のステップとなるであろう）。
【００６３】
パッケージテーブルに関して、上で説明したように、PackageID（パッケージのＩＮＦによって提供される）を、実質的に同じパッケージの２つのバージョンの間で区別するために信頼できるように使用することはできず、これはPackageIDが、原則として、パッケージ全体におけるあらゆる変更と共に変更されない（ＩＮＦが変更されない限り）からである。その代わりに、ＩＮＦによって設定されたPackageIDは、パッケージが作成されると、（バージョンの間で）変更されない。このように、パッケージに格納されたDriverVerエントリは、同一のPackageID値を有するパッケージの２つのバージョンの間を区別するために使用される。
【００６４】
ネットワーク環境のクライアントによって使用するための周辺デバイスドライバ維持管理機能の基礎となる構成を説明したが、本明細書で説明した基礎となるフレームワークを使用して実行されるシステムの機能インターフェイスおよび例示的な方法に注意を向ける。最初に図７を参照すると、パッケージおよびドライバをロード／インストールするための、例示的な（プリンタドライバ関連の）アプリケーションプログラムインターフェイス（ＡＰＩ）のセットが識別される。ＡＰＩは、例として、リモートプロシージャコールのヘルパライブラリを使用して実装される。結果として、すべての周辺デバイスプロバイダが関数を実装する必要はない。
【００６５】
（UploadPrinterDriverPackage()ＡＰＩ７００）
UploadPrinterDriverPackageＡＰＩ７００は、プリンタドライバパッケージのアップロードを容易にする。UploadPrinterDriverPackageＡＰＩ７００は非同期ＡＰＩである。以下は、UploadPrinterDriverPackageＡＰＩ７００の例示的な形態である。
【００６６】
【表１】
2004303252.tif 000003
【００６７】
以下には、リサイトされた（ｒｅｃｉｔｅｄ）パラメータの特徴を示す。  
pszServerは、パッケージがアップロードされるべきサーバのフルネーム（ｆｕｌｌ  ｎａｍｅ）である。サーバがクラスタ内にある場合、このパラメータはクラスタ名から始める。
【００６８】
pszINFPathは、プリンタドライバパッケージを生成するために処理されるＩＮＦファイルの完全なパスおよび名前（ｆｕｌｌ  ｐａｔｈ  ａｎｄ  ｎａｍｅ）である。ＩＮＦの処理はクライアント側で行われ、ＩＮＦファイルがサーバからアクセス可能でない場合、例えば、ＩＮＦファイルがＣＤ上にあり、ＣＤリーダがクライアントマシン上で外部共有（ｓｈａｒｅｄ  ｏｕｔ）されていないときなどに生じる問題を回避する。ＩＮＦファイルが構文解析（ｐａｒｓｅ）され、参照されたすべてのファイルのリストが用意される。各ファイルが、完全パスと共にリストに提示される。このリストがサーバに送信され、対応するファイルがそこにアップロードされる。パッケージをサーバ上にアップロードするための場所は、サーバ上の以下のレジストリキーのDriverStorageShareName値を読むことによって見つけられる。
【００６９】
SYSTEM￥￥CurrentControlSet￥￥Control￥￥Print￥￥DriverStorageRoot−これは例として、プリントサーバのアドミニストレータによってユーザインターフェイスを通じて構成することができる。
【００７０】
先に上で説明したように、各パッケージは、一意にラベル付けされたサブディレクトリに割り当てられる。本発明の例示的なこの実施形態では、ＧＵＩＤが、アップロードされたパッケージについて生成され、パッケージＧＵＩＤを使用して、DriverStorageShareName下でディレクトリ名を作成する。そのディレクトリ下でサブディレクトリが作成され、これは次のフォーマット、すなわちＹＹＹＹＭＭＤＤを有し、ただし、ＹＹＹＹ、ＭＭおよびＤＤはパッケージの現在のバージョンの年、月および日である。すべてのパッケージファイルがそのサブディレクトリ下でコピーされる。パッケージツリーのディレクトリ構造は、パッケージのＩＮＦファイルにより提供される構造によって指示される。
【００７１】
dwFlagsは、ＡＰＩの振る舞い（ｂｅｈａｖｉｏｒ）を修正するためのメカニズムを提供する。例えば、dwFlagsの値が0x01に等しい場合、パッケージがすでにサーバ上に存在すれば、アップロード中に上書きされ／置き換えられることになる。dwFlagsパラメータは、パッケージのためのプラットフォームも設定する。
【００７２】
hEventは、コール側によって提供されたイベントハンドラである。アップロードジョブが行われるとき、対応するイベントがシグナル通知される。hEventがNULLである場合、コールは同期コールに変換される。
【００７３】
pErrorはHRESULTへのポインタであり、これは、非同期コールから戻された値が書き込まれる所である。その値は、hEventがシグナル通知された後に有効となる。
【００７４】
pdwCancelIdはDWORD値へのポインタであり、これを使用して、UploadCancelＡＰＩ（本明細書で後述）へのコールを経由して非同期UploadPrinterDriverPackageをキャンセルすることができる。pdwCancelIdの値は、UploadPrinterDriverPackageが戻った直後に有効である。
【００７５】
pPackageIdは、以下のタイプのPackageId構造へのポインタである。
【００７６】
【表２】
2004303252.tif 000004
【００７７】
非同期コールが完全であるとき、それがポイントする構造は、パッケージのＧＵＩＤおよび時間を収容することになる。受け取ったDRIVER_PACKAGE_IDは、パッケージのサブディレクトリにラベルを付けるために使用される。
【００７８】
（InstallDriverFromPackage()ＡＰＩ７１０）
InstallDriverFromPackage()ＡＰＩ７１０は、インストールされたパッケージからのドライバをインストールする。フラグパラメータは、インストールするドライバのタイプを指定する（プリンタドライバ、ポートモニタ、プリントプロセッサなど）。インストレーション方法は、メタデータストア３０４およびマニフェスト情報５０４を更新して、新たにインストールされたドライバを反映する。インストールされたドライバのコンポーネントがアクティブドライバストア３０２にまだ存在していない限度で、新しいサブディレクトリが追加され、新しいコンポーネントが新しいコンポーネントコンテナに格納される。以下は、InstallDriverFromPackageＡＰＩ７１０の例示的な形態である。
【００７９】
【表３】
2004303252.tif 000005
【００８０】
上記で要約されたＡＰＩでは、以下の通りである。  
PszServerは、サーバの名前を指定する。NULLの値は、ドライバをローカルパッケージストアからインストールするために使用される。本発明の一実施形態では、ドライバパッケージは識別されたpszServerによって定義されたマシン上にUploadPrinterDriverPackageＡＰＩ７００と共に以前インストールされていることに留意されたい。
【００８１】
PackageIDは、プリンタドライバをインストールしたいと望むインストールされたパッケージを規定する。PackageIDの値は、UploadPrinterDriverPackageＡＰＩ７００によって戻される。
【００８２】
PszModelNameは、プリンタドライバの名前である。識別されたプリンタドライバは、PackageIDによって定義されたパッケージ内に存在しなければならない。
【００８３】
PszEnvironmentは、ドライバがインストールされることになる環境である。本発明の一実施形態では、文字列名が使用される。このような文字列の例には、「Windows（登録商標） NT x86」、「Windows（登録商標） IA64」および「Windows（登録商標） NT AMD64」が含まれる。
【００８４】
DwVersionは、インストールされるドライバのバージョンを指定する。  
DwFlagsは、ＡＰＩのデフォルトの振る舞いへのカスタマイゼーションを指定し易くする。
【００８５】
例示的なフラグは、周知のAddPrinterDriverＡＰＩの対応物から導出することができ、これには以下が含まれる。
【００８６】
【表４】
2004303252.tif 000006
【００８７】
AddPrinterDriverのいくつかのフラグは、InstallDriverFromPackageＡＰＩ７１０に対応物を有していない。これらは以下の通りである。
【００８８】
APD_COPY_FROM_DIRECTORY−これは、DRIVER_INFO_6構造を渡さないので、必要とされない。
【００８９】
APD_RETURN_BLOCKING_STATUS_CODE−下のレベルのクライアントはこの関数をコールしないので、このＡＰＩは常にブロッキングコードを戻すため。
【００９０】
APD_DONT_SET_CHECKPOINT−署名されていないドライバのインストレーションが試みられる場合、このＡＰＩは常にチェックポイントを設定するため。
【００９１】
本発明の一実施形態では、フラグのセットには、どのコンポーネントをＩＮＦからインストールするかについてのより大きいコントロールをコール側に与えるフラグが含まれる。これらのフラグには以下が含まれる。
【００９２】
【表５】
2004303252.tif 000007
【００９３】
署名されていないドライバは、以下のようにInstallDriverFromPackageＡＰＩ７１０によって取り扱われる。  
・インストレーションがリモートで起こる場合、失敗する。  
・ユーザがアドミニストレータでない場合、失敗する。  
・ユーザがアドミンである場合、インストレーションは、ＰｎＰがサーバ側／クライアント側インストレーションで行うことに類似して、ユーザのコンテキスト内でリトライされる。
【００９４】
（GetDriverStorageRoot７２０）
GetDriverStorageRoot７２０関数は、サーバがドライバパッケージストア３００のドライバパッケージを格納するルート位置を見つけるためにコールされる。パッケージストアルートの位置は、本発明の一実施形態では通常、アドミニストレータによって設定される。GetDriverStorageRoot７２０関数の形態は、例として、以下の通りである。
【００９５】
【表６】
2004303252.tif 000008
【００９６】
pszServerは、ドライバパッケージストア３００が存在するサーバのフルネームである。サーバがクラスタ内にある場合、フルネームはクラスタの名前から始まる。
【００９７】
ppDStorageRootBufferは、ドライバストレージルートへのパスを含む、バッファのアドレスが書き込まれることになるポインタへのポインタである。本発明の一実施形態では、パスはゼロで終了される（ｚｅｒｏ  ｔｒｅｍｉｎａｔｅｄ）。そのバッファのメモリは、このＡＰＩによって割り当てられる。コール側は、LocalFreeＡＰＩへのコールを経由してバッファを解放する責任がある。
【００９８】
（GetPrinterPackageInfo７３０）
GetPrinterPackageInfo７３０関数により、クライアントがパッケージ情報の列挙をリクエストすることができる。以下は、GetPrinterPackageInfo７３０関数の例示的な形態である。
【００９９】
【表７】
2004303252.tif 000009
【０１００】
（UploadCancel７４０）
UploadCancel７４０関数は、UploadPrinterDriverPackageＡＰＩ７００への以前に呼び出された非同期コールをキャンセルする。以下は、UploadCancel７４０関数の例示的な形態である。
【０１０１】
【表８】
2004303252.tif 000010
【０１０２】
dwCancelIdは、キャンセルされるべきUploadPrinterDriverPackageＡＰＩ７００へのコールによって戻される識別子である。dwCancelIdパラメータの有効な値は正である。非同期コールをキャンセルすることができる場合、UploadCancel７４０関数はS_OKを戻す。この場合、UploadPrinterDriverPackageＡＰＩ７００はクリーンアップし、次いで対応するイベントをシグナル通知する。非同期ＡＰＩをキャンセルできない場合、あるいはdwCancelIdの値が有効でない場合、UploadCancel７４０関数はE_FAILを戻すことになる。
【０１０３】
（IPrintSetup７５０）
本発明の一実施形態では、IPrintSetup７５０インターフェイスは、すべての新しいインターフェイスをユーザへ、例えば、スプーラドライバ（例えば、Winspool.drv）から供される単一のＣＯＭインターフェイスにおいて公開する。IPrintSetup７５０インターフェイスは、すべての新しい関数を覆うラッパーである。
【０１０４】
（OpenDriver()７６０）
OpenDriver()７６０関数は、各ドライバのハンドルを確立する。以下は、OpenDriver()７６０関数の例示的な形態である。データ構造が最初に提示される。その後、例示的なメソッドフォーマットが要約される。
【０１０５】
【表９】
2004303252.tif 000011
【０１０６】
（SetDriver()７７０）
SetDriver()７７０関数は、ドライバと関連付けられた特定のパラメータを設定し易くする。例示的なSetDriver()７７０関数は以下の形態を有する。
【０１０７】
【表１０】
2004303252.tif 000012
【０１０８】
（GetDriverData()７８０）
GetDriverData()７８０関数は、ドライバと関連付けられた特定のパラメータを取り出すことを容易にする。例示的なGetDriverData()７８０関数は以下の形態を有する。
【０１０９】
【表１１】
2004303252.tif 000013
【０１１０】
（CloseDriver()７９０）
CloseDriver()７９０関数により、以前に開かれたドライバを解放できるようにし、それにより、ドライバがインストールされている特定のクライアント上でクライアントを非アクティブ化することができる。例示的なCloseDriver()７９０関数は以下の形態を有する。
【０１１１】
【表１２】
2004303252.tif 000014
【０１１２】
図８を参照すると、パッケージ（例えば、プリンタドライバパッケージ）を、例えば、一般に図４に示すタイプの論理構造を有するコンピュータシステムのドライバパッケージストア３００にインストールするためのステップのセットが要約されている。上で説明したように、パッケージがインストールされるとき、パッケージの選択された部分のみをインストールするのではなく、パッケージ全体が特定のパッケージコンテナ上にインストールされる。最初にステップ８００にて、ドライバパッケージストア３００を維持管理するコンピュータシステムがコール（例えば、UploadPrinterDriverPackage７００）を受け取って、完全なターゲットのパッケージをドライバパッケージストア３００上にインストールする。これに応答して、ステップ８１０で、インストーラが、インストールされるパッケージから、他と区別する情報を抽出する。本発明の一実施形態では、ステップ８１０で、インストーラがpackageGUIDおよびバージョンを、ドライバパッケージストア３００にインストールされるパッケージ内のＩＮＦファイルから読み取る。
【０１１３】
次に、ステップ８２０で、インストーラがドライバパッケージコンテナ４５０にアクセスし、ステップ８１０で抽出されたpackageGUIDが、ドライバパッケージコンテナ４５０内のパッケージＧＵＩＤコンテナ名の１つとして存在するかどうかを判断する。抽出されたpackageGUIDが存在しない場合、コントロールがステップ８３０に移り、新しいパッケージＧＵＩＤコンテナが作成され、抽出されたpackageGUIDが割り当てられる。このように、本発明の例示的なこの実施形態では、パッケージＧＵＩＤコンテナは、同じpackageGUIDを有するすべてのパッケージバージョンを保持する。次いで、コントロールはステップ８４０に移る。
【０１１４】
ステップ８４０で、ドライバパッケージの特定のバージョンを保持するためにバージョンコンテナが作成される。本発明の一実施形態では、ステップ８１０にて抽出されたバージョンに従って、バージョンコンテナがラベル付けされる。例として、バージョンは、ドライバパッケージに割り当てられた日付、または、主要リリース、サブリリースおよびバグ修正リリースを指定する、複数の連結された英数字の値を備える、より形式化されたバージョン名である。特定の実施形態では、バージョンは４バイトの細分性を備える。
【０１１５】
パッケージを保持するために新しいバージョンコンテナを作成した後、ステップ８５０で、パッケージが新しいバージョンコンテナ内に格納される。格納されたパッケージの形態は、本発明の代替の実施形態によって変わる。しかし、特定の実施形態では、ステップ８５０で、ドライバファイルが、インストールされた未加工のパッケージのＣＡＢファイルから抽出される。少なくともいくつかの場合におけるこのようなドライバファイルの抽出には、ファイルを圧縮解除することが含まれる。インストールされたパッケージのＩＮＦファイルによって規定されたアセンブリに従って、コンテナ／サブディレクトリが作成され、これらは、抽出されたドライバを、モデルおよびプロバイダＧＵＩＤ（ＭＰＧ）により第１のレベルで決定されたファイルシステム場所（例えば、サブディレクトリ）に、次いでバージョンにより第２のレベルで格納する。バージョンは、例として、日付、またはキャラクタのセグメント化されたシーケンスによって、パッケージバージョンの格納に類似の方法で指定される。あるいは、ドライバは、厳密名によって識別されたコンテナに格納される。
【０１１６】
図８のステップ８６０で表したように、ファイルをドライバパッケージストア３００のディレクトリ構造に格納した後、それらのドライバを含む、格納されたパッケージを記述するメタデータが、メタデータストア３０４データベースに追加される。このようなデータベースを維持管理することにより、集中ドライバストレージ３００のファイル内容を比較的より高速に検索することが容易になる。ステップ８６０は実際にはいかなる以前の特定のステップにも依存せず、したがって、ドライバパッケージのインストレーションと関連していつでも起こることができることに留意されたい。しかし、パッケージが本当にドライバパッケージストア３００上にインストールされるまで待機することによって、メタデータストアの内容の精度が保証される。次いで、コントロールが終了に移る。
【０１１７】
ステップ８２０に戻ると、抽出されたpackageGUIDがドライバパッケージコンテナ４５０にて識別される（既存のパッケージＧＵＩＤコンテナへの合致を示す）場合、コントロールがステップ８７０に移る。ステップ８７０で、パッケージバージョン（厳密名）が既存のパッケージバージョンと比較される。抽出されたパッケージバージョンが、パッケージＧＵＩＤコンテナ内で識別されたパッケージバージョンに合致しない場合、識別されたパッケージのこの特定のバージョンはまだドライバパッケージストア３００に存在しておらず、コントロールがステップ８４０に移る。他方で、ステップ８７０では、抽出されたパッケージバージョンが、パッケージＧＵＩＤコンテナ内で識別されたパッケージバージョンに合致する場合、パッケージのこの特定のバージョンはすでにドライバパッケージストア３００に存在しており、コントロールがステップ８８０に移る。
【０１１８】
ステップ８８０で、インストーラに、現在の、おそらく同一のバージョンのドライバを上書きするオプションが提供される。上書きが望まれる場合、コントロールがステップ８５０に移り、合致するパッケージのバージョンのコンテナラベル下のこのパッケージの先に存在するバージョンが置き換えられる。上書きが望まれない場合、コントロールが終了に移る。終了にあたって、上述のパッケージインストレーション方法は、パッケージのバージョンとパッケージ内のドライバのバージョンの間で区別し易い方法で、パッケージを格納するためのプロセスの例示的なものであることに留意されたい。本明細書に含まれた開示を考慮して、これらのステップは、複数のインストールされたバージョン間で区別する機能を維持管理しつつ、修正および構成し直すことができることは、当業者には容易に理解されよう。
【０１１９】
図９を参照すると、クライアントおよびサーバがネットワーク化された周辺デバイスのための互換性のあるドライバを確立するためのステップのセットが要約されている。例示的なステップでは、クライアントがクライアントコンピュータシステムのアクティブドライバストア３０２にドライバパッケージストア３００からドライバをインストールし、これはドライバの異なるバージョンが別々に維持管理されるような方法で行われる。各ドライババージョンは、アクティブドライバストア３０２に格納された、一意に識別されるコンポーネント（例えば、マニフェスト）のリストと関連付けられる。マニフェストは、一意に識別されたコンポーネント毎にアクティブドライバストア３０２に格納される。さらに、各ドライバマニフェスト／リストは、クライアント上で維持管理されたメタデータストア３０４のPhysicalDriversテーブル６５０にあり、特定のドライババージョンに対応するエントリ内に格納される。
【０１２０】
同じ名前を有する異なるファイルを含む、同じドライバの複数の別々のバージョンを同時にサポートするために企図された、いくつかの方法がある。このような分離は、本発明の一実施形態では、一意に識別されたファイルシステムコンテナ（例えば、サブディレクトリ）にある各アクティブドライババージョンのすべてのコンポーネント／ファイルを格納することによって達成される。しかし、特定のドライバコンポーネント（例えば、ｕｎｉｄｒｉｖｅｒ）は多くのドライバによって使用され、ドライバ／バージョンの各組合せ毎にコピーを維持管理することはメモリスペースの無駄となるであろう。したがって、本発明の他の実施形態は、特定のドライバのファイルの完全なセットより少ないものを、一意に識別されたサブディレクトリコンテナに格納する。その代わりに、完全なドライバが、アクティブドライバストア３０２の複数のサブディレクトリ内に格納されたコンポーネントから作成される。完全なドライバは、メタデータストア３０４にあるドライバのマニフェストのコンテンツに基づいて構築される。
【０１２１】
特定のサブディレクトリにあるファイル／コンポーネントの統合のレベルは、本発明の様々な実施形態によって異なる。ある実施形態では、１つまたは複数のファイルを備える各コンポーネントバージョンは、アクティブドライバストア３０２のサブディレクトリに割り当てられる。さらに他の実施形態では、一意に識別されたサブディレクトリがドライババージョン毎に確立され、サブディレクトリは、特定のドライババージョンと関連付けられた非共有のコンポーネント／ファイルを収容する。ドライババージョンの共有コンポーネントは、アクティブドライバストア３０２の他の場所に収容される。
【０１２２】
本発明の特定の実施形態では、ドライバファイルが入っているサブディレクトリが、アプリケーションソフトウェアを含めて関連ソフトウェアモジュールのグループを格納する汎用ディレクトリの下に格納される。各サブディレクトリに割り当てられた一意の識別子名（例えば、厳密名）がその後、マニフェスト情報５０４に格納されたコンポーネントマニフェストまたは特定のドライババージョンのメタデータストア３０４のマニフェストを通じて、特定のドライババージョンのドライバファイルに依拠するクライアントソフトウェアに提供される。さらに、本発明の一実施形態では、ドライバファイルの様々なグループ化が入っているサブディレクトリは、他のマシンがクライアントマシンからドライバを読み取ったり、ダウンロードしたりするために利用可能にされ、これを「外部共有（ｓｈａｒｅｄ  ｏｕｔ）」ディレクトリと称する。後述の（ネットワーク化されたプリンタドライバのための）ステップのセットでは、クライアント、およびそのクライアントが接続を確立することを求めるサーバの両方が、上述のパッケージおよびドライババージョンの区別機能をサポートすると想定している。
【０１２３】
ステップ９００で、クライアントマシンがプリントサーバから特定のデバイスドライバの識別をリクエストする。このリクエストは、例として、GetPrinterDriverまたはGetDriverDataコールである。次にステップ９１０で、プリントサーバがリクエストしているクライアントに、ドライバパッケージストア３００によって維持管理されたドライバファイルシステム構造内で特定のドライババージョンを見つけるために十分なドライバ識別情報を戻す。本発明の特定の実施形態では、プリントサーバがpackageGUIDおよびバージョン、ならびにドライバＭＰＧおよびバージョンを戻す。本発明の例示的な実施形態では、この情報は、メタデータストア３０４、アクティブドライバストア３０２またはドライバパッケージストア３００ファイルシステム内でドライババージョンを指定するために十分である。また、ＭＰＧおよびバージョンも、リクエストしているクライアントが、メタデータストア３０４またはアクティブドライバストア３０２（これもドライババージョンおよび関連マニフェストを収容）にアクセスすることによって、必要とされるプリントドライバがすでにクライアントマシンのアクティブドライバストア３０２にあるかどうかを判定することができるようにするのに十分である。
【０１２４】
識別情報を受け取り次第、ステップ９２０で、クライアントマシンが、識別されたドライババージョン（例えば、ＭＰＧおよびバージョン）がすでにそのアクティブドライバストア３０２内にあるかどうかを判定する。サーバの応答において識別されたドライババージョンがクライアントのアクティブドライバストア３２０内にある場合、クライアントは、サーバと完全に互換性のあるやりとりを実行するために必要なドライバコンポーネントを有し、したがってコントロールが「終了」に移る。しかし、識別されたドライバが存在しない場合、コントロールがステップ９２０からステップ９３０に移り、ここでクライアントマシンが、識別されたpackageGUIDおよびバージョンが既知の場所で（ローカル、あるいは、中央ドライバストア２１２など、別のマシン上のある既知の外部共有の場所において）利用可能であるかどうかを判定する。識別されたpackageGUIDおよびバージョンが、クライアントに利用可能なパッケージに対応しない場合、コントロールはステップ９４０に移る。
【０１２５】
ステップ９４０で、クライアントマシンは、ネットワーク内の識別されたパッケージおよびバージョンの場所を判定する。本発明の例示的な実施形態では、クライアントマシンがリクエストをドライバパッケージストア３００に発行する。ドライバパッケージストア３００は、例えば、プリントサーバ（または、中央ドライバストア２１２）上のサービスによって提供され、これはすべてのドライバパッケージおよびそれらそれぞれの場所（共有名によって識別される）のリストを維持管理する。したがって、ステップ９４０で、ドライバパッケージストア３００が、例として、￥￥サーバ￥共有名を戻し、これは、ステップ９１０で識別されたパッケージバージョンのコピーをリクエストするためにクライアントによって使用される。この例では、ドライババージョンではなくパッケージバージョンの識別を利用していることに留意されたい。しかし、本発明の代替の実施形態では、ドライババージョンが外部共有され、クライアントは特定のドライババージョンの場所をリクエストすることができる。リクエストされたネットワークの場所を受け取り次第、コントロールは次にステップ９５０に移る。
【０１２６】
ステップ９５０で、クライアントは、パッケージ（またあるいは、ドライバ）バージョンの既知の場所からパッケージの識別されたバージョンをアップロードすることをリクエストする。アップロードリクエストには、例として、サーバ名、共有名、packageGUIDおよびバージョンが含まれる。リクエストされたドライバパッケージバージョンを受け取り次第、クライアントマシンは、例として、図８を参照して説明したステップに従ってパッケージをそのローカルドライバパッケージストア３００内にインストールする。コントロールは次にステップ９６０に移る。
【０１２７】
ステップ９６０で、クライアントマシンは、ステップ９１０中で識別されたドライババージョンをパッケージストア３００からアクティブドライバストア３０２にインストールするためのメソッド／関数を呼び出す。ステップ９６０で、１つまたは複数の新しいサブディレクトリコンテナがインストールされたドライババージョンのコンポーネントを格納するためにアクティブドライバストア３０２に作成され、これらの新しいサブディレクトリに、一意の識別子名（例えば、ＭＰＧおよびバージョン）が提供され、ステップ９１０中で識別されたドライババージョンのドライバ／コンポーネントのバージョンに対応するドライバファイルが、パッケージから新しいサブディレクトリにコピーされる。その後、コントロールがステップ９７０に移り、アクティブドライバストア３０２のマニフェスト情報５０４が、新たにインストールされたドライババージョン（新しいドライババージョンを構成するコンポーネントをリストしているドライバマニフェストを格納する新しいファイルを含む）と関連付けられた任意の新しいマニフェストを含むように更新され、本発明の一実施形態では、新しいエントリが新しいアクティブドライバに対応してメタデータストア３０４に作成される。新しいエントリ／マニフェスト情報は、一意の識別子名別のドライバマニフェストリスト、新たにインストールされたドライババージョンを構成する、アクティブドライバストア３０２のコンポーネントを含む。新しいマニフェスト情報／ドライバエントリを新しいドライババージョン毎に、例えば、メタデータストア３０４に作成することと、ドライバコンポーネント／ファイルの異なるバージョンを、一意に識別されたサブディレクトリ内に格納することとによって、上述の方法は、同じ名前であるが異なる内容が入っているいかなるドライバファイル（例えば、同じドライバファイルのバージョン）を上書きすることを回避する。次いで、コントロールはステップ９７０から「終了」に移る。
【０１２８】
ステップ９３０に戻って、識別されたパッケージがクライアントに（ローカル、あるいは既知のファイルシェアにおいて）利用可能である場合、コントロールはステップ９８０に移る。ステップ９８０で、パッケージバージョンがローカルに格納されない場合、コントロールは上述のステップ９５０に移る。そうでなければ、パッケージがローカルに利用可能である場合、コントロールはステップ９６０に移り、ステップ９１０で識別されたドライババージョンはクライアントのアクティブドライバストア３０２にインストールされる。
【０１２９】
ドライババージョンがどのように識別され、アクティブドライバストア３０２に格納されるかを説明したが、アクティブドライバストア３０２から特定のドライババージョンにアクセスするプリントクライアントが、クライアントのアクティブドライバストア３０２に現在格納されている既知のドライババージョンを使用して動作する特定のプリントサーバとのやりとりを行うステップのセットを図１０で要約する。
【０１３０】
最初に、ステップ１０００で、クライアントアプリケーションが、例えば、特定のプリントサーバによってサポートされるプリンタのプリントキューなどのサービスオブジェクトの使用をリクエストする。プリントキューについて、このようなリクエストは、プリントキューによって駆動されるプリンタのプリント可能エリアについてである可能性があり、この種のデータは、プリントドライバからラッパーレイヤ（オペレーティングシステムおよびそのＡＰＩの一部）を通じて供給される。このようなリクエストは、例えば、ワードプロセッシングアプリケーションによるプリントリクエストによって開始される。次に、ステップ１０１０で、オペレーティングシステムが、特定のプリントキューに要求される正しいドライババージョン（現在のキューと関連付けられたプリントサーバによって現在使用されているプリントドライババージョン）をルックアップする。これは、キューの要求されたプリンタドライバを判定するためのいくつかの既知の方法のいずれかにおいて達成することができる。例示的な実施形態は、ドライバ自体の汎用識別に加えてドライバのバージョンを判定することによって、以前の既知のバージョンに基づく。
【０１３１】
次に、ステップ１０２０で、プリントシステムが、特定のドライババージョンを実行するためのドライバのマニフェストからアクティベーションコンテキストを作成する。アクティベーションコンテキストは、オペレーティングシステムが一意に識別されたドライババージョンに従ってドライバコンポーネントバージョンにアクセスするための検索パスを提供する。コンテキストは、識別されたドライババージョンのコンポーネントを検索するための場所の順序をガイドする。したがって、アプリケーション（この例では、オペレーティングシステムのプリントサブシステム）がバージョンを指定することなくＵｎｉｄｒｖをリクエストする場合（換言すれば、厳密名を指定せずに、その一部のみを指定する場合）、アクティベーションコンテキストが、特定のバージョンをローディングすることに通じる情報を提供する。コンテキストの提供により、コンテキストが導出されるドライバマニフェストを単に切り替えることによってアプリケーションをあるドライバコンポーネントから別のドライバコンポーネントに（例えば、共有コンポーネントの更新されたバージョンに）切り替えることを可能にする。このように、要約すると、コンテキストをアクティブ化することは、特定のドライババージョンと関連付けられた特定の検索パスをアクティブ化することに対応する。
【０１３２】
アクティベーションコンテキストを作成した後、ステップ１０３０で、システムがアクティブ化されたコンテキストに基づいて特定のドライババージョンと関連付けられたドライバコンポーネントをロードし、次いでドライバにコールして、特定のドライババージョンと関連付けられたコマンド／オペレーションを履行する。
【０１３３】
次に、ステップ１０４０で、ドライバが追加のファイル（例えば、構成ファイル、ヘルパＤＬＬ）をロードすることができる。そうする場合、ドライバマニフェストで指定された場所／パスに従って、これらのコンポーネントのバージョンを得る。本発明の一実施形態では、ドライバのコンポーネントは、追加のドライバファイル／コンポーネントを規定するマニフェストを含むこともできる。これらの追加のファイルはまた、特定のドライババージョンをクライアントマシン上で実行してサーバマシン上のバージョンと合致させることができるＧＵＩＤに加えて、バージョン情報によって識別される。バージョンは、現在アクティブ化された（ドライバおよびそのコンポーネントのマニフェストによって駆動される）コンテキストによって統治される。
【０１３４】
最後に、ステップ１０５０で、ドライバに提出されたリクエストを完了した後、プリントシステムはコンテキストを非アクティブ化し、コントロールが「終了」に移る。この例はネットワークプリントドライバと関連して与えられたが、本発明は、ファックス装置、スキャナなどを含む、他の共有ネットワーク化された周辺デバイスに適用可能であることに留意されたい。
【０１３５】
周辺デバイスドライバおよびそれらの構成コンポーネントをネットワーク化された周辺デバイス環境で維持管理するための、新規で有用な方法およびシステムについて説明したことが当業者には理解されよう。本発明の原理を適用することができる多くの考えられうる環境、および、ソフトウェアユーティリティおよびツールを設計および実行することの柔軟性に鑑みて、本明細書で説明した実施形態は、例示的な意味であり、本発明の範囲を限定するものとして解釈されるべきではないことを理解されたい。本発明が適用される技術分野の当業者には、本発明の精神から逸脱することなく、例示した実施形態は構成および詳細において修正することができることを理解されよう。したがって、本明細書で説明した本発明は、添付の特許請求の範囲およびその等価物の範囲内に入る可能性のあるすべてのこのような実施形態を企図している。
【図面の簡単な説明】
【０１３６】
【図１】本発明の一実施形態を実行するための例示的なコンピュータシステムを示すブロック図である。
【図２】本発明が都合よく組み込まれる代表的なネットワーク環境を示す高次の概念図である。
【図３】本発明の例示的なネットワークの実施形態におけるサーバおよびクライアント内で維持管理された様々なドライバ関連ソフトウェアおよび情報を例示的に示す概略図である。
【図４ａ】本発明の一実施形態における単一のドライバパッケージの例示的なコンポーネントを示すブロック図である。
【図４ｂ】ドライバのバージョン、およびそれらのドライバが抽出されるパッケージを区別し、構成するための複数のレベルを例示的に示す例示的な階層ツリー図である。
【図５ａ】アクティブドライバディレクトリ内にインストールされたドライバそれぞれに対応するマニフェストおよびサブディレクトリのセットを備える例示的なアクティブドライバディレクトリの構成構造の図である。
【図５ｂ】単一のクライアントが、同じドライバの異なるバージョンを実行する２つのサーバとの同時互換性をサポートすることができる例示的なネットワーク化された周辺デバイス構成を例示的に示す図である。
【図６】メタデータストアのための例示的なデータベーススキーマの図である。
【図７】本発明を実施するクライアントのためにプリントスプーラによってサポートされたメソッド／関数の例示的なセットの図である。
【図８】パッケージをドライバパッケージストア内にインストールするためのステップのセットを要約する流れ図である。
【図９】特定のサーバについてクライアントマシン上で適正なドライババージョンを維持管理するためのステップのセットを要約する流れ図である。
【図１０】クライアントがサーバとやりとりする過程でどのようにドライババージョンにアクセスするかを要約する流れ図である。
【符号の説明】
【０１３７】
２００  例示的なコンピュータネットワーク環境
２０２  クライアントマシン
２０４、２０５  プリントサーバ
２０６、２０８  プリンタ
２１０  ネットワークリンク
２１２  集中ドライバストア
３００  ドライバパッケージストア
３０２  アクティブドライバストア
３０４  メタデータストア
４００  ＩＮＦファイル
４１０  ＣＡＴファイル
４２０  ＣＡＢファイル
４５０  ドライバパッケージコンテナ
４６０、４６２、４６４  パッケージＧＵＩＤ区切りパッケージコンテナ
４７０、４７２  パッケージ
４８０、４８２  ドライバコンポーネント固有のコンテナ
４９０、４９２  バージョンコンテナ
５０２  ドライバファイル
５０４  マニフェスト情報
５４０  クライアント
５５０  第１のサーバ
５５５  ドライバＦｏｏのバージョンｘ
５５６  ドライババージョンｘ
５５７、５５８  設定
５６０  第２のサーバ
５６５  ドライバＦｏｏのバージョンｙ
５６６  ドライババージョンｙ
５６７、５６８  設定
５７０、５８０  ネットワーク化された周辺デバイス
【図１】
2004303252.tif 000015
【図２】
2004303252.tif 000016
【図３】
2004303252.tif 000017
【図４ａ】
2004303252.tif 000018
【図４ｂ】
2004303252.tif 000019
【図５ａ】
2004303252.tif 000020
【図５ｂ】
2004303252.tif 000021
【図６】
2004303252.tif 000022
【図７】
2004303252.tif 000023
【図８】
2004303252.tif 000024
【図９】
2004303252.tif 000025
【図１０】
2004303252.tif 000026