JPH10283195A - カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体 - Google Patents

カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体

Info

Publication number
JPH10283195A
JPH10283195A JP9164770A JP16477097A JPH10283195A JP H10283195 A JPH10283195 A JP H10283195A JP 9164770 A JP9164770 A JP 9164770A JP 16477097 A JP16477097 A JP 16477097A JP H10283195 A JPH10283195 A JP H10283195A
Authority
JP
Japan
Prior art keywords
driver
data
connection
component
instance
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP9164770A
Other languages
English (en)
Other versions
JP4684376B2 (ja
Inventor
George H J Shaw
エイチ. ジェイ. ショウ ジョージ
Bryan A Woodruff
エイ. ウッドラフ ブライアン
Thomas J O'rourke
ジェイ. エロウルケ トーマス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JPH10283195A publication Critical patent/JPH10283195A/ja
Application granted granted Critical
Publication of JP4684376B2 publication Critical patent/JP4684376B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 (修正有) 【課題】 ユーザ・モード・プロセスとして実行される
アプリケーションがドライバまたはフィルタの形態にな
ったカーネル・モード機能の複数ブロックを始動して、
接続する。 【解決手段】 カーネル・モード・フィルタがセットア
ップされ、接続されたあと、ユーザ・モード・アプリケ
ーションはフィルタから通知があるまでアクティブであ
る必要はない。この通知は処理の終了時に行われること
もあれば、そのアプリケーションによってフィルタの初
期化とセットアップの一部として選択された、なんらか
のイベントの発生時に行われることもある。さらに、ユ
ーザ・モード・アプリケーションはカーネル・モード・
フィルタまたはドライバにその機能と要件について照会
し、1つにチェインニングされた異なるフィルタ間の接
続を正しく行ってデータ・ストリームを処理し、適切な
通知を要求できるようにする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明の分野はコンピュータ
・ソフトウェア・ドライバの開発に属するものでであ
る。本発明はドライバのコード生成を単純化すると共
に、標準化されたアクセス・ポイントを提供するツー
ル、ソフトウェア・フレームワーク、規則などに関す
る。より具体的には、本発明は異なる開発者によって書
かれたソフトウェア・ドライバをカーネル・モードで相
互接続し、カーネル・モードからユーザ・モードへまた
はユーザ・モードからカーネル・モードへの非効率な遷
移を行うことなく、異なるドライバ間で連続処理を可能
にする標準化されたメソッド、コンピュータ・プログラ
ム・プロダクト、およびデータ構造に関する。
【0002】
【従来の技術】ソフトウェア・ドライバはハードウェア
を制御するように、またはソフトウェア機能を提供する
ように作られているのが通常であり、システム・オーバ
ヘッドを軽減し、制約を相対的に少なくしてオペレーテ
ィング・システムの下で実行されている。そのようにす
ると、正常な動作(behavior)を保証し、無効なアクセス
またはオペレーティング・システムの下で実行中の別の
プロセスとの干渉を「トラップ(trap)」するために実行
されるシステム・コードが少なくなるので、ドライバが
ハードウェアをアクセスし、タイム・クリティカル処理
要求(time critical processing request)をサービスす
ることが高速化している。
【0003】オペレーティング・システムは、アクセス
の量と実装(実装)されているセキュリティ機能に応じ
ていくつかの異なる動作レベルまたは「モード(mode)」
をもっているのが通常である。例えば、通常のアプリケ
ーション・プログラムは最低優先度で実行され、他のア
プリケーションとの干渉を防止するためのセキュリティ
・デバイスを適所に完備している。ハードウェアは制御
下に置かれたインタフェースを通してのみアクセスされ
る。説明の便宜上、これを「ユーザ・モード(user mod
e) 」と総称することにするが、下述する本発明の実装
例の一部として使用されているWindows NTオペレーティ
ング・システムはユーザ・モードをサポートしている。
同様に、他の大部分のオペレーティング・システムは、
その複雑度に関係なく、「ユーザ・モード」と同等の動
作モードを持っている。
【0004】他方、ドライバは実行優先度がはるかに高
く、セキュリティ保護が低いオペレーティング・システ
ムのモードで実行されるので、ドライバは、多くの場
合、ドライバが直接に取り扱う実際のハードウェアへア
クセスすることが可能になっている。多くのアプリケー
ションは、このよりゆるやかで、よりパフォーマンス指
向のモードで実行させると利点が得られるが、これはWi
ndows NT用語では、一般に「カーネル・モード(kernel
mode) 」と呼ばれており、本明細書でもそのように呼ぶ
ことにする。この場合も、他の堅牢な(robust)オペレー
ティング・システムは機能的に同等のモードをもってい
る。
【0005】ソフトウェア・ドライバの一般的概念は特
定のハードウェアを制御することを意図しているので、
ドライバは相互から切り離されて開発され、ハードウェ
ア・メーカによって提供されるのが通常である。例え
は、アドイン・ハードウェア・カード(add-in hardware
card)に関連する、ある種の入出力サービスをデバイス
の定義を通して提供するソフトウェア・ドライバは他の
どのドライバとも通信する必要もなければ、その存在を
知っている必要もない。
【0006】事情によっては、ドライバの開発のこのよ
うな専用的アプローチと、ドライバ間で通信できる機能
の関連する欠如は、カーネル・モードで動作させること
が好ましい処理をユーザ・モードで動作させざるを得な
くさせるので、パフォーマンス面で不利になることが起
こる。
【0007】本明細書の中で用いられている、カーネル
・モード・ドライバを容易に使用することができない現
行プログラムの代表的な例の1つとして、ユーザがフィ
ルタと呼ばれる異なる処理ブロックを選択し、これらを
1つに結合して、マルチメディア・データのストリーム
を連続的に操作できるようにするグラフ作成機能があ
る。データはサウンドまたはビデオを表す一連のサンプ
ルであるのが代表的であり、処理ブロックは、圧縮デー
タの伸張(decompression) 処理、特殊効果(special eff
ects) 処理、CODEC 機能、データをアナログ信号に変換
するレンダリング・ブロック(rendering block) などが
ある。
【0008】上記のようなフィルタは、プログラムのグ
ラフ作成機能部分が相互接続され、そのオペレーション
を制御し、ユーザの入力と処理ブロックの再配置(rearr
angement) に応じられるようにユーザ・モードに置かれ
ているのが代表的である。マルチメディア・データのス
トリームには一貫性があり、大量のデータが生成される
ために、パフォーマンスは重要な問題になっている。汎
用オペレーティング・システムでは、ユーザ・モードと
カーネル・モードとの間で受渡しや切替えを繰り返し行
い、このような遷移(transition)がセキュリティ上有効
であるかどうかの検査を暗黙的に行う結果、システム・
パフォーマンスが低下するので、ある種のマルチメディ
ア・アプリケーションが使用できないことになる。
【0009】さらに、処理ブロックは多くの時間、ハー
ドウェアと結びつけられているため、ユーザ・モードと
カーネル・モードのコンポーネント間の遷移がなん度も
行われることになる。このような遷移が行われると、マ
ルチメディア処理システムの総パフォーマンスを低下さ
せる、別の形態のオーバヘッドを含むことになる。ユー
ザ・モードとカーネル・モードとの間で遷移を行うと、
異なるバッファ間でデータをコピーするときに関連する
オーバヘッドが生じ、これは処理をカーネル・モードの
ままにしておけば生じるはずがないものである。
【0010】カーネル・モードからユーザ・モードへの
遷移を行うときに起こる、もう1つの欠点は、オペレー
ティング・システムで作業タスクをスケジューリングす
る方法が制限されることである。作業をカーネル・モー
ドのままにしておくことが可能であれば、ソフトウェア
割込みや据置きプロシージャ・コール(deferred proced
ure call‐DPC)といった、よりパフォーマンス指向
のスケジューリング方法を利用できるので、システム・
パフォーマンスはさらに最適化される。
【0011】さらに、異なるドライバ開発者が相互に接
続可能なドライバを、共通の相互接続方式と定義に従っ
て作成できるようにすると好都合な場合がある。このよ
うにすると、共通インタフェースに対して書かれたどの
ドライバ機能も、機能処理ブロックのシステム中に相互
接続できるので、すべてのデータ遷移はカーネル・モー
ドで行われることになる。さらに、公知の規格を使用す
ると、多くの異なるドライバ開発者は相互操作可能で、
相互接続可能なドライバ・ソフトウェアを開発すること
が可能になる。
【0012】
【発明が解決しようとする課題】本発明の目的は、ソフ
トウェア・ドライバを標準化された方式で相互接続し、
データ処理期間にオペレーティング・システムのモード
遷移を防止することによって、システム・パフォーマン
スを向上することである。
【0013】さらに、本発明の目的は、サード・パーテ
ィ開発者によって拡張可能である、相互接続可能なソフ
トウェア・ドライバ用のベース・メカニズムを提供する
ことである。
【0014】本発明の別の目的は、より多くのパフォー
マンス・クリティカル処理をカーネル・モードで発生さ
せるようにすることである。
【0015】さらに、本発明の別の目的は、サード・パ
ーティ・コンポーネントがソフトウェア・ドライバを相
互接続できるようにすることである。
【0016】本発明のその他の目的および利点は以下の
説明に記載されているが、その一部はその説明から理解
されるものと、本発明を実施することにより知得し得る
ものとがある。本発明の目的と利点は、請求の範囲に個
々に記載されているインストリューメント(instrument)
の手段および組合せにより実現し、得られるものであ
る。
【0017】
【課題を解決するための手段】上記目的を達成するため
に、また以下に具現化され、広義に説明されている本発
明によれば、ソフトウェア・ドライバをカーネル・モー
ドで相互接続するための方法およびコンピュータ・プロ
グラム・プロダクトが提供されている。ある与えられた
ドライバまたはフィルタは、他のドライバに置かれた他
のピン・インスタンス(pin instance)と相互接続でき
る、ある種のタイプのピン・インスタンスを作成する接
続「ピン・ファクトリ(pin factory) 」をサポートし、
定義することにより、ユーザ・モードのエージェントに
頼らなくても、処理メッセージがドライバによってカー
ネル・モードで連続処理されるようにしている。このよ
うにすると、データは完全にカーネル・モードでフロー
し、データはユーザ・モードにクロスするというオーバ
ヘッドが不要になるので効率的に処理される。
【0018】コンプライアント・ドライバ(compliant d
river)を接続することを希望するサード・パーティ・エ
ージェントはドライバにその機能があるかどうかを照会
する。そのような機能としては、接続ピン・インスタン
スをインスタンシェイト(instantiate) するのにどのよ
うな種類の接続ピン・ファクトリが使用できるかという
ことがあり、この中には、処理されるデータのタイプ、
データ・フォーマット、転送レート、転送媒体またはモ
ード、接続ピン・インスタンスの入力または出力の性質
といった関連特性が含まれている。
【0019】ユーザ・モードで実行されるのが代表的で
あるサード・パーティ・エージェントが1つまたは2つ
以上のコンプライアント・ドライバの機能について照会
したあと、そのエージェントは、複数のドライバを1つ
に「チェイニング」してデータがドライバ間で最適に処
理されるようにする最良の接続特性を決定する。この決
定ステップは、すべてのドライバ機能の照会を終えて、
最適な接続基準が選択できるようになったあとで行われ
る。
【0020】次に、サード・パーティ・エージェント
は、各ドライバ上の必要な接続ピンのインスタンスをピ
ン・ファクトリを使用して作成することによってドライ
バを相互接続する。エージェントは、データ・フォーマ
ットと接続フォーマットを接続ピン・インスタンス作成
の一部として指定する。さらに、以前に作成された接続
ピン・インスタンスへの参照は、他の接続ピン・インス
タンスを作成する要求の中で指定され、接続ピン・イン
スタンス間の接続が行えるようにする。
【0021】NTオペレーティング・システムの下で実
装されている例示的実施の形態では、実際の接続ピン・
インスタンスは「ファイル」へのハンドル(handle)を返
す作成入出力オペレーションによって作成される。この
作成入出力要求は、接続ピン・インスタンスのデータ・
フォーマットと接続フォーマットを示しているデータ構
造へのドライバ・インスタンス・ハンドルと参照を含め
ている。
【0022】コンプライアント・ドライバを作成するた
めには、ドライバ開発者は、ユーザ・モードのエージェ
ントが機能について照会し、ドライバ間の相互接続を行
えるようにする、ある種の標準機能をサポートしてい
る。Windows NTオペレーティング・システム上で構築さ
れている、ある実施の形態では、これは、必要とする機
能を実装している「集合(set) 」(つまり、プロパテ
ィ、メソッド、およびイベントの集合)の使用によって
達成されている。
【0023】集合は、集合全体を特定するGUID(glo
bally unique identifier)(グローバルにユニークな識
別子)と、集合内の各機能エレメントのRUID(relat
ively unique identifier)(相対的にユニークな識別
子、例えば、集合自体内で相対的な識別子)をもつもの
として論理的に定義されている。各集合は1つまたは2
つのIOCTLs(IO Controls)(入出力コントロール)
だけと関連づけられ、IOCTLは、集合の仕様と組み
合わされて、ドライバとのすべてのインタラクションを
制御する。
【0024】本実施の形態では、3タイプの集合が使用
されている。つまり、プロパティ集合、メソッド集合、
およびイベント集合である。プロパティ集合はサウンド
・ボリューム、転送レートなどの、値または設定値をド
ライバ内で管理するために使用され、コールがプロパテ
ィ値を得ようとしているのか、および/またはプロパテ
ィ値を設定しようしているのかを示すフラグと一緒に単
一のIOCTLを使用する。メソッド集合は、メモリの
割当て、バッファのフラッシング(flushing)などのよう
に、ドライバが実行できるオペレーションを管理するた
めに使用され、単一のIOCTLを使用して特定のメソ
ッドをコールする。イベント集合は、デバイス変更通
知、データ・スターベーション(data starvation) 通知
などのように、ドライバの処理に関連するイベントを管
理するために使用され、2つのIOCTLを使用する。
1つは特定のイベントをイネーブル(enable)にするため
のもので、もう1つは特定のイベントをディスエイブル
(disable) にするためのものである。
【0025】集合を使用するには、入出力制御オペレー
ションは特定のIOCTLと、集合のGUID、RUI
Dをもつデータ構造への参照およびその他の必要なデー
タを使用して開始される。例えば、サウンド・カード・
ドライバでボリューム・プロパティを設定する場合は、
集合プロパティのIOCTLを使用し、ボリューム設定
値をもつプロパティ集合の適切なGUIDを指定し、そ
の集合内の特定RUIDがボリューム・プロパティを示
していることを指示し、新しいボリューム設定値を含ん
でいる入出力制御オペレーションが行われることにな
る。
【0026】サポートされる集合について照会するに
は、ヌルGUIDが特定集合タイプの特定IOCTL
(例えば、プロパティ集合IOCTL、メソッド集合I
OCTL、またはイベント・イネーブルIOCTL)で
照会フラグと一緒に使用され、サポートされる集合GU
IDのリストが返される。ある集合内のサポートされた
プロパティ、メソッド、またはイベントについて照会す
るには、集合GUID、集合タイプIOCTL、および
照会フラグが、サポートされたRUIDのリストを返す
オペレーションと一緒に使用される。
【0027】汎用集合メカニズムを使用すると、コンプ
ライアント・ドライバをサポートするために最小限の機
能を実装することができるが、それでも拡張性は無制限
である。集合は、特定の集合が実装されている限り、相
互動作可能で、相互接続可能なドライバのシステムを作
成するために、多数の異なるドライバ開発者によって独
立してコーディングすることができる仕様書に定義する
ことができる。さらに、この仕様書には、サポートする
必要のある必須のプロパティ、メソッドおよびイベント
を定義できるだけでなく、ドライバの機能と拡張機能に
依存して実装できるオプションのプロパティ、メソッ
ド、およびイベントも定義することができる。要求され
る基本的最小限の共通性のほかに、ドライバ開発者は独
自の集合を定義し、その集合にGUIDを割当てること
によって追加の機能を組み込むことも可能である。サポ
ートされる機能(つまり、サポートされるGUIDとR
UIDの照会を行うこと)を列挙できるようにすると、
サード・パーティ制御エージェントなどの、呼出し側(c
aller)は期待を調整することも、基礎となるフィルタの
機能に依存して適切な補償を行うこともできる。
【0028】本発明の上記およびその他の目的と特徴は
以下の説明および請求の範囲に詳しく記載されている通
りであるが、以下に説明する本発明を実施することによ
って知得することも可能である。
【0029】本発明の上記およびその他の利点と目的が
どのようにして得られるかという方法を示すために、以
下では、添付図面に図示されている具体的実施の形態を
参照して、以上で簡単に説明してきた本発明を詳しく説
明することにする。添付図面は本発明の代表的な実施の
形態を示したにずぎず、従って、本発明の範囲を限定す
るものではないとの了解の下で、以下、添付図面を使用
しながら本発明をもっと具体的にかつ詳しく記述し説明
することにする。
【0030】
【発明の実施の形態】本明細書で用いられている「ユー
ザ・モード(user mode) 」という用語は、ユーザが書い
たプログラムの大部分が実行されるときの、オペレーテ
ィング・システムにおける動作レベルのことである。ユ
ーザ・モードの動作レベルはセキュリティ・レベルが最
も高く、あるアプリケーション・プログラムまたはプロ
セスが別のアプリケーション・プログラムまたはプロセ
スに干渉するのを防止するために大量のオーバヘッドが
消費されるのが代表的である。さらに、システム・リソ
ースへのアクセスは特定のインタフェースを通して厳格
に制御され、実行優先度は最低ではないとしても、最低
優先度の1つであるのが一般である。
【0031】本明細書で用いられている「カーネル・モ
ード(kernel mode) 」という用語はユーザ・モードの動
作モードよりも制約が非常に少ない、オペレーティング
・システムにおける動作レベルのことである。カーネル
・モードのプログラムまたはプロセスの例としては、ハ
ードウェア・コンポーネントを制御するソフトウェア・
ドライバ(software driver) を含む。代表例として、カ
ーネル・モードのプログラムはパフォーマンスに影響さ
れやすく、従って、動作上のオーバヘッドはユーザ・モ
ードのプログラムよりも少なくなっている。さらに、ハ
ードウェアや多くのシステム・リソースへのアクセスは
無制約であるか、あるいはユーザ・モードのプログラム
の場合よりも制約がはるかに少なくなっている。多くの
場合、カーネル・モードで実行されるプログラム・コー
ドは、規則(convention)に対するプログラマの規律正し
さと準拠とを信頼して、システムが良好に動作するよう
にする(例えば、別のプログラムのアドレス空間を破壊
しないようにする)。カーネル・モードを表わす別の用
語として、「トラステッド(trusted) 」コードがある。
【0032】本明細書で用いられている「ドライバ(dri
ver)」という用語はカーネル・モードで実行されるのが
代表的である、ソフトウェア・ドライバ・プログラムの
ことである。ドライバという用語は、オペレーティング
・システム上にロードされる実際の実行可能プログラム
またはある種の機能を分け与えるプログラム部分を意味
する場合もある。ドライバは、多くの場合、ある形態の
ハードウェアと関連づけられているが、必ずしもそうで
ある必要はない。
【0033】本明細書で用いられている「フィルタ(fil
ter)」という用語はソフトウェア・ドライバ内に置かれ
ている機能部分のことであり、この中には、ドライバ自
体も含まれ、そこでは、接続ポイントがフィルタを通し
てデータを送信するために公開されている。例えば、ソ
フトウェア・ドライバはいくつかの異なるフィルタをサ
ポートする場合もあれば、1つの単一機能をもっている
場合もある。さらに、内部的には1つに接続され、外部
的には入出力用に接続ポイントを公開している異なるド
ライバからの複数のフィルタは単一フィルタとして集合
的に参照される場合もある。また、もっと総称的な意味
では、フィルタという用語は、伸張(decompression) な
どのように、それがカーネル・モードで実行されるソフ
トウェア・ドライバ・フィルタで起こるか、ユーザ・モ
ードで実行される別のプログラム・コードで起こるかに
関係なく、実行されるオペレーションを意味する場合も
ある。
【0034】本明細書で用いられている「ドライバ・オ
ブジェクト(driver object) 」という用語は、ソフトウ
ェア・ドライバを管理し、これをシステム・リソースと
して知らせるオペレーティング・システムによって定義
されているオペレーティング・システムのエンティティ
のことである。
【0035】本明細書で用いられている「デバイス・オ
ブジェクト(device object) 」という用語はシステムに
よって定義されたシステム・レベルのエンティティのこ
とであり、これは利用が可能であるドライバの機能の一
部をシステム・リソースとして知らせ、ドライバの機能
と他のシステム・コンポーネントが利用できるかどうか
を定義している。ドライバ・オブジェクトとデバイス・
オブジェクトはどちらも、代表的にドライバ・ソフトウ
ェアのロード時と初期化時に作成される。
【0036】本明細書で用いられている「ファイル・オ
ブジェクト(file object) 」という用語は、デバイス・
オブジェクトによって指定されたリソースの呼出しを管
理するオペレーティング・システムのエンティティのこ
とであり、これはオペレーティング・システムによって
定義されている。ファイル・オブジェクトはドライバ・
オブジェクトの使用状況に関するコンテキストを提供す
る。さらに、ファイル・オブジェクトは、以前のファイ
ル・オブジェクトが新しいファイル・オブジェクトの作
成時に「親」と指定されていれば、別のファイル・オブ
ジェクトと階層的に関係づけることが可能である。ファ
イル・オブジェクトは、代表的にデータ・ストリーム上
に操作するすべての入出力オペレーションの管理に使用
される。
【0037】本明細書で用いられている「データ(dat
a)」という用語は、相互接続されたカーネル・モードの
フィルタを通して処理される一切の情報のことである。
そのようなデータは、ビデオ、オーディオ、テキスト、
MIDIなどを表すメディア・データを含むが、他のア
プリケーションの場合には制御情報やパラメータも含ん
でいる場合がある。例えば、カーネル・モード・フィル
タ・グラフはプロセス制御オペレーションで使用される
ことがあるが、そこでは、異なるフィルタ間で受け渡し
される制御情報はマシン類をアクチュエートする制御信
号を創り出すために使用されている。メディア処理シス
テムの例が示されているが、他のアプリケーションも、
本明細書に説明されている相互接続カーネル・モード・
フィルタのシステムから、同じような方法で利点を得る
ことが可能である。
【0038】本明細書では、本発明の説明は、Microsof
t(登録商標)社から提供されているWindows NT(商標)
オペレーティング・システムのコンテキスト内で記載さ
れている。さらに、本明細書に説明されている好適実施
の形態を理解するためには、Windows NTの入出力アーキ
テクチャの知識が前提になっている。入出力システムお
よび NT オペレーティング・システム全般について解説
した好適書としては、Helen Custer著「Windows NTの内
部(Inside Windows NT) 」(Microsoft Press発行)があ
るが、本書は引用により本明細書の一部を構成するもの
である。
【0039】ドライバおよびファイル・オブジェクト、
デバイス・オブジェクト、ドライバ・オブジェクトなど
のシステム・エンティティの以下の説明では、Windows
NTオペレーティング・システム上でこれらがどのような
働き方をするかが解説されているが、この分野の精通者
ならば理解されるように、本発明は、類似のコンポーネ
ントを持つ他のオペレーティング・システム上で実装す
ることが可能であり、これらのオペレーティング・シス
テムが同じ用語を使用しているかどうかとは無関係であ
る。例えば、別のオペレーティング・システムがファイ
ル・オブジェクトとして動作するエンティティを持って
いれば、そのエンティティはその実際の名称に関係な
く、ファイル・オブジェクトと解釈することができる。
【0040】まず、図1を参照して説明すると、図示の
システム例は、サウンド・データのストリームをディス
ク・ドライブから読み取り、そのサウンド・データをレ
ンダリング(rendering) して、従来のモデルに従ってス
ピーカから聞こえるようにするものである。あるデータ
量はハード・ドライブ20にストアされるが、これはデ
ィジタル化されたサウンド・サンプルの形態でサウンド
を表している。ほかにも、サウンド・データ・ストリー
ムのソースとしては、電話回線を利用して送られてくる
ディジタル化情報、ネットワークや他の通信パケットか
らのディジタル化情報、この分野で公知の他のソースが
考えられる。データ・ストリームはディジタル化サンプ
ルから構成され、これらのサンプルはデータ・フォーマ
ットと規則によって、または各サンプルに付加される明
示的タイムスタンプ情報によってタイム・インターバル
情報が関連づけられている。カーネル・モードのディス
ク・ドライバ22はディスク・ドライブ・ハードウェア
20と相互作用し、ユーザ・モードのリーダ(reader)プ
ログラム・コンポーネント24の制御下に置かれてい
る。制御エージェント(controlling agent) 26はサウ
ンド・データのレンダリングを行うために異なるコンポ
ーネントを管理するが、動的グラフ作成機能(dynamic g
raph building capability) を備えている場合は、異な
るソフトウェア・コンポーネントが動的に割当てられ
て、エンド・ユーザの指定に従ってカスタム・フィルタ
リングまたは他の処理経路を提供できるようにする。
【0041】リーダ・コンポーネント24はオペレーテ
ィング・システムの標準入出力制御インタフェースを使
用してディスク・ドライバ22と相互作用し、圧縮サウ
ンド・データをディスク・ドライブ20から読み取っ
て、ユーザ・モード・プロセスのアドレス空間(address
space) の一部としてユーザ・モードで割当てたバッフ
ァに入れる働きをする。次に、デコンプレッサ(decompr
essor)・コンポーネント28は圧縮データを処理に適し
た伸張(decompressed)フォーマットに伸張する。図示の
ように、このステップ全体は、付随の低優先度の、プロ
セス動作(processbehavior)安全メカニズムを使用して
ユーザ・モードで実行される。
【0042】効果フィルタ(effects filter)30はデー
タに操作を加えて、ある種の特殊効果が得られるように
し、カーネル・モードで動作する附属の効果フィルタ3
2をもっている。さらに、効果プロセッサ34が存在す
る場合もあれば、効果フィルタ全体が実際のハードウェ
ア・プロセッサをエミュレートするソフトウェアで動作
する場合もある。効果フィルタ32をアクセスするため
には、効果コンポーネント30はシステム入出力制御メ
カニズムを使用して、データと制御を効果フィルタに転
送する。この場合も、カーネル・モード/ユーザ・モー
ド境界を交差して、この遷移が行われる。
【0043】効果フィルタ32は効果プロセッサ34を
制御し、必要または望ましいとされる特殊効果がそのデ
ータ上に作られるようにする。これは、効果コンポーネ
ント30から全データをコピーし、そのコピーを効果フ
ィルタ32に、実際のシステム構成によっては、再度効
果プロセッサ34にも移すことにより行われる。多くの
ソフトウェア効果コンポーネントはハードウェア・プロ
セッサが関連づけられているが、他のコンポーネント
は、ホスト・プロセッサ上で実行されるシステム・ソフ
トウェア内で完全に機能している。
【0044】効果コンポーネント30の処理の完了時に
コントロールとデータがユーザ・モードに戻されると、
これは、次に、サウンド・レンダリング・コンポーネン
ト36に転送される。サウンド・レンダリング・コンポ
ーネント36はコントロールとデータをサウンド・レン
ダリング・ドライバ38に転送し、これを受けてサウン
ド・レンダリング・ドライバは、処理され、フィルタリ
ングされたデータをスピーカ42からのサウンドとして
レンダリングするようにサウンド・カード40を制御す
る。以上から容易に理解されるように、ユーザ・モード
とカーネル・モード間の転送は多種類存在するために、
サウンド・データのレンダリングを非効率化している。
連続するサウンドまたはビデオ・ストリームのように、
マルチメディア・データはタイミングに影響されやすい
性質のため、これらの非効率性とコントロールの遷移を
少なくすると共に、異なるバッファ間でなん度もデータ
をコピーすることを少なくすると、好都合である。
【0045】本明細書で用いられている本発明の一実施
の形態は、Windows NTオペレーティング・システム・ア
ーキテクチャ上で提供されるサービスから構成されてい
る。このサービスはシステムのユーザがアクセスする、
いくつかの異なるソフトウェア・コンポーネントに分割
されている。第1は、ユーザ・モードのAPIであり、
これは、接続ピン・インスタンスと、クロック・メカニ
ズムやバッファ割当てメカニズムなどの特定の機能を表
している他のファイル・オブジェクトとを作成するため
のルーチンを含んでいる。ほかにも、もっと重要なもの
として、ドライバ開発者が標準化アーキテクチャに従う
ドライバを作成するのを支援するルーチンとデータ構造
が完備されている。システムに用意されているこれらの
機能を利用すると、異なるドライバ開発者は特定のアー
キテクチャに準拠して相互に相互作用するコンプライア
ント・ドライバを作成することができる。ユーザ・モー
ド・エージェントはNTエグゼクティブおよび入出力マ
ネージャのシステム・サービスと通信する、ユーザ・モ
ードで実行中の環境サブシステムを通してコンプライア
ント・ドライバと通信する。これは、他のすべての入出
力に対する同じ標準入出力メカニズムであり、好適実施
の形態の本実装では、既存のシステム・サービスを可能
な限り利用するようになっている。
【0046】本発明を利用する図1のシステムのアーキ
テクチャは図2に示すようになっている。制御エージェ
ント44は知らされているドライバに照会し、データ・
フォーマットと接続フォーマットに従って相互接続を行
い、レンダリングを完全にカーネル・モードで行うよう
にする。さらに、制御エージェントは重要なイベントの
通知を受けるので、必要に応じて制御を行うことができ
る。このようなイベントの例としては、処理の終了、デ
ータ・スターベーション事態などを含む。
【0047】この構成では、サウンド・データは前述し
たように、ディスク・ドライバ48によってディスク・
ドライブ46から読み取られる。リーダ・ドライバ50
はディスク・ドライバ48を制御し、従来の使い方と同
じようにNT層(NT layered)入出力アーキ
テクチャに従ってディスク・ドライバ48と「垂直方
向」に関連づけられている。「垂直方向」と「水平方
向」の用語は、NT層入出力アーキテクチャの一部とし
て現在行われているドライバ接続(垂直方向)と、サー
ド・パーティ制御エージェントによって動的に行われる
相互接続カーネル・モード・ドライバに従う接続(水平
方向)とを区別するために用いられている。
【0048】リーダ・ドライバ50は以下で説明する接
続メソッドに従ってデコンプレッサ・ドライバ52とも
「水平方向」に相互接続され、制御エージェント44に
よって管理されている。デコンプレッサ52は伸張をカ
ーネル・モードで行ってから、データとコントロールを
効果フィルタ54に引き渡す。効果フィルタは必要に応
じて効果プロセッサ56を利用して特殊効果を適用して
からデータとコントロールをサウンド・レンダリング・
ドライバ58に引き渡し、このドライバはサウンド・カ
ードを制御し、データをスピーカ62からのサウンドと
してレンダリングする。図2から理解されるように、処
理をカーネル・モードのままにしておくと、ユーザ・モ
ードとカーネル・モードとの間の複数の遷移がなくな
り、処理をユーザ・モードで行うと通常起こるオーバヘ
ッド量が減少するので、効率面の利点が得られる。
【0049】次に、図3を参照して説明する。図3は、
本発明の一実施の形態に従う相互接続ソフトウェア・ド
ライバに関係するシステム・オブジェクトの階層的性質
を示すロジック図である。ドライバ・オブジェクト64
は、メモリにロードされるときの、実行可能ソフトウェ
ア・コード・イメージを表すために作成される。ドライ
バ・コード・イメージはドライバの機能全体を含んでお
り、ドライバ・オブジェクト64はシステムに置かれて
いる場所、サポートされるドライバの種類などのイメー
ジに関する情報を含んでいる。
【0050】制御エージェントによって独立にアクセス
できる機能の各タイプ別に、デバイス・オブジェクト6
〜66N が入出力ディレクトリ構造に作成され、
これらのオブジェクトは利用可能で、ユーザ・モードの
クライアントによってアクセスされる異なる機能を表し
ている。これらは、フィルタまたは独立に利用できる他
の機能部分を表しているのが代表的である。ドライバ・
オブジェクト64とデバイス・オブジェクト66a 〜6
N は囲みボックス68で示すように、ドライバ・コー
ドのインストール時に作成される。
【0051】歴史的には、デバイス・オブジェクトは物
理ハードウェアの各エレメントごとに存在する。しかる
に、最新の入出力システムの柔軟性は、デバイス・オブ
ジェクトが完全にソフトウェアで実装されたフィルタを
表すことを可能にさせている。そのため、デバイス・オ
ブジェクトは専らソフトウェアで実装されたフィルタの
各インスタンスごとに作成することが容易になってい
る。従って、ソフトウェア・フィルタは、デバイス・オ
ブジェクトで表された各インスタンスがデバイス・オブ
ジェクトと1対1の対応関係をもつように実装すること
も、単一のデバイス・オブジェクトがより伝統的な手法
に従い、各々がフィルタのクライアント・インスタンス
を表している複数のファイル・オブジェクトを管理する
ように実装することも可能になっている。
【0052】デバイス・オブジェクト、図示の例では、
デバイス・オブジェクト66a 上には、ファイル・オブ
ジェクトが作成され、これはデバイス・オブジェクトで
表された機能の独立インスタンスを表している。デバイ
ス・オブジェクトはフィルタを表し、そのフィルタの複
数のインスタンスを管理するのに対し、ファイル・オブ
ジェクトは特定のエンティティによって使用される、そ
のフィルタの実際のインスタンスを表している。従っ
て、ファイル・オブジェクト70はデバイス・オブジェ
クト66a によって定義されたフィルタのインスタンス
である。
【0053】フィルタを使用するには、制御エージェン
トまたは他のユーザ・モード・クライアントは入出力デ
ィレクトリ構造内で利用可能なデバイス上でファイルを
オープンする。適切なコンテキスト情報を収めているフ
ァイル・オブジェクトが作成され、そのファイルへのハ
ンドルがユーザ・モード・クライアントに返される。フ
ァイル・オブジェクトは、作成時に「親」ファイル・オ
ブジェクトを指定することによって階層的に関係づける
ことが可能であるが、ファイル・オブジェクトはすべて
が同一デバイス・オブジェクトの子であるような、兄弟
(sibling) 関係も持っている。
【0054】ファイル・オブジェクト内のコンテキスト
情報は、ユーザ・モード・クライアントとの入出力イン
タフェースを管理する情報、ファイル・オブジェクトが
表わしているエンティティの「状態(state) 」などから
なっている。コンテキスト情報には、システムが必要と
する情報があり、さらに、特殊な意味をもたせることが
できる、ユーザ定義可能エリアも含まれている。ユーザ
定義可能エリアの使い方の例は、下述するバリデーショ
ン(validation)とIRPルーチング(routing)・メソッ
ドのインプリメーテンションの説明個所に示されてい
る。
【0055】接続ピン・インスタンスを提供するために
は、フィルタ・インスタンスを表すファイル・オブジェ
クト70が親として使用され、特定フィルタの接続ピン
・インスタンスを表す子ファイル・オブジェクトが作成
される。ファイル・オブジェクト70は接続ピン・ファ
クトリの定義と可用性に関して照会されるのに対し、実
際のファイル・オブジェクトは特定のファイル・オブジ
ェクトを適切な情報コンテキストとして使用して、ピン
・ファクトリの各インスタンスごとに作成され、接続ピ
ン・インスタンスが有効に、かつ正しく作成されるよう
にする。例えば、ファイル・オブジェクト72と74は
ファイル・オブジェクト70で表されたフィルタの接続
ピン・インスタンスを表し、ファイル・オブジェクト7
0と階層的に関係づけられている。それぞれファイル・
オブジェクト72と74で表された接続ピン・インスタ
ンスはフィルタ・インスタンス(ファイル・オブジェク
ト70で表されている)に入ったあとで、そこから出る
データ・パスにすることができ、これは一連のチェイン
・フィルタまたは他のドライバ機能を形成するときに他
の接続ピン・インスタンスと接続するために使用でき
る。
【0056】ピン・インスタンスがフィルタ・インスタ
ンスを表す別のファイル・オブジェクトと階層関係をも
つファイル・オブジェクトで表されて、ピン・インスタ
ンスのコンテキスト情報を提供するようにするのとまっ
たく同じように、他のファイル・オブジェクトをピン・
インスタンスと階層的に関係づけて他の機能を表すよう
にすると、正しいコンテキスト情報が得られるようにな
る。コンテキスト情報は、ピン・データ・フォーマッ
ト、通信タイプなどのように、作成時に使用される個々
のパラメータに従って、あるピン・インスタンスを他の
ピン・インスタンスと区別するために必要である。
【0057】バッファ割当てメカニズム、タイミング・
メカニズムなどのように、個別コンテキストかユーザ・
モードのコントロールのどちらかをハンドルを通して要
求する他の操作エンティティも、ファイル・オブジェク
トで表すことができる。さらに、ファイル・オブジェク
ト(例えば、特定の接続ピン・インスタンスと関連づけ
られたバッファ割当てメカニズム)間の階層関係は、必
要ならば、子ファイル・オブジェクトの作成時に親ファ
イル・オブジェクトを指定することにより確立すること
ができる。これらの親子関係は、操作エンティティを表
すファイル・オブジェクト間の関係と構造を決定するた
めに存在する。さらに、特定タイプの「親」ファイル・
オブジェクトはある種のタイプの「子」ファイル・オブ
ジェクトだけを作ることができるので、以下で説明する
ように作成バリデーション・メカニズムが必要になる。
この場合も、このようなファイル・オブジェクトは対応
するハンドルがユーザ・モードで利用可能になってお
り、これらのハンドルはNtCreateFileなどのシステムA
PIコールを通してクライアントに返される。
【0058】ファイル・オブジェクトへのハンドルはカ
ーネル・モード・ドライバと通信するために、制御エー
ジェントなどのユーザ・モード・クライアントによって
使用される。ファイル・オブジェクト、デバイス・オブ
ジェクト、およびドライバ・オブジェクトの階層的チェ
インは、入出力サブシステムが階層関係をもつファイル
・オブジェクトとデバイス・オブジェクトを通ってドラ
イバ・オブジェクトまで戻り、実際のドライバ・コード
に入るエントリ・ポイント(entry point) に到達するこ
とができるようにする。このようなエントリ・ポイント
はソフトウェア・ドライバ・コードの中の機能を指す参
照(例えば、ポインタ)になっている。さらに、特定の
ファイル・オブジェクトと、ソフトウェア・ドライバ・
コードへのエントリ・ポイントをもつドライバ・オブジ
ェクトとの間のオブジェクト通路(pathway) 上にあるオ
ブジェクトの各々は、入出力サブシステムがIRPを作
成するときに重要なコンテキスト情報のほかに、下述す
るルーチングおよびバリデーション・メカニズムに従っ
てIRPを正しくルーチングするときに使用されるデー
タ構造への参照も提供する。
【0059】ファイル・オブジェクトと他のシステム・
オブジェクトに対するハンドルはプロセス専用であり、
ユーザ・モード・プロセスが基礎となるオブジェクトと
通信するときの手段となる。注目すべきことは、ファイ
ル・オブジェクトなどの、基礎となる単一システム・オ
ブジェクトを参照するために複数のハンドルが作成でき
ることである。このことは、複数のアプリケーションが
ファイル・オブジェクトで表されたピン・インスタンス
に情報を供給できることを意味する。
【0060】異なるドライバを相互接続するとき重要と
なる情報エレメントの1つとして、デバイス・オブジェ
クト・スタックの深さ(depth) パラメータがある。これ
は特定のドライバ・オブジェクトのIRPスタック・ロ
ケーションを示している。このようにすると、入出力マ
ネージャを使用して、相互接続されたドライバ間で単一
のIRPを使用し受け渡しできるので、IRPを別々に
作成し、それを種々の相互接続ドライバ間で送信するよ
りもパフォーマンス向上を提供できることになる。別の
方法として、各ドライバは適切な入出力マネージャのコ
ールを通して、各連続通信ごとに新しいIRPを作成
し、各々の新IRPを相互接続されたドライバのチェイ
ン上の次のドライバへ送信させることも可能である。
【0061】次に、図4〜図6を参照して説明する。図
は、異なるタイプのファイル・オブジェクト作成のバリ
デーションと適切なハンドラへの入出力要求パケット
(I/ORequest Packet:IRP)のルーチングを可能に
するシステム・ドライバ・オブジェクト、デバイス・オ
ブジェクト、およびファイル・オブジェクトのエクステ
ンションを示している。図4は、1つまたは2つ以上の
フィルタまたは他のドライバ機能を実装している実行可
能コードを表すドライバ・オブジェクト76を示してい
る。ドライバ・オブジェクト内では、Windows NTアーキ
テクチャはソフトウェア・ドライバ開発者が用意した作
成ハンドラへの参照を要求している。この実施の形態に
よれば、マルチプレクシング・ディスパッチ機能(multi
plexing dispatch function)78は作成ハンドラとして
ドライバ・オブジェクト76から参照され、メッセージ
を作成されるファイル・オブジェクトのタイプに応じて
特定の作成ハンドラへルーチングするために使用され
る。マルチプレクシング・ディスパッチ機能78のオペ
レーションは図8に示すフローチャートを参照して以下
で説明する。
【0062】同じように、ドライバ・オブジェクトから
の他のハンドラはマルチプレクシング・ディスパッチ機
能を示し、どのように実装するかに応じて、これらは同
じ機能にすることが可能である。言い換えれば、以下で
詳しく説明するように、各タイプの入出力ハンドラ参照
(例えば、読取り、書込み、デバイス制御など)はデバ
イス・オブジェクト内のエクステンション・データとフ
ァイル・オブジェクト内のコンテキスト情報を使用し
て、メッセージを適切なハンドラへルーチングするマル
チプレクシング・ディスパッチ機能を指している。バリ
デーション・テーブルを参照するデバイス・オブジェク
ト内のエクステンション・データは、作成オペレーショ
ンで親ファイル・オブジェクトの指定がないとき使用さ
れる。指定があれば、親ファイル・オブジェクトのコン
テキスト情報は正しいバリデーション・テーブルを示し
ている。
【0063】図5は、ドライバ開発者によって所望によ
り利用でき、ドライバ専用情報を含んでいる特定のデバ
イス・エクステンション・エリア82をもつドライバ・
オブジェクト80を示している。ドライバ・オブジェク
ト80のデバイス・エクステンション・エリア82内の
定義されたロケーションには、ファイル・タイプ・バリ
デーション・テーブル84と呼ばれ、ファイル・オブジ
ェクト・タイプ86のストリング表現を含んでいるデー
タ構造への参照と、表現される各ファイル・タイプ別の
関連する作成ハンドラ88への参照が置かれている。作
成マルチプレクシング・ディスパッチ機能はファイル・
タイプ・バリデーション・テーブル84を使用して、作
成されるファイル・オブジェクト・タイプを検査し、そ
のあと、コントロールを適切な作成ハンドラへ引き渡
す。これについては、以下の図8の説明個所で詳しく説
明する。検査されるストリングはIRP作成要求に見出
され、ユーザ・モードのNtCreateFile関数コールと共に
使用されるファイル名ストリングから創られる。NtCrea
teFile関数コールは、ピン・インスタンスまたは他のメ
カニズムを作成するためにユーザ・モード関数セルの中
で行われる。
【0064】図6は、ソフトウェア・ドライバ開発者が
使用するために解放されているファイル・コンテキスト
・エリア92をもつファイル・オブジェクト90を示し
ている。参照はファイル・コンテキスト・エリア92か
らIRP要求ハンドラ・テーブル94へ行われる。IR
P要求96の異なるタイプは特定のハンドラ98と関連
づけられ、適切なマルチプレクシング・ディスパッチ機
能はこの情報を使用して正しいハンドラにアクセスす
る。正しい作成ハンドラを決定する場合には、ファイル
・タイプ・バリデーション・テーブル100と呼ばれる
データ構造が参照され、そこには、ファイル・オブジェ
クト・タイプ102のストリング表現と、表現される各
ファイル・タイプ別の関連する作成ハンドラへの参照1
04が入っている。子ファイル・オブジェクト(つま
り、デバイス・オブジェクトではなく別のファイル・オ
ブジェクトを親としてもつファイル・オブジェクト)の
場合は、タイプはファイル・オブジェクト・タイプ10
2内のストリングと比較されるストリングで表されてい
る。一致するものが見つかると、関連する作成ハンドラ
は、参照104のうち、一致したファイル・オブジェク
ト・タイプ・ストリングと関連づけられている参照を使
用してアクセスされる。一致するものが見つからなけれ
ば、要求は無効であるので、エラー表示が出されること
になる。
【0065】次に、図7を参照して説明すると、図は作
成バリデーションとメカニズムをセットアップするため
のインストレーション・プロシージャを示している。ス
テップ106で、インストール・プログラムは適切なマ
ルチプレクシング・ディスパッチ機能への参照をドライ
バ・オブジェクトの中に作成する。図4に示すように、
作成ハンドラは汎用マルチプレクシング・ディスパッチ
機能を指している。同様に、ドライバ・オブジェクト7
6の中の他のすべてのハンドラ参照は、特定ハンドラと
密接な関係をもつ他の汎用(generic) マルチプレクシン
グ・ディスパッチ機能を必要に応じて指している。別の
方法として、各ハンドラ参照は同一マルチプレクシング
・ディスパッチ機能を指すことも可能であり、その場合
は、このディスパッチ機能はIRP要求を処理したあ
と、それを適切なハンドラへルーチングすることができ
る。この方法によるマルチプレクシング機能は異なる種
類の要求(例えば、作成、書込みなど)を受け付ける必
要があるため、複雑化することが避けられない。
【0066】次に、ステップ108で、ソフトウェア・
ドライバ実行可能コードのインストールの一部として作
成された各デバイス・オブジェクトは、図5に示すよう
にファイル・タイプ・バリデーション・テーブル84を
参照するように調整される。最後に、ステップ110
で、IRP要求の処理は、適切なデバイス・オブジェク
ト80から参照されたファイル・タイプ・バリデーショ
ン・テーブル84を使用してマルチプレクシング・ディ
スパッチ機能から開始される。
【0067】ファイル・オブジェクトが作成されると、
適切なIRPディスパッチ・テーブル94が作成され、
必要ならば、インデックスされたファイル・オブジェク
ト・タイプ・バリデーション・テーブル100と一緒に
参照される。ファイル・オブジェクト・タイプ・バリデ
ーション・テーブルの作成は、ファイル・オブジェクト
・タイプに従って用意された作成ハンドラ内で行われ
る。データ構造が作成され、これはIRPディスパッチ
・テーブル94とファイル・オブジェクト・タイプ・バ
リデーション・テーブル100を表しており、それを指
す参照は作成される特定ファイル・オブジェクト90の
ファイル・コンテキスト情報92と一緒に特定ロケーシ
ョンにストアされる。
【0068】次に、図8を参照して説明すると、図は作
成マルチプレクシング・ディスパッチ機能のオペレーシ
ョンとそのバリデーション・メカニズムを示すフローチ
ャートであり、そこには、システム・ドライバ・オブジ
ェクト、デバイス・オブジェクト、およびファイル・オ
ブジェクトから参照されるデータ構造との相互作用も示
されている。ステップ112で、ユーザ・モード・プロ
セスはファイル・オブジェクトを作成する入出力要求を
送信する。この入出力作成要求はNtCreateFileのシステ
ムAPIを呼び出すことによって行われる。ステップ1
14で、入出力マネージャはドライバ・オブジェクト7
6内の参照に基づいてIRPをマルチプレクシング・デ
ィスパッチ機能78に送信する(図4参照)。
【0069】マルチプレクシング・ディスパッチ機能7
8が作成要求のIRPを受け取ると、ステップ116で
テストが行われ、親ファイル・オブジェクトがあるかど
うかが判断される。この判断を行うために必要な情報は
IRP自体の中にあるが、これはユーザ・モード・プロ
セスによって元来用意されたものである。ユーザ・モー
ド・プロセスは「親」ファイル・オブジェクトを参照す
るハンドルを作成要求の一部として用意し、NTシステ
ムは「親」ファイル・オブジェクトへの正しい参照をも
つIRPを作成する。
【0070】親ファイル・オブジェクトがなければ、右
へのブランチがとられ、マルチプレクシング・ディスパ
ッチ機能78は適切なデバイス・オブジェクト80から
のデバイス・エクステンション82を使用して、ファイ
ル・タイプ・バリデーション・テーブル84をステップ
118で参照する(図5参照)。バリデーション・テー
ブル84を使用して、マルチプレクシング・ディスパッ
チ機能78は要求の中のストリングをファイル・オブジ
ェクト・タイプ86のストリングと比較することによっ
て、ステップ120でファイル・オブジェクト・タイプ
を検査する。
【0071】ステップ122でストリングが一致してい
ると判断されると、適切な作成ハンドラがステップ12
4でアクセスされる。一致していなければ、作成要求は
ステップ126で拒否される。ステップ124でアクセ
スされた作成ハンドラはステップ126でファイル・オ
ブジェクトを作成するか、あるいは作成させる。作成さ
れたファイル・オブジェクトを使用して、適切な作成ハ
ンドラは、以前に作成していたIRPディスパッチ・テ
ーブル94を指すファイル・オブジェクト参照をファイ
ル・コンテキスト92の中に作成する。
【0072】再びステップ116に戻って、親ファイル
・オブジェクトが存在するかどうかが判断される。親フ
ァイル・オブジェクトが存在するとステップ116で判
断され、それが作成要求に関連するIRPに入っていれ
ば、マルチプレクシング・ディスパッチ機能78は親フ
ァイル・オブジェクト90からのファイル・コンテキス
ト92を使用して、ステップ130でIRPディスパッ
チ・テーブル92を参照する(図6)。作成要求の場合
は、マルチプレクシング・ディスパッチ機能78はステ
ップ132でファイル・タイプ・バリデーション・テー
ブル100を参照する。ファイル・タイプ・バリデーシ
ョン・テーブル100を使用して、マルチプレクシング
・ディスパッチ機能78は、上記と同じように、要求の
中のストリングをファイル・オブジェクト・タイプ10
2のストリングと比較することによってステップ133
でファイル・オブジェクト・タイプを検査する。
【0073】ストリングが一致しているとステップ13
4で判断されると、適切な作成ハンドラがステップ13
8でアクセスされる。一致していなければ、作成要求は
ステップ136で拒否される。適切な作成ハンドラを使
用して、ファイル・オブジェクトは140で作成され、
作成ハンドラは新しく作成されたファイル・オブジェク
トの新しいIRPディスパッチ・テーブル94を作成
し、新しく作成されたIRPディスパッチ・テーブル9
4を指す参照を新しく作成されたファイル・オブジェク
ト90のファイル・コンテキスト・エリア92の中にス
テップ142で作成する。注意すべきことは、親ファイ
ル・オブジェクトおよび有効に作成された子ファイル・
オブジェクトとの相互作用を説明するために、どちらの
場合も、図6に示す同じファイル・オブジェクト構造が
使用されていることである。どちらの場合も同じ構造が
存在するが(新しいファイル・オブジェクトが作成され
たあと)、これらはその使い方が異なり、含んでいる情
報も異なっている。
【0074】接続ピン・インスタンスが作成されるとい
つでも、接続ピンIDが引き渡され、これはピン・イン
スタンスの作成を「サポート」するファイル内のピン・
ファクトリを示している。この分野の精通者ならば理解
されるように、接続ピンIDは、ファイル・オブジェク
トが検査されるのとまったく同じように、バリデーショ
ンテーブルでストリングとして検査することも可能であ
り、また、その実装方法もさまざまである。
【0075】異なるドライバ間の接続を行うためには、
あるドライバがそのような相互接続をサポートしている
ことを確かめるための共通メカニズムが必要である。こ
の共通メカニズムは、接続ピン・ファクトリ機能を含む
フィルタ機能を明らかにすることを可能にするものでな
ければならない。さらに、この種のメカニズムは、ドラ
イバ開発者の柔軟性を向上するように拡張可能であるこ
とも必要である。
【0076】コンプライアント・ドライバを定義し、機
能を明らかにすることを可能にするために本実施の形態
で選択されている1つのメカニズムは関連アイテムの
「集合」と名づけられている。これは既存の入出力通信
メカニズムと一緒に使用すると便利なメカニズムであ
る。集合は集合全体を特定するGUID(グローバルに
ユニークな識別子)と集合内の各機能エレメントのRU
ID(相対的にユニークな識別子、例えば、集合自体内
の相対的な識別子)を持つものとして論理的に定義され
ている。集合識別子および選択されたRUIDアイテム
と一緒にオペレーションするために必要な他のデータ構
造は、フィルタ・ハンドルをパラメータとして使用して
入出力制御コールの一部として引き渡される。機能の完
全なシステムを実装するためには、少数のIOCTLを
割当てるだけで十分である。実装されるとき、3つの異
なる種類の集合がその機能に応じて確立されるので、必
要になるIOCTLは総計4個である。他の実装では、
集合の使い方が異なる場合がある。特定のIOCTL
は、選択されたエレメント(RUIDを使用する)をな
んらかの方法で解釈または使用するように入出力制御の
ハンドラに通知する。さらに、制御フラグをGUIDお
よびRUIDと一緒に渡して、制御情報をもっと詳しく
指定することができる。
【0077】最初の集合タイプはプロパティ集合であ
り、これはドライバ内または関連ハードウェア上に置か
れている値または設定値と一緒に使用される。そのよう
な設定値の例としては、転送レート、ボリューム・レベ
ル(音量)などがある。1つのIOCTLがプロパティ
集合と関連づけられ、制御フラグは"get" プロパティ・
コマンドと"set" プロパティ・コマンドとを区別してい
る。このようにすると、同じデータ構造が特定のプロパ
ティを設定または取得するように使用でき、ドライバは
必要なアクションを使用されたIOCTLに基づいて決
定することができる。正しいプロパティは、ユニークな
GUIDとRUIDの組合せからなる集合識別子(set i
dentifier)によって特定される。
【0078】メソッド集合は使用されるもう1つの集合
タイプであり、これはドライバによって実行できるアク
ションの集合である。メソッド集合を特定するために必
要なIOCTLは1つだけであり、アクチュエートされ
る正しいメソッドは集合識別子のユニークなGUIDと
RUIDの組合せによって特定される。メソッドはドラ
イバを制御するために使用され、ドライバを使用するた
めの初期化、バッファのクリアといった機能を含んでい
る。
【0079】イベント集合は、デバイス変更通知、デー
タ・スターベーション通知などのドライバ処理や、ユー
ザ・モード・アプリケーションで使用すると便利である
集合によって定義された他の通知に関連するイベントを
管理するために使用される。2つのIOCTLが使用さ
れ、1つは特定のイベントをイネーブルにするためのも
のであり、もう1つは特定のイベントをディスエーブル
にするためのものである。RUIDで識別された、与え
られたイベントに必要なデータ構造は、イベントをイネ
ーブルにするか、ディスエーブルにするかに関係なく共
用することができる。
【0080】集合を使用するには、入出力制御オペレー
ションは特定のIOCTLおよび集合GID、 RUID
をもつデータ構造と他の必要なデータ(例えば、制御フ
ラグ、データ構造など)を指す参照を使用して開始され
る。例えば、サウンド・カード・ドライバでボリューム
・プロパティを設定することは、入出力制御オペレーシ
ョンをプロパティ集合IOCTL、集合プロパティ・オ
ペレーションを示す制御フラグ、ボリューム設定値をも
つプロパティ集合の適切なGUID、ボリューム・プロ
パティを示しているその集合内の特定RUID、および
新しいボリューム設定値を使用することを必然的に伴な
う。
【0081】サポートされる集合についてタイプ別に照
会するには、ヌルGUIDとサポートされる集合の列挙
を示す制御フラグとをもつ、特定の集合タイプのIOC
TL(例えば、プロパティIOCTL、メソッドIOC
TL、またはイベント・イネーブルIOCTL)が入出
力コマンドの一部として出され、サポートされる集合G
UIDのリストが返される。ある集合内のサポートされ
るプロパティ、メソッドまたはイベントについて照会す
るには、集合GUID、集合タイプIOCTL、ヌルR
UID、およびサポートされるエレメントの列挙を示す
制御フラグが入出力オペレーションと共に使用される。
サポートされるRUIDのリストは入出力オペレーショ
ンの結果として返される。このリストから、サード・パ
ーティ・エージェントは、実装されている集合のどのオ
プション・エレメント(もしある場合)がサポートされ
るかを判断することができる。
【0082】GUIDでユニークに識別された集合の仕
様書は、ドライバ開発者とサード・パーティ制御エージ
ェントのどちらもが実装ガイドとして利用できるメカニ
ズムをドキュメント化している。サード・パーティ開発
者は、あるドライバの機能を照会に対する応答に基づい
て知り、事前プログラムされた知識を抽象的集合定義に
基づいて知ることになる。同様に、ドライバ開発者は、
知った機能をどのようなサード・パーティ・エージェン
トに対して提供する集合または集合グループを実装する
ときのガイドとして抽象的集合定義を使用することがで
きる。
【0083】ここで説明している接続機能を提供するた
めには、コンプライアント・ドライバはある種の集合を
サポートしていなければならない。以下の表は、プロパ
ティ集合フォーマットでサポートされ、本発明を実装す
るときに使用できるいくつかの重要な情報を示してい
る。最初の表は、フィルタによって実装される接続ピン
・ファクトリに関するプロパティに関し、2番目の表
は、特定の接続ピン・ファクトリをテンプレートとして
使用して作成される実際の接続ピン・インスタンスに関
するプロパティを示している。
【0084】
【表1】
【0085】
【表2】
【0086】
【表3】
【0087】
【表4】
【0088】
【表5】
【0089】
【表6】
【0090】上記の表は単なる例示であり、これに限定
されるものではない、この分野の精通者ならば理解され
るように、異なるドライバ間の接続を作成するためには
多数の異なるプロパティとスキーマを実装することが可
能である。1つの重要な要素は標準化係数(standardiza
tion factor)であり、異なるドライバ製造者または開発
グループは同一のプロパティ集合を実装する能力をもっ
ているので、相互接続できるドライバを作成できるよう
にすることである。
【0091】もう1つの有用なプロパティ集合は、ある
フィルタ上の入力と出力の接続ピン・ファクトリの内部
関係に関するトポロジ情報を与える。この情報はあるフ
ィルタ上の入力ピン・ファクトリおよび対応する出力ピ
ン・ファクトリの関係だけでなく、入力と出力のピン・
ファクトリの間でどのようなタイプの処理が行われるか
も記載している。行われる処理の例としては、異なるデ
ータ変換、データ伸張、エコー打消し(cancellation)な
どがある。このような情報は複数のフィルタを使用して
仮定上の接続パスをトレースしてから実際の接続ピン・
インスタンスおよび接続を作成する自動化フィルタ・グ
ラフ作成機能で使用すると、便利である。基本的には、
トポロジ情報はフィルタの内部構造を説明し、これをプ
ロパティ集合メカニズムを通してサード・パーティ・エ
ージェントからの照会に公開する。
【0092】従って、コンプライアント・ドライバは指
定されたプロパティ集合を実装しているものにすぎな
い。そのため、サード・パーティ制御エージェントは、
あるプロパティ集合がサポートされていることが分かっ
たとき、コンプライアント・フィルタに対し照会と設定
を行うことができる。全体目標は、異なるフィルタを1
つに接続してフィルタ・グラフを作る方法に関する十分
な情報を得ることである。
【0093】汎用集合メカニズムを使用すると、最小限
の機能を実装してコンプライアント・ドライバのシステ
ムをサポートできるが、その場合でも、拡張性は無制限
である。集合は、特定の集合が実装されている限り、相
互操作可能で相互接続可能なドライバのシステムを作成
するために多数の異なるドライバ開発者によって独立に
コーディングできる仕様書の中で定義することができ
る。さらに、この仕様書には、サポートしなければなら
ない必須のプロパティ、メソッド、およびイベントを定
義できるだけでなく、ドライバ機能と拡張機能に応じて
実装できるオプションのプロパティ、メソッド、および
イベントも定義できる。最小限に要求される基本的共通
性のほかに、ドライバ開発者は独自の集合を定義し、こ
れらにGUIDを割当てることにより追加の機能を組み
入れることも可能である。
【0094】次に、図9および図10を参照して説明す
る。図は2つのカーネル・モード・フィルタを接続する
プロセスを図形化して示している。図9はロジック・ブ
ロック説明図であり、そこでは各フィルタ・インスタン
スと接続ピン・インスタンスはファイル・オブジェクト
で表されている。図10はファイル・オブジェクトおよ
び適切な接続を作成するときのステップを示すフローチ
ャートである。
【0095】ステップ144からスタートして、フィル
タA146のインスタンスおよびフィルタB148のイ
ンスタンスはユーザ・モード・エージェントによって作
成される。これらは特定のデバイスでファイルを作成す
る標準ファイル・システムAPIを使用して作成され
る。フィルタA146とフィルタB148がコンプライ
アント・フィルタまたはドライバとなっているのは、こ
れらが適切なプロパティ、メソッド、およびイベント集
合を実装して接続ピン・インスタンスの作成をサポート
し、サポートされる集合とそのフィルタ用に定義された
接続ピン・ファクトリに関してそれぞれのフィルタの機
能に照会するようになっているからである。
【0096】サード・パーティ制御エージェントは、ス
テップ150でフィルタA146とフィルタB148に
それぞれ照会し、利用可能な接続ピン・ファクトリおよ
びそれから作成できる接続ピン・インスタンスの属性を
判断する。これらの属性には、前述したように、各フィ
ルタ146と148のそれぞれのピン・ファクトリのタ
イプ別の接続フォーマットとデータ・フォーマットがあ
る。照会は、以下で詳しく説明する集合ベース照会メカ
ニズムを使用して行われる。
【0097】上記情報の照会を終えると、サード・パー
ティ制御エージェントは、以前に照会したデータ・フォ
ーマットと接続フォーマットの範囲に基づいて最適接続
フォーマットを決定する。この決定はステップ152で
行われ、選択した接続パスの要求事項に応じて同じフィ
ルタをサード・パーティ・エージェントが異なった使い
方をできるようにする。サード・パーティ制御エージェ
ントはデータ交差プロパティ(data intersection prope
rty)、トポロジ情報、および接続ピン・ファクトリを両
方のフィルタで使用して、作成される実際のフィルタ・
グラフに応じてデータ・フォーマットと接続配置の最良
の選択方法を決定する。
【0098】入力フィルタ・ピン・インスタンス154
はステップ152で判断された最適検出情報を使用し
て、ステップ156でサード・パーティ・エージェント
によって作成される。入力ピン・インスタンス154は
ファイル・オブジェクトであるので、ハンドルが作成プ
ロセスから返されるが、これは入出力要求を入力インス
タンス154へ送るために使用できる。さらに、入力ピ
ン・インスタンス154の作成が有効性の検査をされて
いるが、この作成には、図4〜図6、図7および図8を
参照して前述したルーチングおよびバリデーション・メ
カニズムが使用される。
【0099】接続を完成するために、出力ピン・インス
タンス158は、以前に作成された入力ピン・インスタ
ンス154のハンドルをNtCreateFileコールの中でパラ
メータとして使用してステップ160で作成される。出
力ピン・インスタンス158がこのようにして作成され
る効果として、システム・ファイル管理機能と入出力管
理機能を使用して内部IRPスタック構造が作成され
る。このスタック構造により、オリジナルの書込みコマ
ンドは、さまざまな方法で接続された接続ピン・インス
タンスとフィルタによって適当な順序で連続処理するこ
とが可能になるので、異なるフィルタ間の直接データ・
フローが容易化される。これを行うためには、入力ピン
・インスタンスを供給する関連出力ピン・インスタンス
の前に入力ピン・インスタンスが作成されていることが
必要である。
【0100】デバイス・オブジェクトのスタック深さパ
ラメータは、このドライバに送られるIRP用にスタッ
ク・ロケーションをいくつ作成するかを制御する。スタ
ック深さパラメータは、デバイス・オブジェクトが初め
て作られるときは1つであると想定されているが、複数
のドライバが1つにチェイニングされているかどうかに
応じて、あとで変更することも可能である。現システム
では、この変更は、必要ならば、出力ピン・インスタン
スが初期「停止」状態から「取得」または他の状態に遷
移するとき行われる。接続ピン・インスタンスの状態遷
移はIRPを正しく作成し、処理するための正しいスタ
ック深さパラメータ情報を決定するメカニズムである。
【0101】チェイニングされた接続ピン・インスタン
ス集合を正しく割当てるためには、接続ピン・インスタ
ンスを特定の順序で停止状態から出るように遷移させる
必要がある。つまり、最後の入力ピン・インスタンス
(この例では、入力ピン・インスタンス154)から始
まって、関連の(例えば、接続された)出力ピン・イン
スタンス(この例では、出力ピン・インスタンス15
8) まで連続的に逆方向に戻っていく必要がある。多数
のフィルタが1つにチェイニングされていれば、最も深
いフィルタまたはブリッジの入力ピン・インスタンスが
遷移の開始ポイントであって、ブリッジまたはフィルタ
上の初期出力ピン・インスタンスが設定されるまで逆方
向に連続的に構築していかなければならない。言い換え
れば、停止状態から出る遷移はチェインを逆昇るように
行われ、各接続ピン・インスタンスが前の接続ピン・イ
ンスタンスの後で必要になるスタック・サイズを得るよ
うにしなければならない。代表例として、必ずしもそう
する必要はないが、接続ピン・インスタンスは停止状態
から取得状態へ遷移するが、以下での説明の便宜上、取
得状態への遷移はスタック深さパラメータの調整に関し
ては、停止状態から出る遷移と同じ目的を果たすように
なっている。
【0102】すべてのピン・インスタンスが取得状態に
なったあとは、ストリーム読取りと書込みをフィルタ・
グラフに対して出すことができる。なお、注目すべきこ
とは、ここで説明しているシステムが、関連入力と出力
ピン・インスタンスの接続をどの順序でも行うことがで
き、停止状態からの遷移だけはボトムアップ方式、つま
り、最も深いものから先に行わなければならないことで
ある。さらに、フィルタ・グラフは初期作成後に変更が
行えるように再構成可能になっている。変更が行われる
ときは、状態遷移は停止状態にある接続ピン・インスタ
ンスだけで行い、正しいスタック深さパラメータ情報が
得られるようにする必要がある。
【0103】フィルタ上に見出される接続ピン・ファク
トリは、フィルタが特定フォーマットでデータを消費お
よび/または作成できる場所を表している。例えば、特
定の接続ピン・ファクトリは、16ビットの44キロヘ
ルツPCMオーディオや8ビットの22キロヘルツPC
Mオーディオなどの、いくつかの異なるデータ・フォー
マットをサポートすることができる。前述したように、
接続ピン・ファクトリやそのデータ・フォーマットなど
の異なる機能については、適切なプロパティ集合メカニ
ズムとシステム入出力機能を使用してフィルタから照会
することができる。実際の接続ピン・インスタンスはピ
ン・ファクトリから受信した情報に基づいて作成され
る。
【0104】単一のストリーム書込みまたはストリーム
読取りオペレーションがユーザ・モード・エージェント
から出されると、接続されたフィルタを通してデータの
連続処理が行われるストリーミング環境では、IRP制
御用の2つのメイン・メソッドがNTオペレーティング
・システムのネーティブ機能の一部として使用すること
ができる。第1のメソッドでは、個別IRPは各フィル
タによって作成され、次のフィルタへ送られて処理さ
れ、このフィルタは新しいIRPを作成し、チェインを
下って次々と処理されていく。他のメソッドでは、単一
のIRPが使用され、入出力マネージャと相互作用する
ために用意された標準プロシージャを使用して連続フィ
ルタ間で受け渡しされていく。チェイン上の各連続フィ
ルタごとに新しいIRPを作成していく第1のメソッド
が使用される場合は、フィルタ間の相互接続順序が重要
でないのは、フィルタはIRPのデスティネーション(d
estination) だけを知っていればよく、入出力マネージ
ャをコールしてIRPを指定のフィルタへ送ることがで
きるからである。IRPが再使用される場合に重要なこ
とは、停止状態からの接続ピン・インスタンスの遷移が
再使用IRPを受け取る最後のフィルタから始まるよう
に行われ、再使用IRPを受け取る最初のフィルタま
で、または処理のためにIRPを作成したフィルタまで
逆方向に処理していくことである。
【0105】相互接続カーネル・モード・フィルタの本
実施の形態と実装例は、IRP共用を利用してドライバ
開発の複雑さを軽減し、より堅牢なドライバが作成され
ることを可能にし、処理を効率化するという利点があ
る。「ボトム・アップ」のピン・インスタンス状態遷移
パスは、正しいスタック順序が連続ドライバによって処
理されるIRPに作成され、各ドライバ・オブジェクト
が適切なスタック深さパラメータ集合をもつことを保証
する。さらに、受信側入力ピン・ファクトリの現状態
は、状態遷移シーケンスを正しくたどっていたかどうか
を確かめるためにチェックされる。そのような理由か
ら、特定の接続ピン・ファクトリの通信プロパティは起
こり得るフロー方向を判断し、接続ピン・インスタンス
の状態遷移を正しく分配する上で支援する。
【0106】出力ピン・インスタンス(またはIRPソ
ース)を作成するとき、別のフィルタ上の入力ピン・イ
ンスタンス(またはIRPシンク(sink))を表すファイ
ル・オブジェクトへの参照はNtCreateFileコールの一部
として引き渡される。適切な作成ハンドラはマルチプレ
クシング・ディスパッチ機能とデバイス・オブジェクト
/ファイル・オブジェクト階層を使用して、前述したよ
うに実行される。この作成ハンドラは入力ピン・インス
タンスをもつフィルタ(例えば、図9のフィルタB14
8)のデバイス・オブジェクトを、入力接続ピン・イン
スタンス・ファイル・オブジェクト(例えば、入力ピン
・インスタンス154)を通してアクセスすることがで
きる。デバイス・オブジェクトから、前のスタック深さ
パラメータを読み取ることができ、出力ピン・インスタ
ンスをもつフィルタのデバイス・オブジェクトのスタッ
ク深さパラメータが増加される。例えば、フィルタA1
46に関連するデバイス・オブジェクトは、図9に示す
接続ではフィルタB148に関連するデバイス・オブジ
ェクトのそれから増加されるスタック深さパラメータを
もっている。これは停止状態から出る遷移のとき行われ
るのが通常であり、IRPは接続ピン・インスタンスが
停止状態にある間はルーチングされない。
【0107】フィルタがIRPを処理するとき、その特
定フィルタ用に指定された情報を含んでいる、IRPス
タック内のどのスタック・フレームまたはロケーション
をアクセスすべきかを、関連デバイス・オブジェクトの
スタック深さパラメータを参照するか、あるいはそれを
使用することによって知る。さらに、現フィルタは、デ
バイス・オブジェクトのスタック深さパラメータを減ら
して次のフィルタのIRPスタック・ロケーションに位
置づけることによって、処理チェイン上の次のフィルタ
用のIRPを準備する。
【0108】フィルタ・コードはIRPスタック内の次
のロケーションを準備し、入出力マネージャをコールし
てIRPを、指定された通りに次のフィルタに渡すこと
を受け持っている。このようにすると、フィルタは、特
定の接続ピン・インスタンスを表す、どのファイル・オ
ブジェクトがIRPと関連データを受け取って処理する
かを指定することができる。従って、IRPの順次処理
のためにそれぞれのデバイス・オブジェクトをスタック
するためのIoAttachDeviceのような標準入出力マネージ
ャ・コールは使用されない。
【0109】注目すべきことは、接続ピン・インスタン
ス間の接続を作成することは、その接続を表すために新
しいデバイス・オブジェクトを作成することを意味しな
いことである。基礎となる単一のデバイス・オブジェク
トはフィルタのインスタンスとそのフィルタ上のすべて
の接続ピン・インスタンスをサポートするために使用さ
れる。正しいデータ処理のために必要な具体的情報はフ
ァイル・オブジェクトのコンテキスト・エリアに保存さ
れていて、コンテキスト情報はそのまま残されている
が、非ページ・メモリ使用量は最小限に保たれている。
さらに注目すべきことは、IRPベースの媒体について
説明してきたが、相互接続フィルタ間の通信のための他
の媒体も使用できることである。そのようなものとし
て、非ホスト・ハードウェアとハードウェア間通信での
直接関数コールがある。
【0110】次に、図11と図12および図13を参照
して、図1(従来技術)と図2(相互接続カーネル・モ
ード・ドライバのハイレベル・ロジック図)に示すソフ
トウェア・ドライバの正しい作成、接続、および状態遷
移順序について説明する。図11はボックス162で囲
んだロジック構造とそこに含まれる処理ステップを示し
ている。図12は接続ピン・インスタンスを作成して、
カーネル・モード・フィルタの相互接続を完成する様子
を示し、図13に示すフローチャートにボックス164
で囲んだ処理ステップを含んでいる。
【0111】すべての相互接続が行われている図12の
状態にあるとき、カーネル・モード・フィルタ・システ
ムは処理を行うために読み書きの準備状態にある。入出
力システムは正しい状態遷移プロセスによって正しく設
定されたIRPスタック情報を使用して、ストリーム読
取りと書込みをそれぞれの接続ピン・インスタンスを通
して異なるフィルタ・エレメントに引き渡す。なお、グ
ラフを作成するために使用されたエージェント以外の、
ある種の外部ソフトウェアは、ブリッジまたはフィルタ
自体とハードウェアも含めて、ストリーム読取りとライ
トのデータを提供する。
【0112】ステップ168からスタートしたあと、制
御エージェント170はステップ180で、リーダ・フ
ィルタ172、デコンプレッサ・フィルタ174、効果
フィルタ176、およびサウンド・レンダリング・フィ
ルタ178のインスタンスを作成する。さらに、リーダ
・フィルタ172とディスク・ドライバ182との間の
接続が行われて、データがディスク・ドライブから持ち
込まれるようにする。各フィルタ・インスタンスの作成
は標準入出力コールを使用してデバイス入出力ディレク
トリ階層に見出される適切なデバイス上のファイルをオ
ープンすることにより、ユーザ・モード制御エージェン
ト170によって行われる。このコールからは、各フィ
ルタのインスタンスを表すファイル・オブジェクトへの
ハンドルが返される。
【0113】ステップ184で、サード・パーティ・エ
ージェントは効果フィルタ172、デコンプレッサ・フ
ィルタ174、効果フィルタ176、およびサウンド・
レンダリング・フィルタ178に照会し、接続ピン・フ
ァクトリの機能を判断する。これらの機能は、どのよう
な種類の入出力ピン・インスタンスが作成できるか、特
定のフィルタは各接続ピン・ファクトリのインスタンス
をいくつサポートするか、各接続ピン・ファクトリでサ
ポートされるデータ・フォーマット、通信パスの媒体ま
たはタイプなどがある。これらの機能は以前に詳しく説
明したプロパティ集合メカニズムを使用して照会され、
カーネル・モード・フィルタは、適切な「集合」(例え
ば、プロパティ集合)をサポートしているのでアーキテ
クチャに従っていることが前提になっている。
【0114】ステップ184でのこのようなすべての照
会情報は、チェインニングされた接続パスが、適切な接
続ピン・インスタンスを作成し、接続することによりそ
れぞれのフィルタ間で可能であるかどうかを判断するた
めに使用される。サード・パーティ・エージェントは、
相互接続のために必要なピン・インスタンスのタイプを
判断し、与えられた目的を達成するフィルタ・グラフを
作成する。
【0115】サポートされるデータ・フォーマットに基
づく接続フォーマットの決定はステップ186で行われ
る。フィルタ上のトポロジ情報、データ・フォーマッ
ト、およびデータ交差プロパティを使用すると、仮定上
の(hypothetical)フィルタ・グラフを作成することがで
きる。接続順序は重要でないので、そのようにする必要
はないが、フィルタ・グラフを作成しようとするとき時
間を節約することができる。この仮定上のフィルタ・グ
ラフがエラーなしで作成されるのであれば、サード・パ
ーティ・エージェントは、相互接続する接続ピン・イン
スタンスの作成を信頼して行うことができるという安心
が得られる。実際のピン・インスタンスが作成されてい
なければ、ある種の照会からはエラーが返されるので、
かかる接続ピン・インスタンスを作成してから仮定上の
フィルタ・グラフを作成するようにすると、実行可能で
あるとの信頼できる指示が返されることになる。この場
合も、仮定上のフィルタ・グラフは相互接続を行う前に
テストすることが可能である。
【0116】正しい接続情報が分かっているとステップ
186で決定されると、入力ピン・インスタンスを作成
し、相互接続して、図13のボックス164で囲まれた
処理ステップのループで表すことができる。このループ
はデータ・ストリームのソースから最も遠くに離れた入
力ピン・インスタンスから始まる処理ステップを含んで
いる。この最後の入力ピン・インスタンスは「最も深
い」ピン・インスタンスと呼ばれ、これは最初に作成さ
れ、そのあとに関連する出力ピン・インスタンスを続け
ることができる。従って、接続は、以前に作成された入
力ピン・インスタンスのハンドルを使用して出力ピン・
インスタンスを作成したものである。
【0117】このパターンは、すべての入力ピン・イン
スタンスが関連出力ピン・インスタンスとの接続の前
に、それ以後連続して作成されるように続けられる。こ
のような接続シナリオは単なる例示であり、それぞれの
出力と入力ピン・インスタンスを接続して、本発明によ
るカーネル・モード・フィルタ間の接続を形成する他の
可能な方法を限定するものではない。フィルタは、入力
ピン・インスタンスからのハンドルが別のフィルタ上の
接続された出力ピン・インスタンスの作成期間に使用さ
れる限り、実装に従ってどの順序でも接続することが可
能である。さらに、前述したように、初期作成後(およ
び使用後も)フィルタ・グラフに変更を行うことが可能
である。
【0118】ループの最初の繰り返しでは、入力ピン・
インスタンス188はステップ190で作成される。作
成機能からハンドルを受け取ると、サード・パーティ制
御エージェント170はそのハンドルをNtCreateFileコ
ールでパラメータとして使用してステップ194で出力
ピン・インスタンス192を作成する。最初の繰り返し
でこれを行うと、サウンド・レンダリング・フィルタ1
78は、それぞれ対応する接続ピン・インスタンス18
8と192を通して効果フィルタ176に実効的に接続
される。現実装では、NtCreateFileコールはユーザ・モ
ード・クライアントが利用できるAPIの関数コールの
一部として「ラップ(wrapped) 」される。これにより、
サード・パーティ・エージェントのユーザ・モード開発
者は詳細を知る必要から解放されるので、すべての関係
機能を単一ユーザ・モードAPIに集中させることがで
きる。
【0119】ステップ196で、サード・パーティ・エ
ージェントは作成すべき入力ピン・インスタンスが他に
も残っているかどうかを判断する。残っていれば、入力
ピン・インスタンスを作成し、そのあとに別のフィルタ
上の対応する出力ピン・インスタンスを続けなければな
らない。最終的には、すべての接続が行われ、サード・
パーティ制御エージェント170はストリーム化データ
処理に対してフィルタ・グラフを準備する。
【0120】以上のようにして、入力ピン・インスタン
ス202はステップ190でボックス164で囲まれた
ループの2回目の繰り返しで作成され、他方、出力ピン
・インスタンス204は入力ピン・インスタンス202
のハンドルをステップ194でその作成の一部として使
用する。最後に、この特定の例では、3回目と最後の繰
り返しで、入力ピン・インスタンス206が作成され、
そのあとに出力ピン・インスタンス208が続いて接続
が完結する。
【0121】ステップ197で、サード・パーティ制御
エージェント170は、フィルタ・グラフによるストリ
ーム化データ処理に備えて各接続ピン・インスタンスを
停止状態から取得状態へ遷移させる。それぞれのフィル
タのデバイス・オブジェクトの各々でスタック深さパラ
メータを正しく設定するためには、状態遷移は「最も深
い」または最後の接続ピン・インスタンス(例えば、処
理のためのデータを受け取る最後の入力ピン・インスタ
ンス)から始めて、最初の接続ピン・インスタンス(例
えば、データをグラフに送り込む最初の出力ピン・イン
スタンス)に到達するまで相互接続カーネル・モード・
フィルタのチェインを順次に「さかのぼる」ように行う
必要がある。最初のフィルタまたはブリッジはIRPを
作成し、スタック・ロケーションはIRPがグラフ内の
各カーネル・モード・フィルタに効率よく連続して受け
渡されるように十分に割当てられる。
【0122】最後に、サード・パーティ制御エージェン
ト170はストリーム読取りと書込みを出し、ステップ
198でデータを処理してからステップ200で終了す
る。
【0123】前述したように、出力ピン・インスタンス
の各作成には、そこに接続された入力ピン・インスタン
スを表すファイル・オブジェクトのハンドルが必要であ
る。このファイル・オブジェクト参照は、出力ピン・イ
ンスタンスの作成ハンドラが入力ピン・インスタンスに
対応するデバイス・オブジェクトへの参照を、現在また
は将来のアクセスのためにセーブしておくことができる
ようにする。
【0124】もっと具体的に説明すると、これにより、
入力ピン・インスタンスを管理するデバイス・オブジェ
クトのスタック深さパラメータは、停止状態から取得ま
たは他の状態へ状態遷移するとき出力ピン・インスタン
スのドライバによってアクセスすることが可能になる。
入力ピン・インスタンスに関連するスタック深さパラメ
ータの値はアクセスされ、増加され、出力ピン・インス
タンスに対応するデバイス・オブジェクトのスタック深
さパラメータの中にセーブされる。
【0125】スタック深さパラメータは、共用IRPス
タック構造のどこに特定フィルタ用のスタック・フレー
ム情報が置かれているかを判断するために使用される
が、これは各フィルタごとに異なっている。フィルタを
このように相互接続し、状態遷移を正しいシーケンスで
行うと、通信をユーザ・モードにしなくても、カーネル
・モードの相互接続フィルタのチェインを下るように単
一IRPを受け渡してくことができる。
【0126】以上の説明から理解されるように、同一の
接続ピン・ファクトリを基礎にした複数のインスタンス
をもつことが可能である。例えば、オーディオ・ミキシ
ング・フィルタは複数のピン・インスタンスをミックス
して単一の出力ピン・インスタンスにしてから処理する
ことができる。各入力インスタンスは同一タイプであ
り、フィルタは1つのタイプの入力ピンだけをサポート
することができる。このような構成の別の例として、複
数の入力を1つの出力にする例がある。
【0127】逆のことを行うことも可能である。つま
り、スプリッタ・フィルタは単一入力接続ピン・インス
タンスをもち、複数の出力ピン・インスタンスを提供す
ることによりデータ・ストリームを倍にすることが可能
である。この分野の精通者ならば理解されるように、上
述してきた接続メカニズムから実際の実装とその要求条
件に応じて種々態様に変形し、種々態様に組み合わせる
ことが可能である。
【0128】ドライバ開発者が独立に実装できる共通メ
カニズム(例えば、プロパティ集合、メソッド集合、お
よびイベント集合)を、すべてのコンプライアント・フ
ィルタにサポートさせることによって均一性と標準化が
達成されているので、制御エージェントは異種ソフトウ
ェア・プロバイダから提供されるコンプライアント・フ
ィルタを都合よく接続することができる。さらに、接続
ピン・ファクトリの観点から見た機能の多くはある状況
では必要であっても、別の状況では必要でない場合があ
る。必要とされる接続ピン・インスタンスの決定は異な
るフィルタ間の相互接続を実際に行うサード・パーティ
制御エージェントによって最初に行われる。
【0129】この分野の精通者ならば理解されるよう
に、本発明の種々方法はコンピュータ・プログラム・コ
ード手段として、磁気ディスク、CD-ROM、およびこの分
野で共通している他の媒体やまだ未開発の他の共通媒体
などの、コンピュータ読取り可能媒体上にストアされる
コンピュータ命令として組み込んでおくことが可能であ
る。さらに、コンピュータ・ハードウェア・メモリに置
かれる重要なデータ構造は、上記のようなコンピュータ
・プログラム・コード手段のオペレーションにより作成
することができる。
【0130】本発明は本発明の基本的特徴の精神から逸
脱しない限り、他の実施形態で実現することも可能であ
る。上述してきた各種実施の形態はすべての点で説明し
た通りであるが、これらの実施の形態に限定されるもの
ではない。従って、本発明の範囲は上述してきた説明に
よってではなく、特許請求の範囲に記載されている事項
によってのみ限定されるものである。特許請求の範囲の
均等の意味と範囲に属する一切の変更は本発明の範囲に
属するものである。
【図面の簡単な説明】
【図1】制御エージェントの指示を受けてサウンド・デ
ータをディスク・ファイルから持ち込み、サウンド・デ
ータをなんらかの形態で処理し、サウンド・データをレ
ンダリングしてスピーカから再生させる相互接続フィル
タとドライバのシステムを示す従来技術のデータ・フロ
ー図である。
【図2】図1に示すシステムと目的が同じであり、サウ
ンド・データをディスク・ドライバから読み取り、その
データを処理し、そのデータをレンダリングしてスピー
カから聞こえるようにし、処理フィルタとレンダリング
は、この場合も制御エージェントの指示を受けて相互接
続カーネル・モード・ドライバによって処理されるよう
した本発明によるシステムを示す図である。
【図3】オペレーティング・システムで作成され、使用
されるドライバ・オブジェクト、デバイス・オブジェク
トおよびファイル・オブジェクト間の関係を示す垂直関
係モデルを示す図である。
【図4】ドライバ・オブジェクトのロジック・ブロック
図であり、本発明のシステムに従ってメッセージを適切
なプロセス・ハンドリング・コードへ転送し、新しいフ
ァイル・オブジェクトの作成をバリデーションするため
のデータ構造およびプログラム・コードとの論理的関係
を示す図である。
【図5】デバイス・オブジェクトのロジック・ブロック
図であり、本発明のシステムに従ってメッセージを適切
なプロセス・ハンドリング・コードへ転送し、新しいフ
ァイル・オブジェクトの作成をバリデーションするため
のデータ構造およびプログラム・コードとの論理的関係
を示す図である。
【図6】ファイル・オブジェクトのロジック・ブロック
図であり、本発明のシステムに従ってメッセージを適切
なプロセス・ハンドリング・コードへ転送し、新しいフ
ァイル・オブジェクトの作成をバリデーションするため
のデータ構造およびプログラム・コードとの論理的関係
を示す図である。
【図7】ルーチングとバリデーション・コンポーネント
リの初期セットアップとカーネル・モード・ドライバに
よる入出力メッセージの処理を示すフローチャートであ
る。
【図8】制御エージェントの処理、ルーチングとバリデ
ーション・メカニズム、および新しいファイル・オブジ
ェクトを作成する具体的な作成ハンドラ・ルーチンを示
す詳細フローチャートである。
【図9】オペレーティング・システムでファイル・オブ
ジェクト構造を利用して、接続を標準化された方法で行
う接続フィルタ間の水平関係を示すロジック図である。
【図10】図9のカーネル・モード・フィルタまたはド
ライバを作成し、接続するためにユーザ・モードの制御
エージェントによってとられる処理ステップを示すフロ
ーチャートであり、制御エージェントから受け取った入
出力要求を処理するために接続を行い、その処理が異な
るドライバ(フィルタ)間で続けられる様子を示してい
る。
【図11】ユーザ・モードの制御エージェントの指示を
受けてカーネル・モード・フィルタのチェインを作成す
るために使用され、サウンド・データをハード・ドライ
ブから読み取り、カーネル・モード・フィルタでそのデ
ータを処理し、そのデータをレンダリングしてスピーカ
から聞こえるようにするシステムを実装するためのカー
ネル・モード・ドライバと接続を示す概要ロジック図で
ある。
【図12】ユーザ・モードの制御エージェントの指示を
受けてカーネル・モード・フィルタのチェインを作成す
るために使用され、サウンド・データをハード・ドライ
ブから読み取り、カーネル・モード・フィルタでそのデ
ータを処理し、そのデータをレンダリングしてスピーカ
から聞こえるようにするシステムを実装するためのカー
ネル・モード・ドライバと接続を示す概要ロジック図で
ある。
【図13】図11と図12に示すシステム用に相互接続
カーネル・モード・ドライバを作成するための処理ステ
ップを示すフローチャートである。
【符号の説明】
44 制御エージェント 46 ディスク・ドライブ 48 ディスク・ドライバ 50 リーダ・ドライバ 52 デコンプレッサ・ドライバ 54 効果フィルタ 56 効果プロセッサ 58 レンダリング・ドライバ 62 スピーカ 64,76,80 ドライバ・オブジェクト 66 デバイス・オブジェクト 70,72,74,90 ファイル・オブジェクト 78 汎用マルチプレクシング・ディスパッチ機能 82 デバイス・エクステンション・エリア 84,100 ファイル・タイプ・バリデーション・テ
ーブル 86,102 ファイル・オブジェクト・タイプ 88 作成ハンドラ 92 ファイル・コンテキスト・エリア 94 IRP要求ハンドラ・テーブル 96 IRP要求 98 ハンドラ 104 参照 146 フィルタA 148 フィルタB 154 入力フィルタ・ピン・インスタンス 158 出力ピン・インスタンス
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ブライアン エイ. ウッドラフ アメリカ合衆国 98045 ワシントン州 ニュー ベンド サウス ウエスト 10テ ィーエイチ ストリート 1020 (72)発明者 トーマス ジェイ. エロウルケ フィンランド 90800 オウル リコニナ ルヤティエ 29

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 ソフトウェア・ドライバを相互接続して
    データをカーネル・モードで効率よく処理するための方
    法において、 1つまたは2つ以上のカーネル・モード・ドライバをオ
    ープンするステップと、 ドライバを接続するための1つまたは2つ以上の接続ピ
    ン・インスタンスを形成するステップであって、各接続
    ピン・インスタンスは前記1つまたは2つ以上のドライ
    バの1つと階層的に関連づけられいて、該1つまたは2
    つ以上のドライバの間でデータ送信のために使用される
    ものと、 カーネル・モードで動作する前記1つまたは2つ以上の
    ドライバを通る連続データ・フロー・パスを提供するよ
    うに前記1つまたは2つ以上の接続ピン・インスタンス
    を相互接続するステップとを備えたことを特徴とする方
    法。
  2. 【請求項2】 請求項1に記載の方法において、各接続
    ピン・インスタンスはファイル・オブジェクトで表さ
    れ、階層関係は関連ドライバを指定することにより作成
    され、該ドライバはシステム上で利用できる入出力デバ
    イスのファイル・オブジェクトとして参照され、該ドラ
    イバを接続ピン・インスタンスのファイル・オブジェク
    ト作成期間に親として指定することにより作成されるこ
    とを特徴とする方法。
  3. 【請求項3】 請求項1に記載の方法において、前記1
    つまたは2つ以上のドライバの各々に照会し、サポート
    される接続ピン・インスタンスのタイプを判断してから
    前記1つまたは2つ以上の接続ピン・インスタンスを作
    成し、相互接続するステップをさらに備えたことを特徴
    とする方法。
  4. 【請求項4】 請求項1に記載の方法において、前記1
    つまたは2つ以上のドライバはあらかじめ定義された少
    なくとも1つのプロパティ集合、メソッド集合、および
    イベント集合をサポートし、どのタイプの接続ピン・イ
    ンスタンスとデータ・フォーマットがドライバによって
    サポートされるかをサード・パーティ・コンポーネント
    に示すようにし、サード・パーティ・コンポーネントが
    前記接続ピン・インスタンスを形成し、該接続ピン・イ
    ンスタンス間の前記相互接続を行うことを可能にしたこ
    とを特徴とする方法。
  5. 【請求項5】 請求項1に記載の方法において、前記接
    続ピン・インスタンスは関連ドライバで処理するための
    データを受信する入力ピン・インスタンス、関連ドライ
    バから接続されたドライバへデータを送信する出力ピン
    ・インスタンス、および関連ドライバで処理するための
    データを受信すると共に、関連ドライバから接続された
    ドライバへデータを送信する双方向ピン・インスタンス
    を含むことを特徴とする方法。
  6. 【請求項6】 請求項1に記載の方法において、前記相
    互接続するステップは、相互接続されたピン・インスタ
    ンスの各ペアごとに、 第1ドライバと関連づけられた第1接続ピン・インスタ
    ンスへの第1参照をサード・パーティ・コンポーネント
    によって受信するステップと、 第2ドライバと関連づけられた第2接続ピン・インスタ
    ンスへの第2参照をサード・パーティ・コンポーネント
    によって受信するステップと、 前記第1参照を前記サード・パーティ・コンポーネント
    によって前記第2ドライバに置かれた前記第2接続ピン
    ・インスタンスへ引き渡すステップと、 前記第2参照を前記サード・パーティ・コンポーネント
    によって前記第1ドライバに置かれた前記第1接続ピン
    ・インスタンスへ引き渡すステップであって、該第1お
    よび第2接続ピン・インスタンスは接続された第1およ
    び第2のそれぞれのドライバの間でデータを転送し合う
    ようにしたものとを備えたことを特徴とする方法。
  7. 【請求項7】 請求項1に記載の方法において、前記相
    互接続するステップは、相互接続されたピン・インスタ
    ンスの各ペアごとに、 入力ピン・インスタンスへの参照をサード・パーティ・
    コンポーネントによって受信するステップであって、該
    入力ピン・インスタンスは受信側ドライバで処理するた
    めのデータを受信するようにしたものと、 前記参照を前記サード・パーティ・コンポーネントによ
    って送信側ドライバに置かれた出力ピン・インスタンス
    へ引き渡すステップであって、該出力ピン・インスタン
    スはデータを前記送信側ドライバから接続された前記受
    信側ドライバの該入力ピン・インスタンスへ送信するよ
    うにしたものとを備えたことを特徴とする方法。
  8. 【請求項8】 請求項1に記載されたステップを実行す
    るためのコンピュータ実行可能命令を有するコンピュー
    タ読取り可能媒体。
  9. 【請求項9】 カーネル・モードで使用されるコンピュ
    ータ・プログラム・プロダクトにおいて、 標準化された相互接続メカニズムをカーネル・モードの
    他のコンポーネントに提供するように具現化されている
    コンピュータ読取り可能プログラム・コード手段を有す
    るコンピュータ使用可能媒体であって、前記コンピュー
    タ読取り可能プログラム・コード手段は接続ピン・イン
    スタンスを形成するためのプログラム・コード手段を備
    え、前記接続ピン・インスタンスはカーネル・モードの
    他のコンポーネントとの間でデータを送受信するために
    使用されると共に、他のコンポーネントに置かれた他の
    接続ピン・インスタンスとの相互接続が可能であること
    を特徴とするコンピュータ・プログラム・プロダクト。
  10. 【請求項10】 請求項9に記載のコンピュータ・プロ
    グラム・プロダクトにおいて、接続ピンの機能に関する
    情報を他のコンポーネントからの照会に応答して生成す
    るプログラム・コード手段をさらに備えたことを特徴と
    するコンピュータ・プログラム・プロダクト。
  11. 【請求項11】 請求項10に記載のコンピュータ・プ
    ログラム・プロダクトにおいて、接続ピン・インスタン
    ス情報を生成するプログラム・コード手段は別のコンポ
    ーネントによってアクセスされるプロパティ集合、メソ
    ッド集合、およびイベント集合の少なくとも1つを実装
    したものを備えたことを特徴とするコンピュータ・プロ
    グラム・プロダクト。
  12. 【請求項12】 請求項9に記載のコンピュータ・プロ
    グラム・プロダクトにおいて、特定の接続ピン・インス
    タンスを別のコンポーネントによって制御するためのプ
    ログラム・コード手段をさらに備えたことを特徴とする
    コンピュータ・プログラム・プロダクト。
  13. 【請求項13】 請求項12に記載のコンピュータ・プ
    ログラム・プロダクトにおいて、接続ピン・インスタン
    スを制御するプログラム・コード手段は別のコンポーネ
    ントによってアクセスされるプロパティ集合、メソッド
    集合、およびイベント集合の少なくとも1つを実装した
    ものを備えたことを特徴とするコンピュータ・プログラ
    ム・プロダクト。
  14. 【請求項14】 第1および第2デバイス・ドライバを
    相互接続し、該デバイス・ドライバが標準化され、拡張
    可能な方法でカーネル・モード接続を使用して相互に通
    信することを可能にする方法において、 データ・フォーマットと接続フォーマットをサード・パ
    ーティ・コンポーネントによって第1デバイス・ドライ
    バに提供するステップと、 前記サード・パーティ・コンポーネントに応答して、前
    記接続フォーマットの第1インスタンスとインスタンシ
    ェイトされた接続へのハンドルとを前記第1デバイス・
    ドライバによって作成するステップと、 前記ハンドルを前記第1デバイス・ドライバによって前
    記サード・パーティ・コンポーネントへ返すステップ
    と、 前記データ・フォーマット、前記接続フォーマット、お
    よび前記ハンドルを前記サード・パーティ・コンポーネ
    ントによって前記第2デバイス・ドライバに提供するス
    テップと、 前記サード・パーティ・コンポーネントに応答して、前
    記接続フォーマットの第2インスタンスを前記ハンドル
    を利用して前記第2ドライバによって形成し、もって前
    記第1ドライバが前記第1および第2接続フォーマット
    ・インスタンスを通して完全にカーネル・モード内でデ
    ータを該第2ドライバへ送信することを可能にするステ
    ップとを備えたことを特徴とする方法。
  15. 【請求項15】 請求項14に記載の方法において、 サード・パーティ・コンポーネントによって前記第1お
    よび第2デバイス・ドライバに照会して、どのプロパテ
    ィ集合をデバイス・ドライバがサポートしているかを判
    断するステップと、 照会に応答して、各デバイス・ドライバがサポートする
    接続のタイプを前記第1および第2デバイス・ドライバ
    によって前記サード・パーティ・コンポーネントに供給
    するステップと、 前記第1および第2デバイス・ドライバ間の接続をどの
    ように行うかを、供給された接続情報に基づいて前記サ
    ード・パーティ・コンポーネントによって判断するステ
    ップとをさらに備えたことを特徴とする方法。
  16. 【請求項16】 第1および第2デバイス・ドライバを
    相互接続し、該デバイス・ドライバが標準化され、拡張
    可能な方法でカーネル・モード接続を使用して相互に通
    信することを可能にする方法において、 サード・パーティ・コンポーネントによって前記第1お
    よび第2デバイス・ドライバに照会して、どのプロパテ
    ィ集合をデバイス・ドライバがサポートしているかを判
    断するステップと、 照会に応答して、各デバイス・ドライバがサポートする
    接続のタイプを該第1および第2デバイス・ドライバに
    よって前記サード・パーティ・コンポーネントに供給す
    るステップと、 前記第1および第2デバイス・ドライバ間の接続をどの
    ように行うかを、供給された接続情報に基づいて前記サ
    ード・パーティ・コンポーネントによって判断するステ
    ップと、 データ・フォーマットと接続フォーマットを前記サード
    ・パーティ・コンポーネントによって前記第1デバイス
    ・ドライバに提供するステップと、 前記サード・パーティ・コンポーネントに応答して、前
    記第1デバイス・ドライバへの前記接続フォーマットの
    インスタンスとインスタンシェイトされた接続へのハン
    ドルを該第1デバイス・ドライバによって作成するステ
    ップと、 前記ハンドルを前記第1デバイス・ドライバによって前
    記サード・パーティ・コンポーネントへ返すステップ
    と、 前記ハンドルを前記サード・パーティ・コンポーネント
    から前記第2デバイス・ドライバに提供するステップと
    を備えたことを特徴とする方法。
  17. 【請求項17】 カーネル・モード・データ処理システ
    ムにおいて、 データ・ソースと、 発生コンポーネントと終結コンポーネントを含む複数の
    カーネル・モード・データ処理コンポーネントであっ
    て、前記発生コンポーネントはデータ・ソースからデー
    タ・ストリームのデータ・サンプルを読み取るものと、 データ処理コンポーネント間のカーネル・モード・コン
    ポーネント相互接続であって、データ・サンプルを発生
    コンポーネントから終結コンポーネントへルーチングす
    るためのものとを備えたことを特徴とするカーネル・モ
    ード・データ処理システム。
  18. 【請求項18】 カーネル・モード・メディア・レンダ
    リング・システムにおいて、 メディア・ソースと、 発生コンポーネントと終結コンポーネントを含む複数の
    カーネル・モード・メディア処理コンポーネントであっ
    て、 発生コンポーネントはメディア・ソースからメディア・
    ストリームのメディア・サンプルを読み取り、 終結コンポーネントは前記メディア・ストリームをレン
    ダリングし、 各メディア処理コンポーネントは、メディア・サンプル
    をメディア処理コンポーネント間で受け渡すための接続
    ピン・インスタンスを有しているものと、 接続ピン・インスタンスを使用して作成されたメディア
    処理コンポーネント間のカーネル・モード・コンポーネ
    ント相互接続であって、データ・サンプルを発生コンポ
    ーネントから終結コンポーネントへルーチングするため
    のものとを備えたことを特徴とするカーネル・モード・
    メディア処理システム。
JP16477097A 1997-04-04 1997-06-20 カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体 Expired - Fee Related JP4684376B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/825,856 1997-04-04
US08/825,856 US6205492B1 (en) 1997-04-04 1997-04-04 Method and computer program product for interconnecting software drivers in kernel mode

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007150927A Division JP2007305141A (ja) 1997-04-04 2007-06-06 カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法

Publications (2)

Publication Number Publication Date
JPH10283195A true JPH10283195A (ja) 1998-10-23
JP4684376B2 JP4684376B2 (ja) 2011-05-18

Family

ID=25245074

Family Applications (2)

Application Number Title Priority Date Filing Date
JP16477097A Expired - Fee Related JP4684376B2 (ja) 1997-04-04 1997-06-20 カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体
JP2007150927A Pending JP2007305141A (ja) 1997-04-04 2007-06-06 カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2007150927A Pending JP2007305141A (ja) 1997-04-04 2007-06-06 カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法

Country Status (4)

Country Link
US (1) US6205492B1 (ja)
EP (1) EP0871114A3 (ja)
JP (2) JP4684376B2 (ja)
CA (1) CA2208289C (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1589423A2 (en) 2004-03-24 2005-10-26 Hitachi, Ltd. Contents data processing device and method
JP2007164734A (ja) * 2005-12-16 2007-06-28 Matsushita Electric Ind Co Ltd ストリーム制御装置
US7818443B2 (en) 2000-12-01 2010-10-19 O2Micro International Ltd. Low power digital audio decoding/playing system for computing devices
US7987299B2 (en) 2004-04-02 2011-07-26 Hitachi, Ltd. Data processing apparatus and method thereof

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658477B1 (en) * 1999-05-12 2003-12-02 Microsoft Corporation Improving the control of streaming data through multiple processing modules
US7007096B1 (en) 1999-05-12 2006-02-28 Microsoft Corporation Efficient splitting and mixing of streaming-data frames for processing through multiple processing modules
US6832379B1 (en) * 1999-08-17 2004-12-14 Emc Corporation Computer architecture utilizing layered device drivers
AU2001230933A1 (en) 2000-01-14 2001-07-24 Catavault Method and system for secure personal authentication credentials data over a network
US7043697B1 (en) * 2000-05-15 2006-05-09 Intel Corporation Virtual display driver
US6868450B1 (en) * 2000-05-17 2005-03-15 Hewlett-Packard Development Company, L.P. System and method for a process attribute based computer network filter
US6609155B1 (en) * 2000-05-25 2003-08-19 International Business Machines Corporation Method and apparatus for providing relationships in simple network management protocol management information base
JP2004512748A (ja) 2000-10-17 2004-04-22 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ ハードウェア構成要素の配置を制御する方法
US7447754B2 (en) * 2000-12-06 2008-11-04 Microsoft Corporation Methods and systems for processing multi-media editing projects
US7114161B2 (en) * 2000-12-06 2006-09-26 Microsoft Corporation System and related methods for reducing memory requirements of a media processing system
US7287226B2 (en) * 2000-12-06 2007-10-23 Microsoft Corporation Methods and systems for effecting video transitions represented by bitmaps
US6882891B2 (en) * 2000-12-06 2005-04-19 Microsoft Corporation Methods and systems for mixing digital audio signals
US6983466B2 (en) * 2000-12-06 2006-01-03 Microsoft Corporation Multimedia project processing systems and multimedia project processing matrix systems
US6954581B2 (en) * 2000-12-06 2005-10-11 Microsoft Corporation Methods and systems for managing multiple inputs and methods and systems for processing media content
US6912717B2 (en) 2000-12-06 2005-06-28 Microsoft Corporation Methods and systems for implementing dynamic properties on objects that support only static properties
US6834390B2 (en) 2000-12-06 2004-12-21 Microsoft Corporation System and related interfaces supporting the processing of media content
US7114162B2 (en) 2000-12-06 2006-09-26 Microsoft Corporation System and methods for generating and managing filter strings in a filter graph
US6768499B2 (en) * 2000-12-06 2004-07-27 Microsoft Corporation Methods and systems for processing media content
US6774919B2 (en) * 2000-12-06 2004-08-10 Microsoft Corporation Interface and related methods for reducing source accesses in a development system
US6961943B2 (en) * 2000-12-06 2005-11-01 Microsoft Corporation Multimedia processing system parsing multimedia content from a single source to minimize instances of source files
US7103677B2 (en) * 2000-12-06 2006-09-05 Microsoft Corporation Methods and systems for efficiently processing compressed and uncompressed media content
US6959438B2 (en) 2000-12-06 2005-10-25 Microsoft Corporation Interface and related methods for dynamically generating a filter graph in a development system
US7194506B1 (en) 2000-12-21 2007-03-20 Vignette Corporation Method and system for cache management of locale-sensitive content
US6892377B1 (en) * 2000-12-21 2005-05-10 Vignette Corporation Method and system for platform-independent file system interaction
JP5055492B2 (ja) * 2001-05-07 2012-10-24 サイエンスパーク株式会社 電子計算機のインターフェースドライバプログラム及びその記録媒体
US7571445B2 (en) * 2001-11-29 2009-08-04 Dell Products L.P. System and method for dynamic device driver support in an open source operating system
US7209971B1 (en) * 2001-12-11 2007-04-24 Microsoft Corporation Architecture and run-time environment for network filter drivers
AU2003211265A1 (en) * 2002-02-15 2003-09-04 Science Park Corporation Authentication method using input feature of input unit of computer, its program, and program recorded medium
US7219352B2 (en) * 2002-04-15 2007-05-15 Microsoft Corporation Methods and apparatuses for facilitating processing of interlaced video images for progressive video displays
US7451457B2 (en) * 2002-04-15 2008-11-11 Microsoft Corporation Facilitating interaction between video renderers and graphics device drivers
US7024672B2 (en) * 2002-06-26 2006-04-04 Microsoft Corporation Process-mode independent driver model
CN1288548C (zh) * 2002-12-31 2006-12-06 上海科泰世纪科技有限公司 基于类别创建驱动构件对象实现设备驱动程序多态的方法
CN1245685C (zh) * 2002-12-31 2006-03-15 上海科泰世纪科技有限公司 基于构件的操作系统动态设备驱动的方法
US20040243783A1 (en) * 2003-05-30 2004-12-02 Zhimin Ding Method and apparatus for multi-mode operation in a semiconductor circuit
US7643675B2 (en) * 2003-08-01 2010-01-05 Microsoft Corporation Strategies for processing image information using a color information data structure
US8341649B2 (en) * 2004-07-06 2012-12-25 Wontok, Inc. System and method for handling an event in a computer system
US7765558B2 (en) * 2004-07-06 2010-07-27 Authentium, Inc. System and method for handling an event in a computer system
JP2006031261A (ja) * 2004-07-14 2006-02-02 Matsushita Electric Ind Co Ltd マルチメディア処理システム
WO2006031723A2 (en) * 2004-09-13 2006-03-23 Coretrace Corporation Method and system for license management
US7640552B2 (en) * 2004-10-29 2009-12-29 Microsoft Corporation Multimedia filter resilience
US7400271B2 (en) * 2005-06-21 2008-07-15 International Characters, Inc. Method and apparatus for processing character streams
US8479283B2 (en) * 2006-11-28 2013-07-02 Microsoft Corporation Generating security validation code automatically
US20080235246A1 (en) * 2007-03-20 2008-09-25 Arun Hampapur Filter sequencing based on a publish-subscribe architecture for digital signal processing
US8020150B1 (en) * 2007-05-11 2011-09-13 Nvidia Corporation System, method, and computer program product for controlling a driver utilizing scripts
WO2009151888A2 (en) * 2008-05-19 2009-12-17 Authentium, Inc. Secure virtualization system software
US10534637B1 (en) * 2018-02-21 2020-01-14 Parallels International Gmbh Systems and methods for managing chain of software applications
CN115048157B (zh) * 2022-08-12 2022-11-11 南方电网数字电网研究院有限公司 一种基于专用芯片的自主可控配电控制模组

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2084575C (en) * 1991-12-31 1996-12-03 Chris A. Dinallo Personal computer with generalized data streaming apparatus for multimedia devices
US5386568A (en) * 1992-12-01 1995-01-31 Yamaha Corporation Apparatus and method for linking software modules
US5485617A (en) * 1993-12-13 1996-01-16 Microsoft Corporation Method and system for dynamically generating object connections
US5793961A (en) * 1994-11-18 1998-08-11 Intel Corporation Computer system with data conference capability
US5768126A (en) * 1995-05-19 1998-06-16 Xerox Corporation Kernel-based digital audio mixer

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818443B2 (en) 2000-12-01 2010-10-19 O2Micro International Ltd. Low power digital audio decoding/playing system for computing devices
EP1589423A2 (en) 2004-03-24 2005-10-26 Hitachi, Ltd. Contents data processing device and method
US7987299B2 (en) 2004-04-02 2011-07-26 Hitachi, Ltd. Data processing apparatus and method thereof
JP2007164734A (ja) * 2005-12-16 2007-06-28 Matsushita Electric Ind Co Ltd ストリーム制御装置

Also Published As

Publication number Publication date
EP0871114A2 (en) 1998-10-14
EP0871114A3 (en) 1998-12-16
JP4684376B2 (ja) 2011-05-18
CA2208289A1 (en) 1998-10-04
US6205492B1 (en) 2001-03-20
CA2208289C (en) 2009-12-29
JP2007305141A (ja) 2007-11-22

Similar Documents

Publication Publication Date Title
JP3929554B2 (ja) ファイル・オブジェクトの生成をバリデーションし、ファイル・オブジェクトへのメッセージをルーチングする方法
JP4684376B2 (ja) カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体
JP3929551B2 (ja) セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ読取り可能媒体
JP4575528B2 (ja) 標準クロック・メカニズムを用いて、多重データ・ストリームの処理の同期と異なる処理速度のマッチングを行う方法
JP4972082B2 (ja) 開発者がシステム上の周知のロケーションを容易に発見し、または拡張するための能力
JP3072709B2 (ja) 要求伝達方法
US6704803B2 (en) Method and system for distributing data events over an information bus
JP5026415B2 (ja) データセントリックワークフロー
JP3228340B2 (ja) マルチメディア・プレーヤ・コンポーネント・オブジェクト・システム及びマルチメディア・プレゼンテーション方法
JPH10283198A (ja) コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ
JP2008503011A (ja) ユニバーサルデバイスインタオペラビリティプラットフォームのためのデバイスチームリクルートメントおよびコンテンツレンディションのアーキテクチャ装置および方法
JPH09503070A (ja) オブジェクト指向midiシステム
KR20060043087A (ko) 커맨드 시스템 및 커맨드를 타깃에 매핑하는 방법
JPH09503080A (ja) マルチメディア・データ・ルーチング・システム
JPH0756643B2 (ja) オブジェクト指向インタフェース標準を与えるシステムおよび方法
JP2008544398A (ja) 管理された自動プログラミングモデル
US6643712B1 (en) Validating the creation of and routing of messages to file objects
JP2007538314A (ja) 汎用ユーザインターフェースコマンドアーキテクチャ
KR20100071432A (ko) 로봇 소프트웨어 컴포넌트를 위한 메소드 포트 장치 및 구성 방법
Duke et al. PREMO: a framework for multimedia middleware: specification, rationale, and Java binding
EP1157330A1 (en) Method and system for implementing virtual functions of an interface
GB2396457A (en) Computer software program for resource constrained mobile computing devices
JPH09325934A (ja) 計算機システム
JP2009151810A (ja) ユーザインターフェースプロパティをデータにより制御するためのプログラムを格納した記録媒体およびシステム
JPH04304566A (ja) 画像処理方法及びその装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040514

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060512

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060814

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060818

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061113

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070206

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20070508

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20070508

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070606

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070612

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20071012

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100512

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20100526

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100526

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110107

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110209

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140218

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees
S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350