JP2007080287A - コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ - Google Patents

コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ Download PDF

Info

Publication number
JP2007080287A
JP2007080287A JP2006306991A JP2006306991A JP2007080287A JP 2007080287 A JP2007080287 A JP 2007080287A JP 2006306991 A JP2006306991 A JP 2006306991A JP 2006306991 A JP2006306991 A JP 2006306991A JP 2007080287 A JP2007080287 A JP 2007080287A
Authority
JP
Japan
Prior art keywords
filter
mode
kernel
kernel mode
user mode
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
JP2006306991A
Other languages
English (en)
Other versions
JP4313815B2 (ja
Inventor
Thomas J O'rourke
ジェイ. エロウルケ トーマス
George H J Shaw
エイチ. ジェイ. ショウ ジョージ
Bryan A Woodruff
エイ. ウッドラフ ブライアン
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 JP2007080287A publication Critical patent/JP2007080287A/ja
Application granted granted Critical
Publication of JP4313815B2 publication Critical patent/JP4313815B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

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
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/468Specific access rights for resources, e.g. using capability register

Landscapes

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

Abstract

【課題】オペレーティング・システムのカーネル・モードで動作するドライバをこれに対応するユーザ・モード・オブジェクトによって代理させる。
【解決手段】カーネル・モード・ドライバと通信したいまたはこれを操作したいユーザ・モード・プロセスは対応するユーザ・モード・プロキシと通信するか、または、これを操作することによって行なうことができる。ユーザ・モードへ移行することなく、データがカーネル・モード・ドライバからカーネル・モード・ドライバへ渡されるようなカーネルでの処理ストリームを作成するので、カーネル・モード・ドライバを相互接続できる。このようなカーネル・モード・ドライバのユーザ・モード・プロキシによって、ユーザ・モード・プロセスは、慣れているユーザ・モードプロトコルを用いて、これらのカーネル・モードを操作できるようになる。
【選択図】図3

Description

本発明は、コンピュータ・オペレーティング・システムのユーザ・モードでのソフトウェア・コンポーネントと、コンピュータ・オペレーティング・システムのカーネル・モードでのソフトウェア・コンポーネントとの間の相互作用に関する。特に、本発明は、コンピュータ・オペレーティング・システムのユーザ・モードにおけるソフトウェア・コンポーネントによる、コンピュータ・オペレーティング・システムのカーネル・モードにおけるソフトウェア・コンポーネントのプロキシ(proxy:代理)に関する。
コンピュータは、かつて主として科学者が使用するどちらかと言えば漠然とした奇妙なものだったが、今日では、コンピュータは社会の主流の不可分な部分になっている。ほとんど毎日のように、コンピュータは多くの人々の生活、仕事、遊びの方法を変化させている。コンピュータの広範な拡散によって、わずか数年前まで思いもしなかったような、広い、新規の用途や応用が開けて来た。今日、コンピュータは多くのビジネスで使用される強力なツールと言うだけではなく、一般大衆のためのレクリエーションや楽しみの供給源である。
コンピュータが進歩し、増加する一方の一連の用途に応用されてきたことで、さらに強力で洗練されるようになって来た。今日のコンピュータは各種アプリケーション・プログラムのための頑強な環境と直感的なユーザ・インタフェースを提供する複雑なオペレーティング・システムを備えている。このようなオペレーティング・システムは、オペレーティング・システムの複雑のレベルや、オペレーティング・システムで実装されるセキュリティ機能によって、異った動作レベルまたは「モード」を通常有している。たとえば、通常のアプリケーション・プログラムは最低のプライオリティで動作するのが普通で、他のアプリケーションとの、または他のオペレーティング・システム層との干渉を防止するため、適切なセキュリティ・ディバイスの全てのものを有している。ハードウェアおよびオペレーティング・システムによって提供されるその他のサービスは、単一のユーザ・アプリケーションがシステムを「クラッシュ」させる能力を制限するように制御された、インタフェースまたはメカニズムを介してだけアクセスされる。この最低プライオリティのモードは、一般に「ユーザ」モードと呼ばれており、多くのコンピュータ・ユーザに馴染みの深いモードである。
1つ以上の層またはモードを提供するオペレーティング・システムでは、アプリケーションがコンピュータのハードウェアへ直接アクセスすることは許されていないのが普通である。むしろ、オペレーティング・システムがインタフェースを提供し、ユーザ・モードのアプリケーション・プログラムはこれを経由して、ハードウェアやオペレーティング・システムにより提供されたその他のサービスにアクセスできるようになる。つまり、システム内のコンピュータ・ハードウェアの上部に、ソフトウェアの層が存在するのが典型的である。このソフトウェア層は一般にドライバまたはフィルタと呼ばれる。
ソフトウェア・ドライバは、通常、ハードウェア制御を行なうように構築され、ハードウェアを制御またはアクセスするために使用できるインタフェースを提供している。ドライバは、これが制御しているハードウェア・コンポーネントにきわめて密接にリンクされるのが典型的である。このため、ドライバがオーバヘッドの非常に少ないモードで動作できるようにするのが一般に望ましい。ドライバがハードウェアとインタフェースする時、多数の時間的にクリティカルな機能を実行するのが一般的である。たとえば、ドライバが大容量記憶装置へデータを書き込もうとする時、ドライバは大きな遅延なしに大容量記憶装置へデータを書き込みできるように、大容量記憶装置が利用可能である十分なデータを必ず有していることを保証しなければならない。
ドライバが関連ハードウェアと密接に統合されていることと、多くのドライバが実行するタスクの時間的にクリティカルな性質のために、ドライバはもっと高いプライオリティと大幅に低いセキュリティ保護を有するオペレーティング・システム・モードで動作するのが普通である。このモードは一般に「カーネル」モードと呼ばれている。カーネル・モードで利用できるセキュリティ保護が少ないことから、カーネル・モードで動作するソフトウェア・コンポーネントは、最も信頼のおけるソフトウェア・コンポーネントに制限されているのが普通である。こうしたソフトウェア・コンポーネントは、全面的にテストされ、また絶対に予測可能な方法で振舞う必要がある。
ソフトウェア・ドライバの一般概念は、特定のハードウェアを制御するか、またはユーザ・モード・アプリケーションへ特定のサービスを提供することを意図しているため、ドライバは互いに隔離した環境(isolation) で開発され、ハードウェア・メーカまたはオペレーティング・システム提供者によって提供されるのが普通である。たとえば、デバイス・インタフェースを経由して追加ハードウェア・カードに関連する特定種類のI/Oサービスを提供するソフトウェア・ドライバは、他の何らかのドライバと通信する必要も、またその存在を知る必要もない。
すでに述べたように、今日では、コンピュータは多くのビジネスで使用される強力なツールというだけではなく、一般大衆のレクリエーションや楽しみの供給源になっている。新型でもっと強力なパーソナル・コンピュータによって開かれた応用分野のひとつがマルチメディアの分野である。マルチメディアは一連の処理機能を用いたデータ・ストリームの処理を必要とするのが普通である。データは代表的には音またはビデオを表わすデジタル・サンプルから構成され、処理部ブロックまたは「フィルタ」は、圧縮データのための展開処理、特殊効果処理、変形、スケーリング、デジタル・データをアナログ・データへ変換するためのレンダリング処理などを含むことがある。各々が任意のデータ項目に対して特定の機能を実行してからそのデータ項目を別のフィルタに渡すような一連の異なるフィルタを接続する処理アーキテクチャは、ストリーミング・アーキテクチャと呼ばれるのが普通である。接続されたフィルタのシーケンスはフィルタ・グラフと呼ばれることがある。
図1を参照すると、ディスク・ドライブからのサウンド・データ・ストリームをレンダリングし、スピーカを介して聞こえるようにするための従来技術モデルによるシステム例が示してある。デジタル化したサンプルの形で音を表わす大量のデータがディスク20に記憶してある。これ以外に、サウンド・データ・ストリームの供給源は電話回線から到着するデジタル化情報、ネットワークからの、または従来技術において知られているその他の通信パケットまたは供給源からのデジタル化情報であってもよい。
カーネル・モード・ディスク・ドライバ22はユーザ・モード・リーダ・プロセス24の制御下でディスク20からデータを取り出す。リーダ・プロセス24は、オペレーティング・システムの標準I/O制御インタフェースを用いて、ディスク・ドライバ22と相互作用し、圧縮されたサウンド・データをディスク20から読み取らせる。データがディスク20から取り出されると、データはユーザ・モード・アドレス空間の一部としてユーザ・モードに割り当てられているバッファに配置されるのが普通である。
前述のように、ディスク20からデータを取り出すと、リーダ・プロセス24はデータをデコンプレッサ28へ渡して、データを展開し更に処理するためにデータの準備を行なう。図1に図示した例では、このステップ全体がユーザ・モードで実行される。これにより、展開ステップをユーザ・モードの低いプライオリティの処理とし、ユーザ・モード実行にともなう安全メカニズムも提供している。
デコンプレッサ28がデータを展開してから、データは、データを処理して何らかの特殊効果を提供する効果コンポーネント30へ渡される。図1に図示した例では、効果コンポーネント30はカーネル・モードで動作する効果フィルタ32を伴っている。更に、効果フィルタ32は、効果プロセッサ34を使用し、または、全てソフトウェアで所望の処理を行なうことができる。効果フィルタ32にアクセスするために、効果コンポーネント30は、システムI/O制御メカニズムを用いてデータおよび制御を効果フィルタ32に移す。これにより、効果フィルタ32を使用するためのカーネル・モード/ユーザ・モード境界の移動が起こる。効果フィルタ32は、機能および提示されたデータに適するように効果プロセッサ34を使用する。
制御およびデータが、効果フィルタ32から効果コンポーネント30へ戻された後、データはサウンド・レンダリング・ブロック36へ渡される。サウンド・レンダリング・ブロック36は制御とデータをサウンド・レンダリング・ドライバ38へ渡す。これによりカーネル・モード/ユーザ・モード境界を横断する別のモード遷移が起こる。サウンド・レンダリング・ドライバ38はさらにデータをレンダリングし、処理およびフィルタされてスピーカ42からの音響とするためにサウンド・カード40を制御する。
リーダ24、デコンプレッサ28,効果コンポーネント30,サウンド・レンダリング・ブロック36を含むフィルタ・グラフの動作は、クライアントまたは制御プロセスの制御または管理の下にある。図1では、このような制御プロセスが制御エージェント26で図示してある。制御エージェント26は音響データのレンダリングを行なうために異なるコンポーネントを管理している。制御エージェント26は図1に図示したフィルタ・グラフを構成するためにダイナミック・グラフ構造(dynamic graph building)を含むことができる。こうしたダイナミック・グラフ構造により、動的にソフトウェア・コンポーネントを割り当てて、エンドユーザによって指定された通りにカスタム・フィルタリングまたは処理パスの動的再構成を提供することができる。
図1の従来技術モデルに関しては、幾つかの考察を行なうことができる。第1に、フィルタ・グラフは大半または全体がユーザ・モード内部で構築また実行されている。こうしたモードは頑強なエラー検査とセキュリティを提供するものだが、ユーザ・モードでの実行では低いプライオリティとこれにともなう遅延が問題を起こすことがある。たとえば、オーディオまたはビデオ・データをレンダリングする場合、音楽またはビデオを一定のまたはほぼ一定の速度で再生するのが一般にきわめて望ましい。これはユーザ・モードで遭遇する遅延に対して十分な注意が必要とされる。ユーザ・モードを通るデータの安定で均一な流れを保証するように従来技術のモデルでは相当の努力が払われて来た。それでも未だ問題があり、十分に改善の余地が残されている。したがって、ユーザ・モードの低いプライオリティ実行および付随する遅延について懸念せずに、データ・ストリームの均一なレンダリングを提供することがきわめて望ましい。
図1に示したアーキテクチャから引き出せる別の考察としては、データのレンダリングには多数のモード遷移が必要となることが挙げられる。各々のモード遷移は遅延要素を導入してオペレーティング・システムによる調整が必要であるから、モード遷移を最小限に押えるかまたは排除し、同時にカーネル・モードで発生する高いプライオリティの実行を犠牲にしないことがきわめて望ましい。現在のところ、これらの目標に到達できるような技術は存在していない。さらに、これらの能力全部に適合しつつ、ユーザ・モードで動作する制御エージェントの能力を犠牲にせずに、高速かつ効果的にフィルタ・グラフを設定して所望の処理シーケンスを実現することがきわめて望ましい。
従来の技術における前述の問題は、カーネル・モード動作のユーザ・モード・プロキシを指向する本発明によりうまく克服された。本発明は、現時点では、カーネル・モードにおけるストリーミング・アーキテクチャを実現するオペレーティング・システムでの使用を意図している。このようなアーキテクチャでは、各種のカーネル・モード・ドライバまたはフィルタをカーネル・モード内部で接続することができ、ユーザ・モードを経由することなく、あるドライバまたはフィルタから他のドライバまたはフィルタへデータを渡すことができる。このようなアーキテクチャは、カーネル遷移の回数を最小限に押え、フィルタ・グラフにおける非能率とオーバヘッドを減少する。しかし、このようなアーキテクチャは、フィルタ・グラフを制御し設定する既存の制御エージェントに対して大幅な変更を必要とすることがある。本発明は、カーネル・モード・グラフの最上部に位置するソフトウェア層を形成して、制御エージェントが特定のカーネル・モード・フィルタのユーザ・モード・プロキシを操作することにより、その特定のカーネル・モード・フィルタを操作できるようにするものである。
本発明のひとつの態様において、汎用プロキシ・フィルタが定義される。このような汎用プロキシ・フィルタは、広範なカーネル・モード・フィルタまたはドライバのためのプロキシとして用いることができる。汎用プロキシ・フィルタは、マルチメディア・データの処理で有用なカーネル・モード・フィルタをサポートする機能を含む。しかし、このような汎用オブジェクトの機能を拡張したり、カーネル・モード・ドライバまたはフィルタの他のクラスで別の汎用オブジェクトとして使用することができる。汎用プロキシ・フィルタの新たなコピーを取得し、その汎用プロキシ・フィルタを特定のカーネル・モード・フィルタへ接続する処理によって、汎用プロキシ・フィルタを再設定し接続されたカーネル・モード・フィルタと特に動作するように適合させる。
汎用プロキシ・フィルタの固有の能力により、制御エージェントが特定のカーネル・モード・フィルタの基本となる能力へうまくアクセスすることができないような状況では、汎用プロキシ・フィルタの能力を拡張するメカニズムが設定されている。ある態様において、汎用プロキシ・フィルタは、拡張を汎用プロキシ・フィルタに取り込むことにより、拡張することができる。ある実施例において、汎用プロキシ・フィルタは複数の所定の「フックポイント」を有している。特定のカーネル・モード・ドライバの提供者は、1つまたは2つ以上の所定のフックポイントで接続される1つまたは2つ以上の拡張(エクステンション:extention )も提供できる。このような拡張が汎用プロキシ・フィルタに組み込まれる場合、プロキシ・フィルタは、汎用プロキシ・フィルタに提供された実行可能コードの代わりに、拡張で提供されたコードを実行する。このようにすると、カーネル・モード・ドライバの提供者はフックポイントのいずれかひとつで汎用プロキシ・フィルタの挙動を上書きすることができる。このようにすると、カーネル・モード・ドライバの開発者は、汎用プロキシ・フィルタを書き直す必要無しに汎用プロキシ・フィルタの能力を拡張することができる。カーネル・モード・ドライバの提供者は、汎用プロキシ・フィルタへカーネル・モード・ドライバと何らかの適当な拡張を単に提供するだけで良い。プロキシ・フィルタへの拡張の組み込みは、幾つかの実施例において実行時に行なわれている。つまり、プロキシ・フィルタはバイナリ的に拡張可能である。
所定のフック・ポイントで汎用プロキシ・フィルタの能力を拡張することに加えて、汎用プロキシ・フィルタは他の多数の方法で拡張できる。汎用プロキシ・フィルタは変換機能を実行する拡張を組み込むこともできる。たとえば、ユーザ・モード・フィルタからカーネル・モード・フィルタへ、またはその逆に、データ・ストリームを渡すためのインタフェースを変換する必要がある場合がある。また、ボリューム設定、トーン設定、輝度制御など、オーディオおよびビデオ処理に応用可能で有用な他の複数種類の制御のような特定種類の制御機能を提供するのに適している標準制御が現在多数存在している。汎用プロキシ・フィルタは設定プロセスの間に自身に標準制御を何個でも取り込むことができる。つまり、カーネル・モード・ドライバの提供者が標準制御と互換性のあるドライバを作成する場合、このような制御を提供者の側で余分な努力なしに提供することができる。あるいはまた、カーネル・モード・ドライバ提供者はプロキシ・フィルタに組み込まれたカスタム制御を提供したいと希望することがある。
ユーザがたとえばボリューム、輝度などのカーネル・モード・ドライバの幾つかのパラメータをセットできるのが望ましいことが多い。このような能力を実現するには、一般にユーザがカーネル・モード・ドライバに各種パラメータをセットするために使用されるデータを入力できるようにするユーザ・インタフェース・コンポーネントを提供することが必要である。本発明の汎用プロキシ・フィルタは、組み込まれた各々の制御にどのユーザ・インタフェースを使用してユーザからデータを収集すべきか問い合わせる能力を組み込んでいる。汎用プロキシ・オブジェクトは識別したユーザ・インタフェースを取り込み、ユーザは識別されたユーザ・インタフェースを用いて適当なパラメータをセットすることができるようになる。
汎用ユーザ・モード・プロキシ・フィルタを設定し特定のカーネル・モード・フィルタに接続すると、単に対応するユーザ・モード・プロキシ・フィルタを相互接続することで、制御エージェントはカーネル・モード・フィルタを相互接続することができる。これは、カーネル・モード・フィルタと特に動作するように制御エージェントを変更する必要がないという顕著な利点を提供するものである。ユーザ・モード・プロキシ・フィルタは馴染み深いプロトコルを用いて制御エージェントを扱うことができ、また制御エージェントからの要求をカーネル・モード・フィルタのための適当なプロトコルに変換することができる。
初期に自己設定することに加えて、汎用プロキシ・フィルタは基本となるカーネル・モード・フィルタが変化するのに併せて自己再設定するのに対応できる。動的に自己再設定する能力は、基本となるカーネル・モード・フィルタが動的に設定を変化できるような実施例で特に重要である。
本発明の別の顕著な利点は、一方が完全にまたは部分的にユーザ・モードに存在し他方が完全にまたは部分的にカーネル・モードに存在しているような2つの処理ストリームを高速かつ簡単に同期させる能力である。フィルタ・グラフが時間に敏感なデータを処理する場合、たとえばオーディオまたはビデオのデータの場合、データが正しいレートで再生されていることを保証するように注意しなければならない。一般にこれには各処理モジュールが時間情報にアクセスできるようにして、正しいレートでデータの再生を維持するように処理を加速したりまたは減速したりできるようにする必要がある。2つの処理ストリームを同期させなければならない場合、たとえばビデオ・クリップが付随するオーディオ・ストリームを有する場合、2つのフィルタ・グラフを同期させて2つのデータ・ストリームが同期するようにしなければならない。このような状況では、両方のフィルタ・グラフがユーザ・モードに常駐していれば、単一のユーザ・モード・クロックを両方の処理ストリームに使用できる。
カーネル・モードでのストリーミング・アーキテクチャの出現により、2つのフィルタ・グラフが存在しており、一方のフィルタ・グラフはカーネル・モードに存在し、他方のフィルタ・グラフはユーザ・モードに存在しているような状況が発生し得る。このように、一つがユーザ・モードに存在し、他方がカーネル・モードに存在している場合、2つの処理ストリームを同期させる能力が必要である。本発明において、このような処理ストリームを同期させる能力を提供している。ある様態において、ユーザ・モード・クロックがユーザ・モード・フィルタ・グラフに対して定義され、カーネル・モード・クロックがカーネル・モード・フィルタ・グラフに対して定義される。一方のクロックがマスタ・クロックとして選択され、他方のクロックがスレーブ・クロックとして選択される。スレーブ・クロックは、マスタ・クロックに従属または同期している。このようなアーキテクチャを使用して、2つの処理ストリームは同期している。
カーネル・モード・クロックがマスタ・クロックとして選択されている場合、本発明は、カーネル・モード・クロックに対してユーザ・モード・プロキシを定義することで同期を達成している。ユーザ・モード・プロキシ・クロックは、カーネル・モード・クロックから時間情報を取り出して、時間情報をユーザ・モード・フィルタに提供する。カーネル・モード・フィルタは、マスタ・カーネル・モード・クロックから直接時間情報を取得する。
ユーザ・モード・クロックがマスタ・クロックとして選択されている場合、状況は多少複雑になる。このような状況では、ユーザ・モードの「フォワーダ」を定義する。ユーザ・モード・フォワーダはマスタ・ユーザ・モード・クロックから時間を取り出して時間情報をカーネル・モード・スレーブ・クロックへ転送する。つまり、フォワーダは、カーネル・モード・スレーブ・クロックに対して一種のユーザ・モード・プロキシとして機能する。あるいはまた、このような設定においては、カーネル・モード・スレーブ・クロックはユーザ・モード・マスタ・クロックのカーネル・モード・プロキシであるとみなすことができる。ユーザ・モード・フィルタは、特定の実施詳細にしたがって、マスタ・クロックまたはフォワーダのどちらかから時間情報を取り出すことができる。カーネル・モード・フィルタはカーネル・モード・スレーブ・クロックから時間情報を取り出す。
したがって、本発明の主な目的は、カーネル・モード・フィルタのためのユーザ・モード・プロキシを提供することである。本発明のその他の目的としては、ユーザ・モードで動作する制御エージェントがユーザ・モード・プロキシを操作することにより高速かつ簡単にカーネル・モード・フィルタを相互接続する方法を提供すること、変更されないかまたは各種拡張メカニズムを経由して事実上全てのカーネル・モード・フィルタで使用できるような汎用プロキシ・オブジェクトを提供すること、および、一方の処理ストリームは主としてまたは全体としてユーザ・モードに存在し、他方の処理ストリームは主としてまたは全体的にカーネル・モードに存在するような処理ストリームを同期するメカニズムを提供すること、が挙げられる。
本発明の更なる目的や利点は以下の説明に記載してあり、部分的には説明から明らかになるか、または本発明の実施することにより理解されよう。本発明の目的および利点は添付の特許請求の範囲に特に指摘された装置およびその組合せを用いて実現し、また得ることができる。本発明のこれらのまたその他の目的や特徴は以下の説明と添付の特許請求の範囲からより完全に明らかになるか、または本明細書で説明しているように本発明の実施することによって理解されよう。
本発明の前述のおよびその他の利点および目的が得られるような方法とするため、すでに簡単に説明した本発明のさらに詳しい説明は添付の図面に図示してある特定の実施例を参照して行なうものとする。これらの図面では本発明の代表的実施例だけを図示しており、本発明の範囲を限定すべきものとみなすべきではないことを理解した上で、添付の図面を用いて更に特定かつ詳細に本発明を説明し解説する。
用語
本明細書で用いている術語「ユーザ・モード」は、ユーザによって書かれた大半のプログラムが動作するオペレーティング・システムにおける動作レベルを表わしている。ユーザ・モード動作レベルは、通常もっとも安全なレベルであり、ひとつのアプリケーション・プログラムまたはプロセスが別のアプリケーション・プログラムまたはプロセスと干渉しないように相当量のオーバヘッドを有している。更に、システム資源へのアクセスは特定インタフェースを経由して高度に制御されており、動作プライオリティは一般に、最低か、そうでなければもっとも低いもののひとつである。
本明細書で用いている術語「カーネル・モード」は、ユーザ・モード動作レベルより制限が大幅に少ないオペレーティング・システムにおける動作レベルを表わしている。カーネル・モード・プログラムまたはプロセスの例としては、ハードウェア・コンポーネントを制御するためのソフトウェア・ドライバが挙げられる。代表的には、カーネル・モード・プログラムは性能に敏感であるから、ユーザ・モード・プログラムより少ない動作オーバヘッドを有している。更に、ハードウェアや多くのシステム資源へのアクセスは制限されていないか、またはユーザ・モード・プログラムに比べて大幅に制限が少ない。多くの場合、カーネル・モードで動作するプログラム・コードは、良好なシステム動作を確立するために、プログラマの統制(discipline)や約束事に従うこと(たとえば別のプログラムのアドレス空間を壊さない、など)に依存している。
本明細書で用いている術語「ドライバ」は、代表的にはカーネル・モードで動作するソフトウェア・ドライバ・プログラムを表わす。術語ドライバは、オペレーティング・システムにロードされる実際の実行可能プログラムや、または幾つかの機能を欠いたその一部も表わすことがある。ドライバは、多くの場合、必ずではないが、何らかの形でハードウェアに関連する。
本明細書で用いている術語「フィルタ」は、ドライバ自体の全体を含めて、ソフトウェア・ドライバ内部にみられる機能の一部を表わす。たとえば、ソフトウェア・ドライバは、単一機能を有する多数の異なるフィルタをサポートすることができる。また、更に一般的な意味では、術語フィルタは、カーネル・モードで動作しているソフトウェア・ドライバ・フィルタか、または、ユーザ・モードで動作している別の部分のプログラム・コードで行なわれているのかとは無関係に、たとえば展開などの実行される動作(オペレーション)を表わすことがある。
動作環境
以下の本発明では、これを実施するために用いられる1つまたは2つ以上の実施例の構造、または処理のどちらかを説明するための図面を用いることによって説明している。このように図面を用いて本発明を示すことは、本発明の範囲を制限するものと考えるべきではない。本発明はカーネル・モード動作のユーザ・モード・プロキシのための方法およびシステムの両方を意図している。本発明の実施例は、本発明を実現するためにソフトウェアを用いる汎用コンピュータを含み得る。特殊用途または専用コンピュータも本発明を実施するために用いることができ、本発明の範囲に含まれるべきものである。
本発明で用いられる特殊用途または汎用コンピュータは、標準のコンピュータ・ハードウェアたとえば中央演算処理装置(CPU)またはコンピュータで実行可能な命令を実行するためのその他の処理手段、実行可能な命令を有するコンピュータで読み取り可能な媒体、出力情報を表示するためのディスプレイまたはその他の出力手段、情報を入力するためのキーボードまたはその他の入力手段、その他を含むことができる。本発明の動作環境は、ユーザ・モードとカーネル・モードを有する、またはその等価物を有し、更に後述するような多数のカーネル・モード・フィルタまたはドライバの相互接続を行なうのに適しているようないくつかのオペレーティング・システムを含むことができる。現時点で本発明に好適な2種類の動作環境としては、マイクロソフト・ウィンドウズ(登録商標)またはマイクロソフト・ウィンドウズNT(登録商標)オペレーティング・システムが挙げられる。
本発明の範囲内の実施例は、実行可能な命令を有するコンピュータで読み取り可能な媒体も含む。このようなコンピュータで読み取り可能な媒体は汎用または特殊用途コンピュータからアクセスすることができる何らかの利用可能な媒体であり得る。例として、また制限としてではなく、このようなコンピュータで読み取り可能な媒体は、RAM、ROM、EEPROM、CD−ROM、またはその他の光ディスク記憶、磁気ディスク記憶、またはその他の磁気記憶装置、または所望の実行可能な命令を記憶するために使用でき、汎用または特殊用途コンピュータからアクセスすることのできる他の何らかの媒体を含むことができる。上記の組合せもコンピュータで読み取り可能な媒体の範囲内に含まれるべきものである。実行可能な命令は、たとえば、汎用コンピュータ、特殊用途コンピュータ、または特殊用途処理装置に何らかの機能または一群の機能を実行させるような少なくとも命令またおそらくはデータも含む。
発明の状況
背景の部分ですでに説明したように、図1は、従来技術の原理およびアーキテクチャにしたがって構成され実現された、オーディオ・データのストリームを処理するのに適したフィルタ・グラフを表わしている。簡単に参照すると、リーダ24、デコンプレッサ28、効果コンポーネント30、サウンド・レンダリング・ブロック36は、図示したように、フィルタ・グラフで相互に接続された一連のユーザ・モード・フィルタを形成している。制御エージェント26はフィルタ・グラフの動作を調整し制御する。オーディオ・データはリーダ24の制御下でディスク20からディスク・ドライバ22経由で取り出される。リーダ24はデータをデコンプレッサ28に渡し、デコンプレッサ28はデータを展開してから効果コンポーネント30に渡す。効果コンポーネント30は効果フィルタ32を使用し、効果フィルタ32は効果プロセッサ34を使用してデータを処理し何らかの効果を実現することができる。処理後、効果コンポーネント30はデータをレンダリングするためにサウンド・レンダリング・ブロック36へ渡す。サウンド・レンダリング・ブロック36はデータをサウンド・レンダリング・ドライバ38へ渡し、ここでデータをサウンド・カード40へ転送してレンダリングし、スピーカ42から再生する。
図2は、図1のフィルタ・グラフと同じ機能を実行するが、全てカーネル・モードで実現されているフィルタ・グラフを表わしている。このようなフィルタ・グラフは、カーネル・モードで当該フィルタの相互接続をサポートするオペレーティング・システムのカーネル・モード・フィルタから構成できる。マイクロソフト・ウィンドウズNT(登録商標)の将来のバージョンがこのような能力を内蔵するであろうと現時点で予想されている。このようなアーキテクチャの各種の詳細は幾つかの同時出願中の特許出願に見ることができる。カーネル・モード・フィルタがどのように相互接続されるかの詳細は、「カーネル・モードでソフトウェアドライバを相互接続するための方法およびコンピュータ・プログラム製品(Method And Computer Program Product For Interconnecting Software Drivers in Kernel Mode) 」(以下では「相互接続カーネル・モード・ドライバ」出願と称する)と題する、同時出願中の、George H. J. Shaw, Bryan A. Woodruff,Thomas J. O'Rourkeの連名で受理された米国特許出願第08/825,856号に見ることができる。この出願は本明細書において参照により含めている。同時出願中の、「メッセージ作成を認証しファイル・オブジェクトへのメッセージ転送を行なうための方法、コンピュータ・プログラム製品、およびデータ構造(Method, Computer Program Product, And Data Structure For Validating Creation Of And Routing Messages To File Objects)」(以下では「メッセージ転送」出願と称する)と題する、George H. J. Shaw とBryan a. Woodruff 連名で受理された米国特許出願第08/826,644号は、各種カーネル・モード・フィルタへメッセージをどのように転送するかと、こうしたメッセージをどのように取り扱うかを議論している。本出願も本明細書において参照により含めている。「標準化クロック・メカニズムを使用して多数のデータ・ストリームの処理を同期し、不同処理レートを一致する方法およびコンピュータ・プログラム製品(Method And Computer Program Product For Synchronizing The Processing Of Multiple Data Streams And Matching Disparate Processing Rates Using A Standardized Clock Mechanism)」(以下では「同期」出願と称する)と題する、同時出願中の、George H. J. Shaw, Bryan A. Woodruff, Thomas J. O'Rourkeの連名で受理された米国特許出願第08/826,560号は、多数のカーネル・モード処理ストリームをどのように同期させられるか、またフィルタ・グラフ内部のフィルタの処理レートをどのように一致させるかを議論している。本出願も参照により含めている。「別々の処理コンポーネント間におけるバッファ間のデータ転送を減少させるための方法およびコンピュータ・プログラム製品(Method AndComputer Program Product For Reducing Inter-Buffer Data Transfers Between Separate Processing Components) 」(以下では「バッファ間転送」出願と称する)と題する、同時出願中の、George H. J. Shaw, Bryan A. Woodruff, Thomas J. O'Rourkeの連名で受理された米国特許出願第08/825,957号は、フィルタ・グラフ内のフィルタ間で効率的な処理を行ない相互接続されたフィルタ間のデータ転送を行なうためにどのようにメモリを割り当てるかを開示している。この特許出願も本明細書において参照に含めてある。
図2に戻って、同時出願中の上記の特許出願に開示されているアーキテクチャによれば、制御エージェント44は、カーネル・モード・フィルタを相互接続するためのデータ・フォーマットおよび接続フォーマットを識別するためにドライバに問い合わせ、図2に示したように処理が全部カーネル内部で行なわれるようなフィルタ・グラフを作成する。制御エージェント44は、重要なイベントの通知も受け取るので、必要に応じて制御を行なうことができる。こうしたイベントの例としては、処理終了、データ欠乏状態、データ・オーバラン状態、その他が挙げられる。
図2において、サウンド・データはディスク・ドライバ48によりディスク46から読み込まれる。この処理はリーダ・ドライバ50の制御の下で行なわれる。リーダ・ドライバ50はデータを接続しているデコンプレッサ52に渡す。すでに述べたように、展開後にデータは効果フィルタ54へ渡される。効果フィルタ54は適切に効果プロセッサ56を使用して効果を適用し、データをサウンド・レンダリング・ドライバ58へ渡す。サウンド・レンダリング・ドライバ58はサウンド・カード60を制御して、オーディオ・データが音響としてレンダリングされ、スピーカ62から再生される。
図1と図2に図示した処理を比較すると、同等の処理が、図2のアーキテクチャではカーネル遷移の除外によって大幅に少ないオーバヘッドで実行されるのが分かる。更に、すでに参照により含まれている同時出願中の出願において説明しているように、各種カーネル・モード・フィルタによって割り当てられたバッファ間での不必要なデータ移動などのその他の非効率性を除外することに対して大変な努力が払われている。カーネル・モードで動作するプロセスにより達成される本質的な性能の増加と組み合せると、これらの改良は現行技術を大きく越える能力の高能率フィルタ・グラフを作成することができる。
しかし、このような改良は代償を払う必要がある。たとえば、制御エージェント44は、図1に図示したようなユーザ・モード・フィルタの代わりに、カーネル・モード・フィルタを扱うことになるので、通常、制御エージェント44は、カーネル・モード・フィルタを使用してフィルタ・グラフを作成するために使用されるプロトコルおよび情報をどのように取り扱うかを意識(awareness) して、変更する必要がある。これはカーネル・モード・フィルタで使用される新規プロトコルを理解するために費やす必要のある時間とエネルギーの両方のため、および新規能力を利用するように既存の制御エージェントを変更するかまたは新規に制御エージェントを作成するのに必要な時間とエネルギーから、相当な努力を必然的に伴なうことになる。既存のユーザ・モード・フィルタを理解するプログラマと制御エージェントに対して、その知識を利用して、このようなアーキテクチャによって提供される能力増大を利用するのに必要な学習および努力の量を減少できるようにすることのがきわめて望ましい。本発明は、新規アーキテクチャの長所または利点のいずれも犠牲にすることなく、これらの結果を実現するように設計されている。
発明の説明
図3を次に参照すると、本発明の原理が組み込まれた図2のフィルタ・グラフを示す図面が示してある。図3に図示してあるように、本発明によって実現されたフィルタ・グラフと図2に図示したように実現されたフィルタ・グラフの間の唯一の相違点は、カーネル・モード・フィルタの各々に対してのプロキシ・フィルタの追加である。図3において、これらのプロキシ・フィルタは、リーダ・ドライバ50のためのプロキシ(代理)として機能するリーダ・プロキシ・フィルタ64、デコンプレッサ52のためのプロキシとして機能するデコンプレッサ・プロキシ・フィルタ66、効果フィルタ54のためのプロキシとして機能する効果フィルタ・プロキシ68、サウンド・レンダリング・ドライバ58のためのプロキシとして機能するサウンド・レンダリング・プロキシ70によって図示してある。つまり、ひとつの側面において、本発明の特徴は、カーネル・モード・フィルタにユーザ・モード・プロキシ・フィルタを提供することである。したがって、本発明の幾つかの実施例は、カーネル・モード・フィルタの代理に適したユーザ・モード・プロキシ・フィルタを形成するための手段を含む。図3において、リーダ・プロキシ・フィルタ64、デコンプレッサ・プロキシ・フィルタ66、効果フィルタ・プロキシ68、サウンド・レンダリング・プロキシ70は全てこうした手段の例である。
カーネル・モード・フィルタにプロキシ・フィルタを追加することで、幾つかの重要な利点を提供する。たとえば、以下に更に詳細に説明するように、制御エージェント44は、単にカーネル・モード・フィルタのプロキシを操作し通信することにより、特定のカーネル・モード・フィルタを操作し通信できる。つまり、カーネル・モード・フィルタのユーザ・モード・プロキシは、頑強で慣れたインタフェースを特定の制御エージェントに提示すると同時に、制御エージェントがカーネル・モード・ストリーミング・アーキテクチャの利点全部を利用できるようにするものである。実際の実施によっては、制御エージェント44は各種フィルタの特定の機能を利用するために幾らか変更を加える必要がある場合がある。しかし、これらの場合でも、これらの機能を利用するために使用されるメカニズムは、馴染みのあるプロトコルおよび技術に基づくことができる。これにより、特定のカーネル・モード・フィルタの特定の実装および特定の詳細にその程度は依存するが、特定の実施の詳細を隠蔽することができる。
図3に図示したフィルタ・グラフの動作は、図2に示したフィルタ・グラフの動作と基本的には同様に行なわれる。ディスク・ドライバ48は、リーダ・ドライバ50の指示のもとでディスク46からデータを取り出す。リーダ・ドライバ50はデータをデコンプレッサ52に渡し、デコンプレッサ52はデータを展開して効果フィルタ54に渡す。効果フィルタ54は効果プロセッサ56を用いて所望の効果を追加してからデータをサウンド・レンダリング・ドライバ58に渡す。サウンド・レンダリング・ドライバ58はサウンド・カード60を制御して、データがレンダリングされスピーカ62から再生されるようにする。つまり、図3のフィルタ・グラフは、動作において、図2のフィルタ・グラフと実質的に同様に機能し、図2のフィルタ・グラフの利点の全部を有している。
相違点は、制御エージェント44がカーネル・モード・フィルタ・グラフと相互作用する形態だけである。図2で要求されるような、個別のカーネル・モード・フィルタを直接扱うのではなく、制御エージェント44は、個別のカーネル・モード・フィルタと、対応するプロキシ・フィルタ経由で相互作用することができる。つまり、プロキシ・フィルタが制御エージェント44に通知を送出するような状況では、通知は図2のフィルタ・グラフで使用されている何らかのメカニズムを経由するのではなく、対応するプロキシ・フィルタを通って渡される。同様に、制御エージェント44が図3のフィルタ・グラフを設定する場合、これらの設定は全て対応するプロキシ・フィルタの操作によって実現できる。たとえば、図3のカーネル・モード・フィルタ・グラフを作成する場合、制御エージェント44は対応するプロキシ・フィルタを接続し、対応するプロキシ・フィルタが個々のカーネル・モード・フィルタを所望のフィルタ・グラフへ接続する詳細を取り扱うことになる。つまり、制御エージェント44の観点からは、図1のそれと類似のユーザ・モード・フィルタ・グラフが提示される。これが図3では、個々のプロキシ・フィルタの間の破線接続72で示されている。このような接続は、制御エージェント44の観点からは、ユーザ・モード・プロキシ・フィルタが接続されてデータがこれらの間を流れるようになることから、仮想接続と考えることができる。幾つかの実施において、実際の接続が個々のプロキシ・フィルタの間に存在することがある。このような接続は、対応するカーネル・モード・フィルタの相互接続を必要に応じて行うために、プロキシ・フィルタ間の情報交換が行えるようにすることが有用である。同様の情報接続を有する他の理由も存在する。しかし、カーネル・モードに配置されたフィルタ・グラフで処理されるデータは、個々のプロキシ・フィルタ間で交換されない。
本発明のプロキシ・フィルタを実施するに、広範な技術を使用できる。どの技術を選択するかは、特定の動作環境と開発者の目標に大きく依存する。たとえば、2台のコンピュータ・ステーションの間でのビデオ会議などの単一の特定目的にあわせてカスタム・フィルタ・グラフを作成し最適化することができる。このような特化したフィルタ・グラフは、その特定の用途に特に適するようにカスタマイズしたカーネル・モード・フィルタを必要とすることがある。しかし、個々のカーネル・モード・フィルタが各種の用途で広い応用性と用途を有することを本発明では想定している。たとえば、マルチメディア用オーディオ・データを処理するのに必要な多くのフィルタはテレビ会議にも応用できる。つまり、本発明の概念はマルチメディア分野を越えて広範な応用分野での用途を有している。つまり、マルチメディアの例は本発明の各種用途を示すために本出願全体で典型的に使用されるが、このような例は本発明の範囲を制限するものと考えるべきではない。
本発明は一般的なマルチメディア環境で特に応用性を有し得る。本発明が特に有用性を有し得るような環境のひとつに、マイクロソフト社のActiveMovie(アクティブムービー)製品がある。ActiveMovie は、開発者や専門家がマルチメディア製品を製作できるようにするクロス・プラットホームのデジタル・ビデオ技術である。ActiveMovie はマルチメディア情報の再生のためのわかりやすいサービス群を提供する。ActiveMovie の柔軟なアーキテクチャは、ツールおよびコンテンツ開発者が各種データを処理するためのフィルタ・グラフを製作できる置き換え可能なフィルタのシステムに基づいている。本発明のユーザ・モード・プロキシ・フィルタはActiveMovie 環境に統合するためのActiveMovie フィルタとして製作することができる。これによりActiveMovie などの製品がカーネル・モード・フィルタを利用できるようになると同時に、それまでに開発したユーザ・モード・フィルタとの一貫性を維持することができる。
図4は対応するプロキシ・フィルタを使用して2つのカーネル・モード・フィルタを相互接続するプロセスを詳細に示している。図4において、カーネル・モード・フィルタ74はユーザ・モード・プロキシ・フィルタ76を有し、カーネル・モード・フィルタ78はユーザ・モード・プロキシ・フィルタ80を備えている。図4に図示してあるように、カーネル・モード・フィルタ74とカーネル・モード・フィルタ78は複数の「ピン」82を含む。ピンは、カーネル・モード・フィルタが別のカーネル・モード・フィルタへ接続される接続点である。2つのカーネル・モード・フィルタのピンを相互接続することによって、データフロー・パスが作成され、ひとつのカーネル・モード・フィルタから別のカーネル・モード・フィルタへデータが流れる。カーネル・モード・フィルタのピンの相互接続は図2に図示したフィルタ・グラフがどのように接続されるかによる。
図4において、接続プロセスは制御エージェント44の制御下にある。つまり、制御エージェント44がカーネル・モード・フィルタ74とカーネル・モード・フィルタ78の間に図示した相互接続を実際に形成する。しかし、このような接続はユーザ・モード・プロキシ・フィルタ76とユーザ・モード・プロキシ・フィルタ80を経由して行なわれる。制御エージェント44がカーネル・モード・フィルタ74とカーネル・モード・フィルタ78内部の機能にアクセスできなければならないのであれば、対応するプロキシ・フィルタ76および80は対応するカーネル・モード・フィルタの機能に制御エージェント44がアクセスできるようにするメカニズムを提供する必要がある。したがって本発明の範囲に含まれる実施例は、カーネル・モード・フィルタの機能へクライアント・プロセスからのアクセスを提供するための手段を含んでいる。言い換えれば、プロキシ・フィルタは適当な環境でカーネル・モード・フィルタの特定機能へのアクセスを提供するべきである。提供する必要のあるアクセスの程度は、明らかにフィルタが接続されるカーネル・モード・フィルタの特定機能およびフィルタ・グラフの種類に依存する。しかし、最低限でも、プロキシ・フィルタはカーネル・モード・フィルタを別のカーネル・モード・フィルタへ接続する能力を提供すべきである。
図4において、アクセスを提供するための手段は、インタフェース84およびインタフェース86で図示してある。インタフェース84とインタフェース86はプロキシ・フィルタ経由でカーネル・モード・フィルタの機能にアクセスするメカニズムの一般表現である。インタフェースが実際にどのように機能するかと、このようなインタフェースの詳細とについては、プロキシ・フィルタを実現するためにどの技術を使用するかと、対応するカーネル・モード・フィルタとに大きく依存する。これらのコンポーネントを実現するためには多様な技術を使用できる。たとえば、これらのコンポーネントは、システムに常駐する別個のソフトウェア実体から作成できる。一例として、多くのオペレーティング・システムのカーネルに現在常駐しているドライバは、クライアント・プロセスから呼び出すことができる機能を提供するコード部分でしかない。しかし、現時点ではマイクロソフトのコンポーネント・オブジェクト・モデル(Component Object Model:COM)技術を用いてユーザ・モード・プロキシ・フィルタを実現するのが望ましい。マイクロソフトのCOM技術はOLEやActiveX を含む広範な基本技術と密接に関連している。COMの基本と当該技術がActiveX やOLEとどのように関連するかについては、本明細書に参照により含めるマイクロソフト・プレス刊David Chappell著“Understanding ActiveX and OLE ”に記載されている。
マイクロソフトのCOM技術は業界標準になっており当業者には周知である。しかし、基本的には、COMは独立したソフトウェア・ユニットを組み合せ動作時にバイナリ・レベルで拡張するメカニズムを定義している。以下で詳細に説明するように、このような技術は本発明の幾つかの側面を実現するのに理想的である。COM規格によれば、COMオブジェクトと呼ばれるソフトウェア実体がCOMオブジェクト内部の機能へのアクセスを提供する1つまたは2つ以上のインタフェースを定義する。ひとつのCOMオブジェクトが別のCOMオブジェクトのインタフェースを取得して提示するためのメカニズムが存在することで、クライアント・プロセスからは、2つのCOMオブジェクトが両方の機能を組み合わせた単一のオブジェクトのように見える。また、ひとつのCOMオブジェクトがクライアント・プロセスへ何らかの追加のインタフェースを提示することなく、別のCOMオブジェクトの機能を使用できるようにするメカニズムも存在する。基本的に、COMインタフェースは、特にCOMオブジェクトの特定の機能にアクセスするために、クライアント・プロセスから起動するまたは呼び出すことのできるような、メソッドと呼ばれることもある一連の関数(function)を提供している。
図4に戻って、ユーザ・モード・プロキシ・フィルタ76とユーザ・モード・プロキシ・フィルタ80がCOM技術を用いて実現されている場合、インタフェース84とインタフェース86はCOM規格に準拠したインタフェースである。これらのインタフェースは、カーネル・モード・フィルタ74およびカーネル・モード・フィルタ78を操作するために、制御エージェント44によってアクセスされる。
本発明の特定のひとつの実施において、以下のようなプロセスを用いてカーネル・モード・フィルタ74とカーネル・モード・フィルタ78を相互接続することができる。この実施例では、ユーザ・モード・プロキシ・フィルタ76は、制御エージェント44がカーネル・モード・フィルタ74のピンを識別できる情報を有することになる。このような情報は、ユーザ・モード・プロキシ・フィルタ76内に格納されるか、または、ユーザ・モード・プロキシ・フィルタ76を設定してカーネル・モード・フィルタ74のピンに対応するユーザ・モード・ピンを組み込み、制御エージェント44からは、ユーザ・モード・プロキシ・フィルタ76が、カーネル・モード・フィルタ74と同じ2つの入力ピンおよび単一の出力ピンを有するように見えるようにできる。図4において、ユーザ・モード・プロキシ・フィルタ76は、カーネル・モード・フィルタ74の各ピン82に対応するピン83を設定される。ピン83はCOM技術を用いて実現することもできる。ピン83がCOMオブジェクトの場合、各ピンは、たとえば図4に示したインタフェース85のように、1つまたは2つ以上のインタフェースを提示できる。このようなインタフェースはまた、カーネル・モード・フィルタの機能へのアクセスを提供するための手段の一例でもある。図4の全てのピンとこれのインタフェースは共通の番号で識別されるが、各ピンは種類が異なることがあり、各々が異なるインタフェースを提示できることに注意されたい。プロキシ・フィルタにピンを設定するプロセスは以下で詳細に説明する。ユーザ・モード・プロキシ・フィルタ80も同様に、カーネル・モード・フィルタ78のピン82に対応する単一の入力ピン83と単一の出力ピン83で設定できる。
ピン情報は、たとえば、プロキシ・フィルタ76とプロキシ・フィルタ80の両方から提示されたインタフェースの一方で提供できる。図4において、インタフェース84はプロキシ・フィルタ76とプロキシ・フィルタ80の両方で実現される。つまり、制御エージェント44がプロキシ・フィルタ76とプロキシ・フィルタ80のピンを見付けられる機能が、インタフェース84に提供される。制御エージェント44は、制御エージェント44で理解されるプロトコルを用いて、プロキシ・フィルタ76とプロキシ・フィルタ80の適当なフィルタ・ピンを相互接続する。これが相互接続87として図4に図示してある。この相互接続に応答して、プロキシ・フィルタ76およびプロキシ・フィルタ80は、カーネル・モード・フィルタ74およびカーネル・モード・フィルタ78を指定されたピンで相互接続することにより応答する。カーネル・モード・フィルタ74とカーネル・モード・フィルタ78を接続するために使用するプロトコルはプロキシ・フィルタ76とプロキシ・フィルタ80を相互接続するために制御エージェント44で使用するプロトコルとは劇的に異なることに留意されたい。更に、カーネル・モード・フィルタ74とカーネル・モード・フィルタ78の間の相互接続が、プロキシ・フィルタの一方によってまたはプロキシ・フィルタの両方によって行なわれるように実装を定義できる。このような実施の詳細は、プロキシ・フィルタ76とプロキシ・フィルタ80を相互接続するために制御エージェント44で使用するプロトコルと、カーネル・モード・フィルタ74とカーネル・モード・フィルタ78を相互接続するのに適当なプロトコルへそのプロトコルをどのように変換するかにだけ依存している。
上記の説明から、別のプロキシ・フィルタと相互接続するように制御エージェントから指示を受け取ると、応答してカーネル・モード・フィルタに相互接続する本発明の範囲内の実施例は、あるカーネル・モード・フィルタのピンを別のカーネル・モード・フィルタへ接続するための手段を含むことが明らかである。このような手段は、1つまたは2つ以上のプロキシ・フィルタで2つのカーネル・モード・フィルタを相互接続するのに必要とされる適当なプロトコルへと受信した命令を変換するために使用される何らかのメカニズムとすることができる。本発明の観点から重要なことの全ては、2つのユーザ・モード・プロキシ・フィルタを相互接続するように定義されたプロトコルを用いることで、ユーザ・モードの制御エージェントが2つのカーネル・モード・フィルタを相互接続できることである。図4において、このようなメカニズムが、プロキシ・フィルタ76とプロキシ・フィルタ80の相互接続87として、または最終結果を示すカーネル・フィルタ接続88として、図示してある。カーネル・モード・フィルタを互いに相互接続することで、実際にはたとえばハードウェア・ディバイスまたはコンポーネント、リモートマシン、またはリモートマシンのプロキシなど、他のディバイス、システム、またはソフトウェア・コンポーネントを相互接続することになる。
前述のように、本発明は、多くの利点と長所を提供するが、本発明の唯一の欠点は、ユーザ・モード・プロキシ・フィルタがカーネル・モード・フィルタに対応して存在するという概括的なアーキテクチャである。そのため、カーネル・モード・フィルタの提供者は、カーネル・モード・フィルタを提供するばかりでなく、カーネル・モード・フィルタがここで説明したように用いられる場合、ユーザ・モード・プロキシ・フィルタを提供する位置におかれている。
カーネル・モード・フィルタの提供者をユーザ・モード・プロキシ・フィルタを提供する必要がある位置に位置付けるのは望ましくない。カーネル・モード・フィルタの提供者の多くは、ユーザ・モード・ソフトウェア・コンポーネントを書き上げる上での専門性が相当に不足している。したがってカーネル・モード・フィルタの提供者がユーザ・モード・プロキシをゼロから作成する必要無しにユーザ・モード・プロキシを利用できるようにするのが非常に望ましい。このような目標は、各種のメカニズムによって再設定および拡張することのできる基本的な汎用ユーザ・モード・プロキシ・フィルタを提供して広範囲の異なるカーネル・モード・フィルタの代理とすることにより実現できる。COM規格は実行時に既存のソフトウェアCOMオブジェクトの拡張性を提供しているので、このような技術は汎用プロキシ・フィルタを実現するのに理想的である。次に、図5を参照すると、汎用プロキシ・フィルタと特定のカーネル・モード・フィルタにそのフィルタを適合させるような設定および拡張の図が示されている。汎用ユーザ・モード・プロキシ・フィルタを特定のカーネル・モード・フィルタで動作するように適応させ拡張しなければならない場合、このようなプロキシ・フィルタは特定のカーネル・モード・フィルタに一致するように、ユーザ・モード・プロキシ・フィルタを変更するための手段を必要とする。図5との関連で説明するメカニズムと概念はこうした変更するための手段の幾つかの例である。
図5において、汎用プロキシ・フィルタを変更するプロセスは、汎用プロキシ・フィルタのインスタンスが作成されるか取得された時に始まる。汎用プロキシ・フィルタがCOMオブジェクトを用いて実現されている場合、COM規格は、どのようにクライアント・プロセスたとえば制御エージェント44がCOMオブジェクトのインスタンスを取得または作成できるかを定義している。要するに、特定のものに適合したユーザ・モード・プロキシ・フィルタの作成は、汎用プロキシ・フィルタを最初に作成し、次に汎用プロキシ・フィルタを特定のカーネル・モード・フィルタに適合させるかまたは設定することから始まる。
図5において、作成された汎用プロキシ・フィルタのインスタンスが汎用プロキシ・フィルタ90で図示してある。汎用プロキシ・フィルタ90を作成すると、汎用プロキシ・フィルタ90は、どのように設定されるべきかを識別するステップを行い、次に、特定のカーネル・フィルタにあわせて自分自身を変更するまたは適合させるステップを行う必要がある。この再設定を実現するには多くの方法が使用でき、以下に示し説明するプロセスは単なる例としてみなすべきで本発明の範囲を制限するものとみなすべきではない。以下の説明ではCOM規格が幾つかの機能を実行する方法について詳しく述べることにする。
汎用プロキシ・フィルタ90が作成された後、汎用プロキシ・フィルタ90は自己設定に必要な幾つかの情報を見つけ出す必要がある。こうした情報は、たとえば制御エージェントから渡されるといった、多種多様な方法で取得できるが、一般に、汎用プロキシ・フィルタ90によって取り出されるような一定のロケーションにこうした情報を格納しておくのが好ましい。図5において、こうしたロケーションはレジストリ92で表わされている。レジストリ92はCOM規格で必要な全ての情報が記憶されているロケーションである。代表的には、レジストリ92はシステム・レジストリとすることができる。図5において、レジストリ92から必要な情報を取得するためのプロセスは、問い合わせ94と応答96として図示してある。図5に図示してあるように、レジストリ内の情報は、汎用プロキシ・フィルタ90によって代理されるカーネル・フィルタ、汎用プロキシ・フィルタ90に組み込まれるべき拡張、および、必要に応じて他の情報を含む。
レジストリは、汎用プロキシ・フィルタ90が自己設定するのに必要とされるあらゆる情報を記憶するために使用できるが、代理されることになるカーネル・モード・フィルタから直接幾つかの情報を取得するのが好ましい。たとえば、カーネル・モード・フィルタのピンの本数および種類、ならびにその他の設定パラメータは、フィルタから直接取得できる。これがフィルタ設定パラメータ101として図5に図示してある。これに代わる方法として、これら全ての情報をレジストリ92に記憶させておき問い合わせ94によって取得することもできる。更にこれ以外では、デフォルトのフィルタ設定をカーネル・フィルタ98から直接取得し、上書きしようとする設定パラメータをレジストリ92から取得することができる。
情報をカーネル・モード・フィルタから直接取得する場合、汎用プロキシ・フィルタ90は、すでに述べたようにレジストリからカーネル・フィルタの識別(identity)とロケーションを取り出す。汎用プロキシ・フィルタ90は識別したカーネル・モード・フィルタを開くかアクセスする。これが図5ではカーネル・モード・フィルタ98と接続100および102で図示してある。汎用プロキシ・フィルタ90がカーネル・モード・フィルタ98から情報を取得すべき場合、汎用プロキシ・フィルタ90はフィルタについての情報を取得するためにカーネル・モード・フィルタ98に問い合わせるための手段を含む必要がある。接続100および102はこうした手段の例である。カーネル・モード・フィルタ98と汎用プロキシ・フィルタ90が適当な情報を通信できるようにする何らかのメカニズムを使用できる。たとえば、メッセージに基づくアーキテクチャでは、汎用プロキシ・フィルタ90とカーネル・モード・フィルタ98はメッセージ交換により通信できる。他の種類のアーキテクチャでは、カーネル・モード・フィルタ98は、汎用プロキシ・フィルタ90によって関数同様に呼び出すことのできるアクセスまたはエントリ・ポイントを提供している。汎用プロキシ・フィルタ90とカーネル・モード・フィルタ98の間の通信および情報交換のための基本となるメカニズムは、コンピュータの動作環境およびオペレーティング・システムによって専ら、さもなければ主として、決定されてしまう。
以下で詳細に説明するように、幾つかの状況では、汎用プロキシ・フィルタ90は、適当なユーザ・モード・プロキシ・フィルタとして動作するために、カーネル・モード・フィルタ98で必要とされる全ての機能を含まないことがある。このような状況では、汎用プロキシ・フィルタ90の能力は、1つまたは2つ以上の拡張(extention:エクステンション)を介して拡張する必要がある。図5において、このような拡張が拡張104で表わしてある。拡張104は汎用プロキシ・フィルタ90に組み込まれた時に汎用プロキシ・フィルタ90に追加の能力を提供するために使用できる。つまり、汎用プロキシ・フィルタ90をこの方法で拡張すべき場合、汎用プロキシ・フィルタ90は拡張を自分に組み込むための手段を含む必要がある。このような組み込みをどのように行なうかのプロセス例について以下で詳細に説明する。しかし、このような手段は、図5においてリンク106として図示してある。
すでに説明したように、幾つかの実施例においては、対応するカーネル・モード・フィルタの1つまたは2つ以上のピンに対応する1つまたは2つ以上のユーザ・モード・ピンを汎用プロキシ・フィルタ90へ組み込むのが望ましい。図5において、このようなユーザ・モード・フィルタ・ピンはフィルタ・ピン108として図示してある。フィルタ・ピン108は、インタフェース109で示されているように、COMオブジェクトを用いて実現できる。汎用プロキシ・フィルタ90はフィルタ・ピン108のインスタンスを作成し、必要に応じてカーネル・モード・フィルタ98の対応するピンと一致するように個々のピンを設定し、設定したフィルタピンを自分自身に組み込む。このような実施例において、フィルタ・ピン108と汎用プロキシ・フィルタ90は、フィルタ・ピンがプロキシ・フィルタから離れて存在しないような密接な関係を有している。ある意味では、汎用プロキシ・フィルタ90は、フィルタ・ピン108を保持するまたは含む容器と考えることができる。COM技術を汎用プロキシ・フィルタ90の基本として用いない場合、適当なユーザ・モード・フィルタ・ピンとともに汎用プロキシ・フィルタ90を設定する他のメカニズムを使用できる。フィルタ・ピンとともに汎用プロキシ・オブジェクト90を取得するまたは設定するために使用されるプロセスは、ユーザ・モード・ピンを作成するための手段の一例である。
ある種のカーネル・フィルタは、カーネル・モード・フィルタの動作を変化させるように変更またはセットできる各種パラメータまたは属性を有している。たとえば、2つのチャンネルを混合するカーネル・モード・フィルタは、各入力チャンネルの相対的音量レベルを表わすバランス・パラメータを含み得る。他の種類のフィルタは変更できる何個かの異なる種類のパラメータを有し得る。どのようにカーネル・モード・フィルタ98が機能するかを変更するために、こうしたパラメータまたは属性を操作する能力を汎用プロキシ・フィルタ90に設定するのが望ましいような状況が発生する。フィルタの幾つかのクラスでは、こうした制御はかなり標準的である。たとえば、オーディオ・データは音量をセットできるロケーションを有するのが一般的である。同様に、ビデオには、たとえば色調、色彩、コントラスト、輝度、その他といった幾つかの標準パラメータがある。これら標準的な制御の全部をプロキシ・フィルタの統合された一部として備える汎用プロキシ・フィルタ90を作成することは可能である。しかし、このようなアプローチは一般に汎用プロキシ・フィルタ90のサイズの増加に継る。したがって、汎用プロキシ・フィルタ90が必要に応じて制御を組み込むことができるような構造を作成するのが一般に良い。つまり、カーネル・モード・フィルタが音量制御を必要とする場合には、音量制御を汎用プロキシ・フィルタ90に組み込むことができる。音量制御が必要でない場合、音量制御は組み込む必要がない。図5において、汎用プロキシ・フィルタ90に組み込むことのできる制御が制御110で図示してある。本明細書で用いている術語「制御」は標準的な方法で一般的タスクを実行するソフトウェア・コンポーネントを表わしている。つまり、このような制御はすでに説明したようなパラメータをセットするために使用できる。ひとつの実施例において、制御110はActiveX 制御を表わしている。ActiveX は、標準的な方法で標準機能を実行するCOM技術に基づいたソフトウェア・コンポーネントである。このような制御は、ActiveMovie 製品内部でも使用され、音量、輝度、その他を設定する機能を実行するための標準化された制御が利用できる。
こうした制御を汎用プロキシ・フィルタ90に組み込む能力は明らかな利点を形成できる。たとえば、カーネル・モード・フィルタ98の提供者がある種の制御を要求しており、所望の機能を実行する標準制御が存在している場合、カーネル・モード・フィルタ98の提供者は、定義されている規格に合わせてカーネル・モード・フィルタ98を作成するだけで、こうした制御を取得し利用できる。汎用プロキシ・フィルタ90がカーネル・モード・フィルタ98へ接続するのに適している場合、適当な制御を汎用プロキシ・フィルタ90に組み込むことができる。つまり、カーネル・モード・フィルタの提供者は、フィルタを作成する時間と努力を払わなくとも、制御の利点を受け取れる。
制御が汎用プロキシ・フィルタ90に組み込まれている場合、汎用プロキシ・フィルタ90は制御を組み込むための手段を含む必要がある。図5において、こうした手段がリンク112として図示してある。制御を汎用プロキシ・フィルタ90に組み込むための手段は、こうした組み込みができる何らかのメカニズムを用いて実現できる。汎用プロキシ・フィルタ90がCOM技術を用いて実現される場合、また制御110がActiveX またはCOM技術のどちらかに基づいている場合、このような組み込み手段は、アグレゲーション(aggregation) またはコンティンメント(containment) のようにActiveX 制御またはその他のCOMオブジェクトに、COMオブジェクトがアクセスするために用いられる標準メカニズムであり得る。こうした術語は当業者には馴染みのものであるが、基本的にアグレゲーションは、ひとつのCOMオブジェクトが別のCOMオブジェクトのインスタンスを取得することにより、取得したCOMオブジェクトのインタフェースをクライアント・プロセスへ提示するプロセスである。これにより、両方のCOMオブジェクトが単一の集合COMオブジェクトであるかのように見えることになる。コンティンメントは基本的に同じプロセスだが、取得したオブジェクトのインタフェースが提示されず、単に内部的に保持され使用されるという点で異っている。汎用プロキシ・フィルタ90が他の何らかの技術を用いて作成される場合、ダイナミック・リンク・ライブラリがロードされる方法と同様にコードを実行時にリンクする、または、ひとつのソフトウェア・コンポーネントを別のソフトウェア・コンポーネントへ実行時に組込できるように開発された幾つかの技術など、他の種類のメカニズムを使用できる。
制御が汎用プロキシ・フィルタ90に組み込まれた場合、制御からの情報を取り出してカーネル・モード・フィルタ98で受け入れられる状態にするための変換を実行しなければならないことがある。この概念は、以下で図7を参照して更に詳細に説明するが、ある意味で、制御110はユーザ・モードで受け取った情報を取り出してカーネル・モード・フィルタ98で使用するのに適したフォーマットに変換するものと考えることができる。制御110で受け取った情報は制御エージェント44などの何らかの供給源からのことも、または後述するようにユーザ・インタフェースからのこともある。
ユーザがパラメータまたはカーネル・モード・フィルタの機能に影響する属性を設定できるのが非常に望ましいことが多い。たとえば、オーディオ・データを処理するのに適したフィルタ・グラフの音量を調整できることが非常に望ましい。ユーザが音量を調節する場合、ユーザからの入力を取り出して、音量が調節されるカーネル・モード・フィルタへ最終的に情報を転送するようなユーザ・インタフェースが存在する必要がある。本発明の範囲内の実施例は、したがって、ユーザ・インタフェースを組み込むための手段を含み得る。図5において、こうした手段は、ユーザ・インタフェース116のひとつを汎用プロキシ・オブジェクト90へリンクするリンク114で表わしてある。ユーザ・インタフェースを汎用プロキシ・オブジェクト90へ組み込むために何らかのメカニズムが使用できる。また、正確な選択は汎用プロキシ・フィルタ90を実現するために使用する技術に依存する。以下で詳細に説明するように、COM技術は、カーネル・モード・フィルタまたは制御がどのユーザ・インタフェースを使用してユーザからの入力を収集すべきかを指定できるメカニズムを提供している。このようなユーザ・インタフェースはユーザからデータを収集し、適当な制御に渡し、最終的にカーネル・フィルタへ転送することができるような方法で汎用プロキシ・フィルタに組み込むことができる。ユーザ・インタフェースをユーザ・モード・プロキシ・フィルタに組み込むひとつの方法を以下で詳細に説明する。
汎用プロキシ・フィルタ90をカーネル・モード・フィルタ98へ適合させるのに必要な全ての適当な拡張、制御、フィルタ・ピン、ユーザ・インタフェース、その他の何らかの特性で、汎用プロキシ・フィルタ90が設定されると、設定プロセスが完了する。汎用プロキシ・フィルタ90が、これらの種類のコンポーネントのどれを組み込んで特定のカーネル・モード・フィルタに適合させるべきかを識別する際に、どのコンポーネントを含めるべきかについての情報は各種の供給源から入って来る。たとえば、これら全ての情報は、汎用プロキシ・フィルタ90にコンポーネントを識別させこれらを組み込ませる方法でレジストリに格納される。あるいはまた、何らかの情報をレジストリに記憶しておき、他の情報はカーネル・モード・フィルタ98から取得するか、または他のコンポーネント自体の幾つかから取得するのでも良い。たとえば、汎用プロキシ・フィルタ90がカーネル・モード・フィルタ98の識別とロケーションを取得すると、カーネル・モード・フィルタ98は何らかの追加の拡張、制御、ピン、またはユーザ・インタフェースを識別できる。ひとつの実施例において、拡張とあわせたカーネル・モード・フィルタ98の識別とロケーションはレジストリ92から得られ、一方フィルタ・ピンおよびその他の設定パラメータはカーネル・モード・フィルタ98から得られる。レジストリ92のエントリはカーネル・モード・フィルタ98から受け取った設定を上書きするためにも使用できる。これらの実施例において、カーネル・モード・フィルタ98はこの情報の一部だけを識別する。これらの設定情報がどこから入って来るかは、汎用プロキシ・フィルタ90が正しく自己設定できるように十分な情報が取得できる限り問題にならない。
最後のポイントとして、フィルタ・ピン108がCOM技術を用いて実現される場合、他の設定オプションが可能になる。たとえば、COM技術を使用することで、フィルタ自身にではなくフィルタ・ピンへの直接的な制御または拡張のアグレゲーションが容易になる。こうした実施例では、独立した音量制御をミキサーの2つのピンへ直接アグレゲートさせることが可能である。このようなアプローチによると、ユーザ・モード・プロキシ・フィルタに新規で全く異なる設定を行なえる。こうしたアーキテクチャを使用することにより、図5の制御または拡張のいずれかがフィルタにではなくピンにアグレゲートできるようになる。また注意すべきことに、ユーザ・モード・プロキシ・フィルタをこれの対応するカーネル・モード部分がわずかに異なるように設定するのが望ましいか必要な場合が存在することがある。たとえば、ユーザ・モード・プロキシ・フィルタは特定の制御エージェントとの互換性を保証するために個数または種類の異なるピンを有しても良い。別の例として、ユーザ・モード・プロキシ・フィルタのピンがカーネル・モード・フィルタと異なるようにする方法でユーザ・モード・プロキシ・フィルタのピンに制御または他の拡張をアグレゲートさせることが望ましい場合もある。何らかの設定の相違はカーネル・フィルタとインタフェースする方法でプロキシ・フィルタが取り扱うことができる。
上記の説明では汎用プロキシ・フィルタの初期設定について焦点を当てたが、同様のプロトコルを用いてユーザ・モード・プロキシ・フィルタを動的に再設定して、対応するカーネル・モード・フィルタの設定変化に適合させることができる。ユーザ・モード・プロキシ・フィルタの動的再設定をサポートしている技術はすでに説明したマイクロソフトのCOM技術である。
図6を次に参照して、プロキシ・フィルタの拡張について詳細に説明する。図6において、ユーザ・モード・プロキシ・フィルタ118はカーネル・モード・フィルタ120のプロキシとして動作する。ユーザ・モード・プロキシ・フィルタ118は、たとえば図5の汎用プロキシ・フィルタ90などの汎用プロキシ・フィルタであったり、または、カーネル・モード・フィルタ120の能力全部にアクセスするか提示するように拡張する必要だけがある非汎用プロキシ・フィルタのことがある。ひとつの実施例において、ユーザ・モード・プロキシ・フィルタ118に1つまたは2つ以上の「フック・ポイント」を定義することにより、プロキシ・フィルタ118へ幾つかの拡張を組み込むことができる。各々のフック・ポイントは拡張を組み込めるロケーションを表わしている。代表的には、こうしたフック・ポイントはプロキシ・フィルタ118を開発した時に定義しておく。これらのフック・ポイントは、将来のカーネル・モード・フィルタがどのように動作するかを知ることが困難または不可能なロケーションに配置するのが一般的である。たとえば、2つのカーネル・モード・フィルタを相互に接続するためには、各々のカーネル・モード・フィルタは同じ種類のデータを処理しなければならない。言い換えれば、ビデオ・データを処理するフィルタとオーディオ・データを想定しているフィルタを接続するのは一般に不適切である。ある種のフィルタは種類が異なる多様なデータを受け入れることができる。他のフィルタは各種の異なったデータ形式を発生できる。たとえば、スプリッタ・フィルタはオーディオとビデオ・データを組み合わせたデータ・ストリームを受け入れて、オーディオ・データをひとつのチャンネルに、またビデオ・データを別のチャンネルに振り分ける。同様に、ミキサーはひとつのピンでオーディオ・データを、また別のピンでビデオ・データを受け入れて、オーディオとビデオを合成したストリームを発生する。
カーネル・モード・フィルタが別のフィルタに接続される前に想定しているまたは発生するデータ形式を識別しなければならないことから、プロキシ・フィルタたとえばプロキシ・フィルタ1182より典型的に実行される機能のひとつは、カーネル・モード・フィルタたとえばカーネル・モード・フィルタ120に対する形式のチェックを実行することである。プロキシ・フィルタ118が開発される時に、プロキシ・フィルタ118は全ての既知のデータ形式についてカーネル・モード・フィルタ120をチェックするように設定できる。しかし、プロキシ・フィルタ118が開発された後でデータ形式が定義された場合、または別の状況で、プロキシ・フィルタ118に置かれているコードに依存してカーネル・モード・フィルタ120をチェックすることはできない。このような状況は、最新のデータ形式またはカーネル・モード・フィルタ120で使用されるデータ形式を識別するのに必要な他の情報を含むことができる拡張に取っては典型的である。データ形式をチェックするロケーションでプロキシ・フィルタ118にフック・ポイントを設定することにより、プロキシ・フィルタ118のデフォルト動作を上書きする拡張をプロキシ・フィルタ118がそのポイントに組み込める。基本的に、これらのフック・ポイントは、特定のロケーションでプロキシ・フィルタ118から特定の拡張へ実行を移すメカニズム以上の何ものでもない。拡張が所望の機能を実行した後、制御をプロキシ・フィルタに戻すことができる。
拡張に制御を移すプロセスがリンク122で図6に図示してある。リンク122は、拡張または制御をプロキシ・フィルタへ組み込むための手段の更に別の例を表わしている。プロキシ・フィルタ118に組み込まれた制御または拡張がCOMオブジェクトであれば、制御または拡張の機能はインタフェース経由でアクセスまたは提示できる。このような状況が図6に図示してあり、ここで制御または拡張124はインタフェース126経由でアクセスされ、一方制御または拡張128はインタフェース130経由でアクセスされる。図6では、どちらをプロキシ・フィルタ118に組み込むにも同じメカニズムを使用し得ることから制御または拡張の間に区別はない。説明の目的では、制御または拡張の間の区別はほとんどまたは全く関係がない。
制御または拡張124に注目すると、制御または拡張124をインタフェース126経由でプロキシ・フィルタ118がアクセスする場合、制御または拡張124は更にカーネル・モード・フィルタ120にアクセスする。図6ではこれがリンク132によって表わされている。このリンクで表わしているように、カーネル・フィルタの提供者が希望するカーネル・モード・フィルタ120の機能へのアクセスがプロキシ・フィルタ118によって提示されない場合、カーネル・モード・フィルタの提供者は適当な拡張または制御を提供して、適当なメカニズムを使用して拡張または制御をプロキシ・フィルタへ組み込むことができる。プロキシ・フィルタまたは制御エージェントは提供された制御または拡張を介して機能にアクセスするか、またはこれらの機能をクライアント・プロセスに提示できる。プロキシ・フィルタ118がCOMオブジェクトであり、かつ制御または拡張がCOMオブジェクトの場合には、プロキシ・フィルタは制御または拡張を自分自身にアグレゲートさせ、制御または拡張の何らかのインタフェースを制御エージェントに提示することができる。
基本となるカーネル・フィルタにアクセスしないような制御または拡張も提供できる。この状況が図6に制御または拡張128で図示してある。場合によっては、制御または拡張はカーネル・フィルタの基本となる機能にアクセスする必要がないこともある。たとえば、カーネル・モード・フィルタを開発した時点でそのフィルタでサポートしているデータ形式に関する全ての情報が分かることが考えられる。十分な形式チェック能力を提供するためには、カーネル・モード・フィルタの提供者はプロキシ・フィルタ18にフックされる拡張も提供できる。この拡張はプロキシ・フィルタ118によって起動された時に分かっている形式情報を返すように予めプログラムしておくことができる。このような状況では、拡張はプロキシ・フィルタ118へ適当な情報を提供するために基本となるカーネル・フィルタへアクセスする必要がない。
前述のようにユーザ・モード・プロキシ・フィルタへ組み込まれる拡張は何個かの機能を実行できる。提供できる機能の幾つかの例は前述した。更にひとつの例として、拡張は変換機能を実行できる。図3のフィルタ・グラフは、全てのデータ処理がカーネル・モードで実行されるように図示してあるが、カーネル・モード・フィルタを代理しない1つまたは2つ以上のユーザ・モード・フィルタも含むフィルタ・グラフを作成できることが考えられる。このようなフィルタ・グラフでは、ユーザ・モード・フィルタへ接続するインタフェースの変換をカーネル・モード・フィルタへ接続するインタフェースへ、またはその逆に、提供する必要がある。
図7をここで参照して、ユーザ・インタフェースをプロキシ・フィルタへ組み込むためのひとつのメカニズムを詳細に説明する。図7において、カーネル・モード・フィルタ134はユーザ・モード・プロキシ・フィルタ136によって代理される。図7に図示してある例では、カーネル・モード・フィルタの動作を変更するために、変更することのできる各種属性をカーネル・モード・フィルタ134が有していると仮定しておく。更に、これらの属性を制御または拡張138によって変更できると仮定する。このような状況では、制御または拡張138はカーネル・フィルタ134の提供者によって提供されるか、またはすでに説明したものなどの標準的な制御または拡張とすることができる。制御または拡張138はすでに説明したようにプロキシ・フィルタ136に組み込まれる。
本発明のひとつの側面によれば、制御または拡張138の実施にCOM技術を使用する場合、制御または拡張138はプロキシ・フィルタ136に対して、ユーザからの入力を集めるために使用すべきユーザ・インタフェースを通知できる。たとえば、ActiveX の制御は、クライアント・プロセスから呼び出された場合に、ユーザからの入力を収集するために使用できるユーザ・インタフェースまたはユーザ・インタフェース群を返し、入力を制御に移すことができる特定の機能を含む。
COM技術は、特定の制御によって選ばれたユーザ・インタフェースを識別してユーザ・インタフェースからの情報を収集し、収集した情報を制御に渡す一定の方法を提供している。図7の例はこのプロセスがどのように実現されるかを示す。マイクロソフト・ウィンドウズ(登録商標)の用語を用いると、ユーザ・インタフェース・コンポーネントはプロパティ・ページとして認識される。マイクロソフト・ウィンドウズ(登録商標)に詳しい者にはこのオペレーティング・システムで使用されるプロパティ・ページのタブ付きダイアログ・ボックスで特定の情報を収集し、幾つかの属性をセットするのは馴染み深いであろう。図7をここで参照すると、処理は、プロキシ・フィルタ136が所望するプロパティ・ページを制御または拡張138に問い合わせることから始まる。このような問い合わせと応答がリンク140で表わしてある。プロキシ・フィルタ136は、個々のプロパティ・ページを保持し表示するために使用するプロパティ・フレーム142を作成する。このプロセスはリンク144として図7に図示してある。プロパティ・フレーム142は表示される各々のプロパティ・ページのためにホルダ・オブジェクトを有する。図7において、これらのホルダ・オブジェクトはホルダ146で表わしてある。プロパティ・フレーム142は所望のプロパティ・ページ148のインスタンスを取得する。次に、ダイアログ・ボックス全体が組み立てられてユーザから収集した情報を表示する。プロパティ・ページが情報を収集すると、これらの情報はリンク150で図示してあるように制御138へ渡される。制御または拡張138は、リンク152で表わしてあるようにカーネル・モード・フィルタ134へ、または、リンク154で表わしたようにプロキシ・フィルタ136へ情報を転送する。この処理全体は、一例として、ユーザ・モード・プロキシ・フィルタへユーザ・インタフェースを組み込むための手段を表わしている。この説明は主としてCOM技術を使用する観点から示しているが、別の技術を用いる他のメカニズムも存在する。重要なことは、ユーザ・インタフェースを認識してこれらのユーザ・インタフェースをユーザ・モード・プロキシ・フィルタへ組み込み、データをユーザから収集しカーネル・モード・フィルタのパラメータを変更するために使用できるようにするプロキシ・フィルタ136の能力である。
図5との関連においてすでに説明したように、制御がユーザ・モード供給源たとえばプロパティ・ページ148から情報を収集する場合、データの変換または再フォーマットを行なって、データをカーネル・モード・フィルタ134にとって適正なフォーマットにする必要がある。機能的には、制御138は、受け取ったユーザ・モード・データをカーネル・モード・フィルタ134に理解できるフォーマットへ変換する変換器であると考えられる。制御138は、適切なインタフェースを介して受け取った何らかのデータを取り出して、カーネル・フィルタ134へ渡すことができる。つまり、幾つかの実施例において、データはプロパティ・ページ148以外の供給源から入って来ることもある。これは、矢印151で示したように、データを制御138に渡す制御エージェント44で図7に図示してある。制御エージェント44がデータを制御138に渡せるようにするのは、たとえば、スクリプト化したマルチメディア・ショーを自動再生するのに有用である。
図8をここで参照すると、特定のカーネル・モード・フィルタで動作するようにユーザ・モード・プロキシ・フィルタを変更するための手段の別の例が図示してある。すでに説明したように、COM技術はCOMオブジェクトの拡張のための2つのメカニズムを提供している。一方のメカニズムはアグレゲーションで他方のメカニズムはコンティンメントである。図8では、コンティンメントの原理を用いて汎用プロキシ・フィルタを変更および拡張し、汎用プロキシ・フィルタが特定のカーネル・モード・フィルタを代理するのに適するようにするにはどうするかを示している。
図8において、カーネル・モード・フィルタ156は、汎用プロキシ・フィルタ158と包含(コンティンメント)フィルタ160の組み合せによって代理されている。この状況において、包含フィルタ160と汎用プロキシ・フィルタ158の組み合せがカーネル・モード・フィルタ156のユーザ・モード・プロキシを提供することに注意することが重要である。これが破線の囲み162で図8に図示してある。
コンティンメントの一般概念は、汎用プロキシ・フィルタ158がカーネル・モード・フィルタ156を代理するのに有用な何らかの機能を実行するが、もっと簡単なメカニズム、たとえばすでに説明したような拡張のフックなどによって提供することのできない追加の拡張が必要とされることである。このような状況において、汎用プロキシ・フィルタを包み込むまたは包含し、汎用プロキシ・フィルタ内部に見付からなかった追加の能力および機能を付与する第2のフィルタが書かれる。図8では、これによって包含フィルタ160が必要に応じて汎用プロキシ・フィルタ158から特定の機能を呼び出すが、必要とされるところで追加の機能を付加することになる。COMで用いられる包含モデルでは、汎用プロキシ・フィルタ158のどのインタフェースも、包含フィルタ160経由でクライアント・プロセスへ提示されない。包含フィルタ160はむしろ自分自身のインタフェースをクライアント・プロセス、たとえば前述したような制御エージェントへ、提示する。図8において、包含フィルタ160は汎用プロキシ・フィルタ158経由でのみカーネル・モード・フィルタ156と通信するように図示してある。幾つかの実施例では、包含フィルタ160はカーネル・モード・フィルタ156と直接通信することもできる。
組み合せプロキシ・フィルタを作成するプロセスは多数の方法で進めることができる。以下で説明するプロセスは単に一例である。この例では、たとえば制御エージェントなどのクライアント・プロセスがユーザ・モード・プロキシを作成したい場合、クライアント・プロセスは包含フィルタ160のインスタンスを作成することから開始する。包含フィルタ160はレジストリ164から、図示したように問い合わせ166と応答168によって、特定の情報を取り出す。図8に図示してあるように、取り出される情報のひとつはカーネル・モード・フィルタ156の識別とロケーションである。たとえばカーネル・モード・フィルタ156で利用できるピンの本数と種類など、追加の情報をレジストリ164から取り出すこともできる。
包含フィルタ160は多数の機能を提供するために汎用プロキシ・フィルタのインスタンスを使用することになるので、包含フィルタ160は汎用プロキシ・フィルタ158で図示してあるように汎用プロキシ・フィルタのインスタンスを作成する。作成時に汎用プロキシ・フィルタ158はレジストリ164から、問い合わせ172と応答174で示したように、情報を取り出す。図8に図示してあるように、レジストリ164から汎用プロキシ・フィルタ158によって取り出される情報のひとつは包含フラグである。このフラグは、別のフィルタに包含されることと、スタンドアロンのフィルタとして機能しなくなることを汎用プロキシ・フィルタ158に通知する。このようなフラグは、たとえば図5および図6に関連して図示し説明した動作などのある種の動作を上書きするために用いることができる。
汎用プロキシ・フィルタ158が作成されると、包含フィルタ160は、汎用プロキシ・フィルタ158を使用してカーネル・モード・フィルタ156を開き、カーネル・モード・フィルタ156に関する情報を取り出すことができる。包含フィルタ160は汎用プロキシ・フィルタ158を制御しているので、包含フィルタ160はカーネル・モード・フィルタ156のフィルタ名称を汎用プロキシ・フィルタ158に渡し得ることに注意すべきである。つまり、包含フィルタ160はどのカーネル・モード・フィルタが汎用プロキシ・フィルタ158によって開かれているかを調べることができる。汎用プロキシ・フィルタ158と包含フィルタ160はフィルタ上のピンの形式と本数に関する情報をカーネル・モード・フィルタ156から取り出せる。汎用プロキシ・フィルタ158と160はユーザ・モード・ピン170を作成して、これらのピンをすでに説明したように自分自身に組み込む。さらにピン170は独立したCOMオブジェクトとして図8に図示してある。たとえば、制御エージェントなどのクライアント・プロセスは、たとえばインタフェース176および178、または、制御エージェントに提示されていれば、ピン170上のインタフェースなど、特定のメカニズムを経由して組み合せユーザ・モード・プロキシ・フィルタの機能にアクセスできる。
特定の実施例は、図8に図示してあるようなコンティンメント(包含)メカニズムか、または図5に図示してあるような取り込みメカニズムを使用して、汎用プロキシ・フィルタを拡張し特定のカーネル・モード・フィルタへ適合させることができる。他の実施例は関連メカニズムの全部を実現できる。特定の汎用プロキシ・フィルタを拡張するために使用される正確な方法またはメカニズムは、汎用プロキシ・フィルタを実現するために使用される特定の種類の技術に大部分が依存している。
カーネル・モードにおけるストリーミング・アーキテクチャの出現によって、現在では全体または大部分がユーザ・モードに常駐する1つまたは2つ以上のフィルタ・グラフ、および、全体または大部分がカーネル・モードに常駐する1つまたは2つ以上のフィルタ・グラフを備えた多数のフィルタ・グラフを有することが可能である。これは、カーネル・モードにあるフィルタ・グラフがユーザ・モードにあるフィルタ・グラフと同期を取る必要のあるような状況を作り出している。ユーザ・モードにあるフィルタ・グラフはユーザ・モード・クロックから時間を受け取り、カーネル・モードにあるフィルタ・グラフはカーネル・モード・クロックから時間を受け取る。つまり、ユーザ・モード・クロックとカーネル・モード・クロックの同期を行なって、ユーザ・モード・フィルタ・グラフとカーネル・モード・フィルタ・グラフの同期が取れるようにするメカニズムを所定位置に配置する必要がある。本明細書の説明全体を通して、術語「クロック」は広い意味に取るべきである。本明細書で用いているように、この術語は時間をフィルタに提供する何らかのコンポーネントを含む。つまり、時間を生成するコンポーネント、ならびに別のコンポーネントから時間を受け取りこれを利用できるようにするコンポーネントは、どちらも術語クロックの範囲に含まれる。
図9を参照すると、同期させる必要のある2つのフィルタ・グラフの表現が図示してある。後述するように、一方のフィルタ・グラフはビデオ・データを処理し、他方のフィルタ・グラフはオーディオ・データを処理する。ビデオ・データを処理するフィルタ・グラフは全体がカーネル・モード内部に常駐する。このようなフィルタ・グラフは上記で参照により含められた特許によって作成できる。一方でオーディオ・フィルタ・グラフは、主としてカーネル・モードで動作するが単一のユーザ・モード・フィルタと、ユーザ・モード・プロキシ・フィルタによって代理される複数のカーネル・モード・フィルタを有している。
ビデオ・データを処理するカーネル・モード・フィルタ・グラフは、リーダ・ドライバ180、デコンプレッサ182、変換フィルタ184、照明(lighting)フィルタ186、およびビデオ・レンダラ188を含む。オーディオ・フィルタ・グラフはユーザ・モード・リーダ190、カーネル・モード・デコンプレッサ192、およびこれに付随するユーザ・モード・プロキシ194、カーネル・モード効果フィルタ196、およびこれに付随するプロキシ効果フィルタ・プロキシ198、およびサウンド・レンダラ198とこれに付随するプロキシ200を含む。変換プロセッサ202は変換フィルタ184が自分の機能を補完するために必要に応じて使用し、照明プロセッサ204は照明フィルタ186が自分の機能を遂行するために使用する。図9に図示してあるように、ビデオ・レンダラ188はビデオ・データをビデオ・カード206へレンダリングする。効果プロセッサ208はカーネル・モード効果フィルタ196が必要に応じて使用し、サウンド・レンダラ198はサウンド情報をサウンド・カード210へレンダリングし、スピーカ212で再生される。ディスク・ドライバ214はディスク216から、オーディオ・データについてユーザ・モード・リーダ190の制御下で、またビデオ・データについてはリーダ・ドライバ180の制御下で、情報を取り出す。
図9の2つの処理グラフにおいては、カーネル・モード・クロックをマスタ・クロックとして選択すべきものと仮定する。つまり、図9において、カーネル・モード・クロック220がマスタ・クロックであると仮定する。カーネル・モード・クロック220は全てのカーネル・モード・フィルタにタイミング情報を提供できる。図9において、これが配給線222で図示してある。一方で、ユーザ・モード・フィルタはユーザ・モード・クロックから情報を受信する。ユーザ・モード・フィルタへ情報を提供するためには、カーネル・モード・クロック220にユーザ・モード・プロキシを設定できる。図9において、このようなプロキシがユーザ・モード・プロキシ・クロック224として図示してある。カーネル・モード・クロックがマスタ・クロックとして選択される場合、カーネル・モード・フィルタのユーザ・モード・プロキシに関連してすでに説明した原理がユーザ・モード・プロキシ・クロックを作成するために応用できる。このようなユーザ・モード・プロキシ・クロックはマスタ・カーネル・モード・クロックからタイミング情報を取り出し、次いでこのタイミング情報をユーザ・モード・フィルタに提供する。図9において、ユーザ・モード・プロキシ・クロック224はマスタ・カーネル・モード・クロック220からタイミング情報を取り出してこのようなタイミング情報を要求するユーザ・モード・フィルタでこれが利用できるようにする。つまり、配給線226がユーザ・モード・リーダ190にタイミング情報を提供する。
図9において、デコンプレッサ・プロキシ194、効果フィルタ・プロキシ198、サウンド・レンダラ・プロキシ200は破線で配給線226に接続されている。これは、このようなプロキシ・フィルタがユーザ・モード・プロキシ・クロック224からタイミング情報を取り出す必要がないことを表わすものである。幾つかの実施例では、こうしたフィルタはプロキシ・クロック224からタイミング情報を取り出す必要があるが、他の実施例では、このようなタイミング情報が対応するカーネル・モード・フィルタによって提供される。別の例では、ユーザ・モード・プロキシ・フィルタがユーザ・モード・クロックたとえばプロキシ・クロック224からタイミング情報を取り出し、さらにこのようなタイミング情報を対応するカーネル・モード・フィルタへ転送することも可能である。つまり、図9において、ユーザ・モード・プロキシ・クロック224は、カーネル・モード・クロックのためのプロキシを形成するユーザ・モード・クロックを提供するための手段の一例ではある。同等の機能を提供する他のメカニズムも存在する。
幾つかの実施例において、カーネル・モード・クロックとユーザ・モード・クロックが時間を保持する方法の間には相違がある。たとえば、ActiveMovie クロックはメディア・ストリームが中断している時でも動作し続けている。しかし幾つかのカーネル・モード・クロックの実装において、メディア・ストリームが中断した時に一時停止する。つまり、幾つかの実施例では、カーネル・モード・クロックとユーザ・モード・クロックの間で時間の変換を実行する必要がある。このような状況は、たとえば図9のプロキシ・クロック224などのユーザ・モード・クロックを用いて、メディア・ストリームが中断している時でも実行し続けるために、想定するActiveMovie フィルタ・グラフへ時間を供給する場合に発生する。このような状況では、メディア・ストリームが中断した時にカーネル・モード・クロック220は停止するが、メディアが中断した時にプロキシ・クロック224は動作し続けなければならない場合、プロキシ・クロック224は、カーネル・モード時間を適当なユーザ・モード時間に変換するための手段を含むべきである。メディア・ストリームが中断した時にカーネル・モード・クロック220が停止する場合、ユーザ・モード・プロキシ・クロック224はカーネル・モード・クロック220が停止してもクロックを動作させ続けるメカニズムを含む必要がある。カーネル・モード・クロック220が動作を再開した時、ユーザ・モード・プロキシ・クロック224はカーネル・モード時間をユーザ・モード時間に変換しなければならない。カーネル・モード・クロックとユーザ・モード・クロックとの間、または、カーネル・モード・クロックとユーザ・モード・クロックとたとえばコンピュータ・システムからのハードウェア・クロックなどのマスタ・システム時間との間のいずれかで発生する何らかのクロック・ドリフトを補正するためのメカニズムを配置する必要もある。
メディア・ストリームが停止してから再開した時には、他の問題も発生する。たとえば、フィルタ・デバイスは一般的にすぐに停止または開始しない。つまり、動作を開始するように命令をフィルタ・デバイスへ与えた時、デバイスが実際に起動するまでに短い遅延が発生し得る。更に、デバイスに動作を停止するよう命令した時にも同様の現象が発生し得る。一方でクロックは、事実上瞬間的に起動停止する傾向にある。そのため、クロックの速度を上げるかクロック速度を下げるかのどちらかで、起動停止するフィルタ・デバイスを考慮することによりクロックを「バンプ(bump)」する必要がある。このようなバンプは短時間の間クロックの速度を落すか、短時間の間クロックの速度を上げるかのどちらかで行なうのが望ましい。時間が後向きに移動したり不連続的にジャンプするのは好ましくない。メディア・データのタイムスタンプを用いて、メディア時間にクロックを整列させる補助を行なうことができる。
クロックを「バンプ」させる例はActiveMovie の状況で与えたものであることに注意すべきである。このような結果を要求するものは本発明にはない。本発明を他の状況で使用する場合、クロックをバンプさせて整列させる必要はない。クロック・プロキシはバンプさせずに同期させておくように開発できる。
ここで図10を参照すると、ユーザ・モード・フィルタ・グラフがマスタであり、カーネル・モード・フィルタ・グラフがユーザ・モード・フィルタ・グラフのスレーブであるような例が図示してある。図10において、カーネル・モード・フィルタ・グラフは、リーダ・ドライバ228、デコンプレッサ230、効果フィルタ232、サウンド・レンダラ234を含む。前述のように、効果フィルタ232は効果プロセッサ236を使用し、サウンド・レンダラ234がサウンド・カード238に情報を転送してスピーカ240から再生できるようにする。
ユーザ・モード・フィルタ・グラフは、ユーザ・モード・リーダ242、デコンプレッサ244およびこれに付随するプロキシ246、変換フィルタ248とこれに付随するプロキシ250、照明フィルタ252とこれに付随するプロキシ254、ユーザ・モード・ビデオ・レンダラ256、およびカーネル・モード・ビデオ・レンダラ258を含む。カーネル・モード・ビデオ・レンダラ258はユーザへ表示するためにビデオ・カード260へビデオ情報を渡す。前述のように、ディスク・ドライバ262はユーザ・モード・リーダ242とリーダ・ドライバ228の制御下においてディスク264から情報を取り出す。
図10において、ユーザ・モード・クロック266はマスタ・クロックとして選択され、カーネル・モード・クロック268はスレーブ・クロックとして選択される。タイミング情報をユーザ・モード・クロック266からカーネル・モード・クロック268へ転送しなければならないので、実施例ではユーザ・モード・クロックからカーネル・モード・クロックへ時間情報を転送するための手段を含む。図10において、このような手段はフォワーダ270で図示してある。フォワーダ270はクロック266からタイミング情報を取得して、この情報をクロック268へ転送または渡す。クロック268はタイミング情報をカーネル・モード・フィルタに提供し、一方でクロック266はタイミング情報をユーザ・モード・フィルタへ提供する。フォワーダ270はタイミング情報をカーネル・モード・クロックへ転送するための手段の一例を表わしているが、他のメカニズムを使用することもできる。たとえば、クロック266はタイミング情報268を直接転送するのに適している。これ以外に、フォワーダ270がたとえば図9のクロック・プロキシ224などのユーザ・モード・プロキシの一部になることがある。このような場合、タイミング情報は、図9に示したような他の方法ではなく、ユーザ・モード・プロキシからカーネル・モード・クロックへ流れることになる。
基本的に、本発明で必要とされることの全部は、スレーブ・クロックをマスタ・クロックに同期する能力である。2つのクロックを同期するために現在利用できる技術のどれかを本発明の有益な効果とともに使用できる。しかし、このような現在の方法に対して他の考案が変更を指示することがある。メディア・ストリームが中断した時に停止するクロックと、停止しないクロックとの間のタイミング変換はこのような考案の一例ではある。
図9および図10に図示した例は単一のユーザ・モード・クロックと単一のカーネル・モード・クロックを図示しているだけである。しかし、ある種のフィルタ・グラフでは、ユーザ・モードでおよび/またはカーネル・モードでひとつ以上のクロックがある場合がある。このようなフィルタ・グラフには、図9および図10に図示したのと同じ原理を応用できる。マスタ・クロックが選択され、他のユーザ・モードおよびカーネル・モード・クロックは図9および図10に図示した原理を用いて同期する。実際に、カーネル・モード・クロックを選択することで、ことなるユーザ・モード・フィルタ・グラフの間で同期を取ることができる。カーネル・モード・オブジェクトは多数のユーザ・モード・プロセスで共通に利用できることから、マスタ・カーネル・モード・クロックを多数のユーザ・モード・フィルタ・グラフの同期に使用できる。幾つかの環境において、多数のユーザ・モード・フィルタ・グラフのクロックを簡単に同期させられる能力は重要である。
本発明は、これの趣旨または基本的特性から逸脱することなく、他の特定の形態で実現することができる。説明した実施例は、あらゆる点で単なる図示であり、制限的なものとみなすべきではない。したがって本発明の範囲は、前述の説明によってではなく添付の特許請求の範囲によって示されるものである。特許請求の範囲の均等の意味するところおよび範囲内に収まる全ての変化は本発明の範囲内に包含されるべきものである。
オーディオ・データを処理するための従来技術のユーザ・モード・フィルタ・グラフを示す図である。 オーディオ・データを処理するためのカーネル・モード・フィルタ・グラフを示す図である。 カーネル・モード・フィルタのためのユーザ・モード・プロキシ・フィルタを組み込むフィルタ・グラフの例を示す図である。 対応するユーザ・モード・プロキシ・フィルタを接続することによりカーネル・モード・フィルタを接続するひとつの方法を示す図である。 特定のカーネル・フィルタを代理するための汎用プロキシ・フィルタの設定のひとつの方法を示す図である。 ユーザ・モード・プロキシ・フィルタに拡張をどのように組み込むかの例を示す図である。 ユーザ・インタフェースをユーザ・モード・プロキシ・フィルタにどのように組み込むかの例を示す図である。 包含による汎用ユーザ・モード・プロキシ・フィルタの拡張を示す図である。 カーネル・モード・マスタ・クロックにより2つのフィルタ・グラフを同期するためのひとつの実施例を示す図である。 ユーザ・モード・マスタ・クロックにより2つのフィルタ・グラフを同期する例を示す図である。
符号の説明
20,46,216,264 ディスク
22,48,214,262 ディスク・ドライバ
24,190,242 リーダ
26,44 制御エージェント
28,52,182,192,230,244 デコンプレッサ
30 効果コンポーネント
32,54,196,232 効果フィルタ
34,56,208,236 効果プロセッサ
36,58 サウンド・レンダリング
40,60,210,238 サウンド・カード
42,62,212,240 スピーカ
50,180,228 リーダ・ドライバ
64 リーダ・プロキシ
66,194,246 デコンプレッサ・プロキシ
68,198 効果フィルタ・プロキシ
70 サウンド・レンダリング・プロキシ
74,78,98,120,134,156 カーネル・モード・フィルタ
76,80,118,136 プロキシ・フィルタ
90 汎用プロキシ・フィルタ
92,164 レジストリ
94,166 問合せ
96 カーネル・フィルタ/拡張/他の情報
101 フィルタ設定
104 拡張
108 フィルタ・ピン
110 制御
116 インタフェース
124,128 制御/拡張
142 プロパティ・フレーム
146 ホルダ
148 プロパティ・ページ
158 汎用プロキシ・フィルタ
160 包含フィルタ
168 カーネル・フィルタ/他の情報
170 ピン
174 包含/他の情報
184 変換フィルタ
186 照明フィルタ
188,256,258 ビデオ・レンダラ
198,234 サウンド・レンダラ
200 サウンド・レンダラ・プロキシ
202 変換プロセッサ
204 照明プロセッサ
206,260 ビデオ・カード
220,266,268 クロック
224 プロキシ・クロック
248 変換
250 変換プロキシ
252 照明
254 照明プロキシ
260 ビデオ・カード
270 フォワーダ

Claims (9)

  1. カーネル・モードにおけるデータ・ストリームの処理をユーザ・モードにおけるデータ・ストリームの処理と同期させる方法であって、
    複数のカーネル・モード・フィルタを互いに接続して、前記複数のカーネル・モード・フィルタのひとつでデータをまず処理してから、前記複数のカーネル・モード・フィルタのもうひとつへと処理したデータを渡すことにより、データを処理するのに適したカーネル・モード処理グラフを形成し、前記複数の各カーネル・モード・フィルタによりデータが順次処理されるようにするステップであって、ユーザ・モードで動作し、前記複数のカーネル・モード・フィルタの少なくとも2つに対応するユーザ・モード・プロキシ・フィルタの、対応するユーザ・モード・接続点を相互接続するクライアントプロセスに応答して、前記複数のカーネル・モード・フィルタの前記少なくとも2つが有する接続点を互いに接続するステップと、
    前記カーネル・モード処理グラフにおいて、前記複数のカーネル・モード・フィルタが時間を識別できるようにするカーネル・モード・クロックを作成するステップと、
    複数のユーザ・モードフィルタを互いに接続して、前記複数のユーザ・モードフィルタのひとつでまずデータを処理してから、前記複数のユーザ・モードフィルタのもうひとつへ処理したデータを渡すことにより、データを処理するのに適したユーザ・モード処理グラフを形成して、前記ユーザ・モード処理グラフにおいて前記複数の各ユーザ・モードフィルタによりデータが処理されるようにするステップと、
    前記ユーザ・モード処理グラフで前記複数のユーザ・モード・フィルタが時間を識別できるようにするユーザ・モード・クロックを作成するステップと、
    前記ユーザ・モード・クロックまたは前記カーネル・モード・クロックのどちらか一方をマスタ・クロックとするために選択し、前記ユーザ・モード・クロックまたは前記カーネル・モード・クロックのどちらかをスレーブ・クロックとするために選択し、次に前記スレーブ・クロックを前記マスタ・クロックに同期させることで、前記カーネル・モード処理グラフと前記ユーザ・モード処理グラフが同期するようにするステップとを備えることを特徴とする方法。
  2. 前記ユーザ・モード・クロックがマスタ・クロックとして選択されたときにフォワーダを作成し、前記フォワーダは前記マスタ・クロックからの現在時刻を取得して前記現在時刻を前記スレーブ・クロックへ転送するように動作し、前記カーネル・モード・クロックが前記フォワーダから前記現在時刻を取得できるようにするステップを更に備えることを特徴とする請求項1に記載のカーネル・モードにおけるデータ・ストリームの処理をユーザ・モードにおけるデータ・ストリームの処理と同期させる方法。
  3. 前記カーネル・モード・クロックがマスタ・クロックとして選択された場合に前記カーネル・モード・クロックを前記ユーザ・モード・クロックで代理するステップを更に備え、前記ユーザ・モード・クロックは前記カーネル・モード・クロックから現在時刻を取得することを特徴とする請求項1に記載のカーネル・モードにおけるデータ・ストリームの処理をユーザ・モードにおけるデータ・ストリームの処理と同期させる方法。
  4. 前記カーネル・モード処理グラフを用いて前記データ・ストリームを処理するステップをさらに備えることを特徴とする請求項1に記載の方法。
  5. 前記ユーザ・モード処理グラフを用いて前記データ・ストリームを処理するステップをさらに備えることを特徴とする請求項1に記載の方法。
  6. 前記ユーザ・モード処理グラフに含まれる、前記ユーザ・モード・フィルタのサブセットを用いて前記データ・ストリームを処理するステップと、
    前記ユーザ・モード・フィルタのサブセットの1つを用いて、前記ユーザ・モードと前記カーネル・モードとを分離するセキュリティ境界を横断して前記データ・ストリームを、前記カーネル・モード処理グラフの前記カーネル・モード・フィルタのサブセットに含まれる前記カーネル・モード・フィルタの1つに送信するステップと、
    前記カーネル・モード処理グラフの前記カーネル・モード・フィルタのサブセットを用いて前記データ・ストリームを処理するステップとをさらに備えることを特徴とする請求項1に記載の方法。
  7. ユーザ・モード・プロキシ・フィルタを用いて、カーネル・モードフィルタグラフにおける2つの対応するカーネル・モード・フィルタを互いに接続する方法であり、前記カーネル・モード・フィルタの各々は、ユーザ・モードに渡すことなく前記接続されたカーネル・モード・フィルタの間でデータが直接流れるように、データを処理する方法であって、
    第1のユーザ・モード・プロキシ・フィルタと第1のカーネル・モード・フィルタの間の接続を作成して、前記第1のユーザ・モード・プロキシ・フィルタを操作するクライアントプロセスによって、前記カーネル・モード・フィルタグラフの前記第1のカーネル・モード・フィルタの構成を形成できるようにするステップと、
    第2のユーザ・モード・プロキシ・フィルタと第2のカーネル・モード・フィルタの間の接続を作成して、前記第2のユーザ・モード・プロキシ・フィルタを操作する前記クライアントプロセスによって、前記カーネル・モード・フィルタグラフの前記第2のカーネル・モード・フィルタの構成を形成できるようにするステップと、
    前記クライアントプロセスが、ユーザ・モードの相互接続を作成するために、定義されている手順を用いて、前記第1のユーザ・モード・プロキシ・フィルタと前記第2のユーザ・モード・プロキシ・フィルタとを相互接続するステップであって、前記ユーザ・モードの相互接続は、前記ユーザ・モードの相互接続が前記クライアントプロセスの観点からは実際の相互接続に見えるが、前記カーネル・モード・フィルタグラフによって処理されるデータは前記ユーザ・モードの相互接続を介して流れず、
    前記第1のユーザ・モード・プロキシ・フィルタおよび前記第2のユーザ・モード・プロキシ・フィルタが、前記カーネル・モード・フィルタグラフの少なくとも一部を表す、対応するカーネル・モードの相互接続を設定することによって、前記ユーザ・モードの相互接続に応答するステップであって、前記カーネル・モードの相互接続を、前記第1のカーネル・モード・フィルタと前記第2のカーネル・モード・フィルタとの間で形成して、前記第1のユーザ・モード・プロキシ・フィルタと前記第2のユーザ・モード・プロキシ・フィルタとの間を通らずに、前記第1のカーネル・モード・フィルタと前記第2のカーネル・モード・フィルタの間でデータが直接流れるようにすることを特徴とする方法。
  8. ユーザ・モード・プロキシ・フィルタを用いて、カーネル・モードフィルタグラフにおける2つの対応するカーネル・モード・フィルタを互いに接続する方法であり、前記カーネル・モード・フィルタの各々は、ユーザ・モードに渡すことなく前記接続されたカーネル・モード・フィルタの間でデータが直接流れるように、データを処理する方法であって、
    第1のユーザ・モード・プロキシ・フィルタのインスタンスを作成し、前記第1のユーザ・モード・プロキシ・フィルタと第1のカーネル・モード・フィルタとの間の接続を形成して、前記第1のユーザ・モード・プロキシ・フィルタを操作するクライアントプロセスによって、前記カーネル・モード・フィルタ・グラフにおける前記第1のカーネル・モード・フィルタの構成を形成できるようにするステップであって、前記第1のカーネル・モード・フィルタは、前記第1のカーネル・モード・フィルタを他のカーネル・モード・フィルタに接続可能な、少なくとも1つの第1の接続点を有し、前記第1のユーザ・モード・プロキシ・フィルタは、前記第1のカーネル・モード・フィルタの前記少なくとも1つの第1の接続点に対応する、少なくとも1つの第1のユーザ・モード・接続点を有し、
    第2のユーザ・モード・プロキシ・フィルタのインスタンスを作成し、前記第2のユーザ・モード・プロキシ・フィルタと第2のカーネル・モード・フィルタとの間の接続を形成して、前記第2のユーザ・モード・プロキシ・フィルタを操作する前記クライアントプロセスによって、前記カーネル・モード・フィルタ・グラフにおける前記第2のカーネル・モード・フィルタの構成を形成できるようにするステップであって、前記第2のカーネル・モード・フィルタは、前記第2のカーネル・モード・フィルタを他のカーネル・モード・フィルタに接続可能な、少なくとも1つの第2の接続点を有し、前記第2のユーザ・モード・プロキシ・フィルタは、前記第2のカーネル・モード・フィルタの前記少なくとも1つの第2の接続点に対応する、少なくとも1つの第2のユーザ・モード・接続点を有し、
    前記クライアントプロセスが、ユーザ・モードの相互接続を作成するために、定義されている手順を用いて、前記第1のユーザ・モード・プロキシ・フィルタの前記少なくとも1つの第1のユーザ・モード・接続点と、前記第2のユーザ・モード・プロキシ・フィルタの前記少なくとも1つの第2のユーザ・モード・接続点とを相互接続するステップであって、前記ユーザ・モードの相互接続は、前記ユーザ・モードの相互接続が前記クライアントプロセスの観点からは実際の相互接続に見えるが、前記カーネル・モード・フィルタグラフによって処理されるデータは前記ユーザ・モードの相互接続を介して流れず、
    前記第1のユーザ・モード・プロキシ・フィルタおよび前記第2のユーザ・モード・プロキシ・フィルタが、前記カーネル・モード・フィルタグラフの少なくとも一部を表す、対応するカーネル・モードの相互接続を設定することによって、前記ユーザ・モードの相互接続に応答するステップであって、前記カーネル・モードの相互接続を、前記第1のカーネル・モード・フィルタの前記少なくとも1つの第1の接続点と、前記第2のカーネル・モード・フィルタの前記少なくとも1つの第2の接続点との間で形成して、前記第1のユーザ・モード・プロキシ・フィルタと前記第2のユーザ・モード・プロキシ・フィルタとの間を通らずに、前記第1のカーネル・モード・フィルタの前記少なくとも1つの第1の接続点と、前記第2のカーネル・モード・フィルタの前記少なくとも1つの第2の接続点との間でデータが直接流れるようにすることを特徴とする方法。
  9. コンピュータに請求項1乃至8のいずれかに記載の方法を実現させるためのプログラムを記録したことを特徴とするコンピュータで読取可能な媒体。
JP2006306991A 1997-04-04 2006-11-13 コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ Expired - Fee Related JP4313815B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/825,855 US6212574B1 (en) 1997-04-04 1997-04-04 User mode proxy of kernel mode operations in a computer operating system

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP18062397A Division JP4508298B2 (ja) 1997-04-04 1997-06-20 コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ

Publications (2)

Publication Number Publication Date
JP2007080287A true JP2007080287A (ja) 2007-03-29
JP4313815B2 JP4313815B2 (ja) 2009-08-12

Family

ID=25245069

Family Applications (2)

Application Number Title Priority Date Filing Date
JP18062397A Expired - Fee Related JP4508298B2 (ja) 1997-04-04 1997-06-20 コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ
JP2006306991A Expired - Fee Related JP4313815B2 (ja) 1997-04-04 2006-11-13 コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP18062397A Expired - Fee Related JP4508298B2 (ja) 1997-04-04 1997-06-20 コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ

Country Status (4)

Country Link
US (1) US6212574B1 (ja)
EP (1) EP0871115A3 (ja)
JP (2) JP4508298B2 (ja)
CA (1) CA2208295C (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100916301B1 (ko) * 2007-10-01 2009-09-10 한국전자통신연구원 커널 api 대화식 실행 장치 및 방법

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11330046A (ja) 1998-05-08 1999-11-30 Mitsubishi Electric Corp 半導体装置の製造方法及び半導体装置
KR100270916B1 (ko) * 1998-10-17 2000-11-01 서평원 망 관리 시스템 및 클래스 동적 추가 방법
US6385661B1 (en) * 1998-10-19 2002-05-07 Recursion Software, Inc. System and method for dynamic generation of remote proxies
US6871350B2 (en) * 1998-12-15 2005-03-22 Microsoft Corporation User mode device driver interface for translating source code from the user mode device driver to be executed in the kernel mode or user mode
US6711624B1 (en) * 1999-01-13 2004-03-23 Prodex Technologies Process of dynamically loading driver interface modules for exchanging data between disparate data hosts
US6748440B1 (en) * 1999-05-12 2004-06-08 Microsoft Corporation Flow 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
US6658477B1 (en) * 1999-05-12 2003-12-02 Microsoft Corporation Improving the control of streaming data through multiple processing modules
US6438750B1 (en) * 1999-06-18 2002-08-20 Phoenix Technologies Ltd. Determining loading time of an operating system
US6598169B1 (en) * 1999-07-26 2003-07-22 Microsoft Corporation System and method for accessing information made available by a kernel mode driver
US6513157B1 (en) * 1999-11-30 2003-01-28 Recursion Software, Inc. System and method for dynamically aggregating objects
US6678743B1 (en) 1999-11-30 2004-01-13 Recursion Software, Inc. Method for moving objects in a distributed computing environment
US6947965B2 (en) 1999-11-30 2005-09-20 Recursion Software, Inc. System and method for communications in a distributed computing environment
CA2397740C (en) 2000-01-14 2015-06-30 Catavault Method and system for secure registration, storage, management and linkage of personal authentication credentials data over a network
US6754709B1 (en) * 2000-03-29 2004-06-22 Microsoft Corporation Application programming interface and generalized network address translator for intelligent transparent application gateway processes
US6646195B1 (en) * 2000-04-12 2003-11-11 Microsoft Corporation Kernel-mode audio processing modules
US6961631B1 (en) * 2000-04-12 2005-11-01 Microsoft Corporation Extensible kernel-mode audio processing architecture
US7043697B1 (en) * 2000-05-15 2006-05-09 Intel Corporation Virtual display driver
US7134141B2 (en) * 2000-06-12 2006-11-07 Hewlett-Packard Development Company, L.P. System and method for host and network based intrusion detection and response
US7343419B1 (en) * 2000-10-05 2008-03-11 Aol Llc Rerouting media to selected media applications
EP1329097A1 (en) * 2000-10-17 2003-07-23 Koninklijke Philips Electronics N.V. Method of controlling an arrangement of hardware components
US6774919B2 (en) * 2000-12-06 2004-08-10 Microsoft Corporation Interface and related methods for reducing source accesses in a development system
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
US7114161B2 (en) * 2000-12-06 2006-09-26 Microsoft Corporation System and related methods for reducing memory requirements of a media processing system
US6912717B2 (en) 2000-12-06 2005-06-28 Microsoft Corporation Methods and systems for implementing dynamic properties on objects that support only static properties
US6959438B2 (en) 2000-12-06 2005-10-25 Microsoft Corporation Interface and related methods for dynamically generating a filter graph in a development system
US7114162B2 (en) 2000-12-06 2006-09-26 Microsoft Corporation System and methods for generating and managing filter strings in a filter graph
US6834390B2 (en) * 2000-12-06 2004-12-21 Microsoft Corporation System and related interfaces supporting the processing of media content
US6983466B2 (en) * 2000-12-06 2006-01-03 Microsoft Corporation Multimedia project processing systems and multimedia project processing matrix systems
US7287226B2 (en) 2000-12-06 2007-10-23 Microsoft Corporation Methods and systems for effecting video transitions represented by bitmaps
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
US7447754B2 (en) * 2000-12-06 2008-11-04 Microsoft Corporation Methods and systems for processing multi-media editing projects
US6882891B2 (en) 2000-12-06 2005-04-19 Microsoft Corporation Methods and systems for mixing digital audio signals
US6768499B2 (en) * 2000-12-06 2004-07-27 Microsoft Corporation Methods and systems for processing media content
US7103677B2 (en) * 2000-12-06 2006-09-05 Microsoft Corporation Methods and systems for efficiently processing compressed and uncompressed media content
US6829687B2 (en) * 2000-12-28 2004-12-07 International Business Machines Corporation Volume data net backup
EP1282037A1 (fr) * 2001-08-03 2003-02-05 Drecq Daniel Technologies D 2 T Programme informatique de pilotage d'interface en temps réel
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
US7600222B2 (en) * 2002-01-04 2009-10-06 Microsoft Corporation Systems and methods for managing drivers in a computing system
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
CN100541471C (zh) * 2002-02-15 2009-09-16 科学园株式会社 使用基于网络的输入装置的输入特征的个人鉴别方法、以及网络系统
JPWO2003069491A1 (ja) * 2002-02-15 2005-06-09 サイエンスパーク株式会社 電子計算機の入力装置の入力特徴を用いた個人認証方法、そのプログラム及びプログラムの記録媒体
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
US6974082B2 (en) * 2002-07-15 2005-12-13 Monode Marking Products, Inc. Hardware integration system
BR0313826A (pt) * 2002-08-27 2005-07-05 Halliburton Energy Serv Inc Garrafa de amostra de fluido de formação, ferramenta de avaliação de formação monofásica, pistão de pressurização, método para coleta de amostra de fluido furo abaixo, e, método para extrair uma amostra de fluido monofásica de uma formação de furo de poço e manter a amostra em uma única fase
CN100450122C (zh) * 2002-09-23 2009-01-07 艾利森电话股份有限公司 中间件应用消息/事件模型
US7448049B1 (en) 2002-10-18 2008-11-04 Crossroads Systems, Inc. System and method of supporting kernel functionality
EP1429246A1 (en) * 2002-12-13 2004-06-16 Sun Microsystems, Inc. Apparatus and method for switching mode in a computer system
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
US7158668B2 (en) * 2003-08-01 2007-01-02 Microsoft Corporation Image processing using linear light values and other image processing improvements
US7139002B2 (en) * 2003-08-01 2006-11-21 Microsoft Corporation Bandwidth-efficient processing of video images
US7784058B2 (en) * 2003-09-22 2010-08-24 Trigence Corp. Computing system having user mode critical system elements as shared libraries
US7188195B2 (en) 2003-11-14 2007-03-06 Hewlett-Packard Development Company, L.P. DMA slot allocation
US7669113B1 (en) * 2004-01-30 2010-02-23 Apple Inc. Media stream synchronization using device and host clocks
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
US7149832B2 (en) * 2004-11-10 2006-12-12 Microsoft Corporation System and method for interrupt handling
US7581051B2 (en) * 2005-05-16 2009-08-25 Microsoft Corporation Method for delivering interrupts to user mode drivers
US8533709B2 (en) * 2005-08-04 2013-09-10 Microsoft Cororation Changing frequency of a virtual programmable interrupt timer in virtual machines to control virtual time
US7788664B1 (en) * 2005-11-08 2010-08-31 Hewlett-Packard Development Company, L.P. Method of virtualizing counter in computer system
US7668621B2 (en) * 2006-07-05 2010-02-23 The United States Of America As Represented By The United States Department Of Energy Robotic guarded motion system and method
US7620477B2 (en) * 2006-07-05 2009-11-17 Battelle Energy Alliance, Llc Robotic intelligence kernel
US7801644B2 (en) * 2006-07-05 2010-09-21 Battelle Energy Alliance, Llc Generic robot architecture
US7584020B2 (en) * 2006-07-05 2009-09-01 Battelle Energy Alliance, Llc Occupancy change detection system and method
US8965578B2 (en) 2006-07-05 2015-02-24 Battelle Energy Alliance, Llc Real time explosive hazard information sensing, processing, and communication for autonomous operation
US7587260B2 (en) * 2006-07-05 2009-09-08 Battelle Energy Alliance, Llc Autonomous navigation system and method
US8271132B2 (en) 2008-03-13 2012-09-18 Battelle Energy Alliance, Llc System and method for seamless task-directed autonomy for robots
US8355818B2 (en) * 2009-09-03 2013-01-15 Battelle Energy Alliance, Llc Robots, systems, and methods for hazard evaluation and visualization
US8073564B2 (en) * 2006-07-05 2011-12-06 Battelle Energy Alliance, Llc Multi-robot control interface
US7974738B2 (en) * 2006-07-05 2011-07-05 Battelle Energy Alliance, Llc Robotics virtual rail system and method
US7211980B1 (en) 2006-07-05 2007-05-01 Battelle Energy Alliance, Llc Robotic follow system and method
TW200820125A (en) * 2006-10-24 2008-05-01 Sunplus Technology Co Ltd Image processing method and system for personal computer
US20080235246A1 (en) * 2007-03-20 2008-09-25 Arun Hampapur Filter sequencing based on a publish-subscribe architecture for digital signal processing
US8549537B2 (en) * 2008-01-10 2013-10-01 Industrial Technology Research Institute Middleware bridge system and method
US20090296685A1 (en) * 2008-05-29 2009-12-03 Microsoft Corporation User-Mode Prototypes in Kernel-Mode Protocol Stacks
GB2471463A (en) * 2009-06-29 2011-01-05 Nokia Corp Software component wrappers for multimedia subcomponents that control the performance of the multimedia function of the subcomponents.
US8521995B2 (en) * 2009-12-15 2013-08-27 Intel Corporation Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode
US8316194B2 (en) 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US9477515B2 (en) 2009-12-15 2016-10-25 Intel Corporation Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode
US8806511B2 (en) 2010-11-18 2014-08-12 International Business Machines Corporation Executing a kernel device driver as a user space process
US8533812B1 (en) * 2011-03-03 2013-09-10 Symantec Corporation Systems and methods for securing access to kernel devices
US9317225B2 (en) * 2011-05-25 2016-04-19 Xerox Corporation Method and apparatus for dynamically configuring a filter pipeline for a print driver
US9348927B2 (en) 2012-05-07 2016-05-24 Smart Security Systems Llc Systems and methods for detecting, identifying and categorizing intermediate nodes
US9325676B2 (en) 2012-05-24 2016-04-26 Ip Ghoster, Inc. Systems and methods for protecting communications between nodes
US10778659B2 (en) 2012-05-24 2020-09-15 Smart Security Systems Llc System and method for protecting communications
US9436474B2 (en) 2012-07-27 2016-09-06 Microsoft Technology Licensing, Llc Lock free streaming of executable code data
US10382595B2 (en) 2014-01-29 2019-08-13 Smart Security Systems Llc Systems and methods for protecting communications
US9578062B2 (en) * 2014-04-03 2017-02-21 Palo Alto Research Center Incorporated Portable proxy for security management and privacy protection and method of use
US9817776B2 (en) 2015-01-19 2017-11-14 Microsoft Technology Licensing, Llc Memory descriptor list caching and pipeline processing
FR3034220B1 (fr) * 2015-03-27 2017-03-10 Damien Plisson Amelioration d'emission de flux multimedia
US11194930B2 (en) 2018-04-27 2021-12-07 Datatrendz, Llc Unobtrusive systems and methods for collecting, processing and securing information transmitted over a network
CN109343977B (zh) * 2018-09-21 2021-01-01 新华三技术有限公司成都分公司 跨态通信方法和通道驱动装置
CN111294293B (zh) * 2018-12-07 2021-08-10 网宿科技股份有限公司 一种基于用户态协议栈的网络隔离方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0231594A3 (en) * 1986-01-22 1988-04-27 Mts Systems Corporation Interactive multilevel hierarchical data flow programming system
US5642171A (en) * 1994-06-08 1997-06-24 Dell Usa, L.P. Method and apparatus for synchronizing audio and video data streams in a multimedia system
US5793961A (en) * 1994-11-18 1998-08-11 Intel Corporation Computer system with data conference capability
US5727212A (en) * 1995-04-12 1998-03-10 International Business Machines Corporation Object oriented device driver system for procedural device drivers

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100916301B1 (ko) * 2007-10-01 2009-09-10 한국전자통신연구원 커널 api 대화식 실행 장치 및 방법

Also Published As

Publication number Publication date
JP4313815B2 (ja) 2009-08-12
CA2208295A1 (en) 1998-10-04
CA2208295C (en) 2009-12-22
JPH10283198A (ja) 1998-10-23
EP0871115A3 (en) 1998-12-16
US6212574B1 (en) 2001-04-03
JP4508298B2 (ja) 2010-07-21
EP0871115A2 (en) 1998-10-14

Similar Documents

Publication Publication Date Title
JP4313815B2 (ja) コンピュータ・オペレーティング・システムにおけるカーネル・モード動作のユーザ・モード・プロキシ
US6658477B1 (en) Improving the control of streaming data through multiple processing modules
US7200676B2 (en) Transmitting and receiving messages through a customizable communication channel and programming model
US7392298B2 (en) Apparatus and method for flexible web service deployment
US7330878B2 (en) Method and system for remote control of a local system
JP4495410B2 (ja) コンピューティングシステムおよびその方法
US6938087B1 (en) Distributed universal communication module for facilitating delivery of network services to one or more devices communicating over multiple transport facilities
US20050240944A1 (en) Method and apparatus for adapting and hosting legacy user interface controls
US20060064701A1 (en) Multi-instance input device control
US6633929B1 (en) Method and system for abstracting network device drivers
US6934746B2 (en) Image and sound input-output control
JP5046161B2 (ja) ネットワーク・エッジ・コンピューティング向けのアプリケーション分割
US20140201418A1 (en) Net-centric adapter for interfacing enterprises systems to legacy systems
CN101411164B (zh) 用于呈现远程可视合成的方法
Lohse et al. Network-integrated multimedia middleware (NMM)
JP2003076563A (ja) 分散オブジェクトミドルウェア連携方法及びプログラムを記録した記録媒体並びにプログラム
CN113176957B (zh) 一种基于rpc的远程应用自动化系统
JP3836615B2 (ja) 協調動作ユニット及び協調動作ユニット用プログラムを記録した記録媒体
Coulson et al. Experiences in implementing a distributed object platform for multimedia applications
Hartikainen et al. Node-based architecture for lightweight middleware
Sward Using ada in a service-Ooriented architecture
JPH11306152A (ja) ディレクタ生成装置およびディレクタ生成プログラム記憶媒体
JP2002544739A (ja) ストリーミングデータフレームの分割及び混合

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081226

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090325

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090417

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: 20090515

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

Free format text: PAYMENT UNTIL: 20120522

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20130522

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130522

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

LAPS Cancellation because of no payment of annual fees