JP2007128538A - セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ・プログラム・プロダクト - Google Patents

セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ・プログラム・プロダクト Download PDF

Info

Publication number
JP2007128538A
JP2007128538A JP2006340461A JP2006340461A JP2007128538A JP 2007128538 A JP2007128538 A JP 2007128538A JP 2006340461 A JP2006340461 A JP 2006340461A JP 2006340461 A JP2006340461 A JP 2006340461A JP 2007128538 A JP2007128538 A JP 2007128538A
Authority
JP
Japan
Prior art keywords
buffer
data
connection
driver
component
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
JP2006340461A
Other languages
English (en)
Other versions
JP4889471B2 (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 JP2007128538A publication Critical patent/JP2007128538A/ja
Application granted granted Critical
Publication of JP4889471B2 publication Critical patent/JP4889471B2/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

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)
  • Information Transfer Systems (AREA)
  • Computer And Data Communications (AREA)
  • Memory System (AREA)

Abstract

【課題】カーネル・モード・ドライバのように、1つにチェインニングされている個別の処理コンポーネント間でバッファ間データ転送を行うとき起こる非効率性を解消する方法およびコンピュータ・プログラム・プロダクトを提供する。
【解決手段】システムでデータを処理するとき必要になるデータ・バッファを割当て、管理するための標準メカニズムが提供されている。この標準メカニズムによれば、複数のドライバは標準化された接続メソッドを接続ピン・インスタンスで使用してひとつにチェインニングされている。異なるバッファ要求と機能をもつドライバは照会して、チェイン・ドライバ間のデータ転送を容易化するように整合されるので、必要とするバッファ数が最小になり、従って、バッファ間データ転送が低コスト化され、しかも最も効率化される。
【選択図】図2

Description

本発明の分野はコンピュータ・ソフトウェア・ドライバ開発に属するものである。本発明は、ドライバのコード生成を単純化し、標準化されたアクセス・ポイントを提供するツール、ソフトウェア・フレームワーク、規則などに関する。さらに具体的には、本発明は相互接続されたソフトウェア・ドライバなどの、複数のエンティティ(entity)によって使用されるバッファを管理し、相対的に無保護(unprotected) のオペレーティング・システム・モードで実行されるソフトウェア・ドライバによる処理期間にエンティティ間で行われるバッファ間データ転送量を最小限にする方法およびコンピュータ・プログラム・プロダクトを目的としている。
複数のコンポーネントがデータ・ストリームまたはデータ量を処理するとき、フレームなどのある量のデータをバッファに入れておき、データを処理し、処理したデータのコピーを別の処理コンポーネントに対応する別のバッファに入れておくのが代表的である。独立の処理コンポーネントが複数存在するときは、これらのバッファ間のデータ転送の絶対量(sheer volume)は、データ自体の実際の処理をタイムリに行うことができない程にプロセッサのパフォーマンスに影響することがある。
この問題は異なるコンポーネント間のどのタイプのデータ処理でも起こり得るが、マルチメディア・アプリケーションで見られるようなメディア・データの場合には、特に深刻である。その原因の一部は、生成される情報量が大量であり、多くの場合、処理すべき連続データを文字通り「ストリーム」の形で効果的に作成するために時間フレームと結びついているためである。このようなメディア情報の発生源としては、ネットワーク経由のライブ・フィード(live feed) 、電話回線、ディジタル化ハードウェアなどやファイルなどの他のソースがあり、これは、視聴者に対してコヒーレントになるように「リアルタイム」で処理しなければならないのが通常である。
マルチメディア環境では、メディア・データのストリームを処理するとき、異なるバッファ間のデータ転送に起因してプロセッサ・パフォーマンスが影響を受けると、レイテンシ(latency) の問題が起こり、ハードウェア/ソフトウェア・システムの総メディア処理量とレンダリング(rendering) ・パフォーマンスが低下することになる。レイテンシ問題は、マルチメディア能力から見たときの、特定システムが処理できるものを制限するほどに悪化する場合がある。Microsoft 社(登録商標)提供のWindows NT(商標)が実行されているプロセッサなどの、汎用コンピュータ・システムでは、プロセッサに対する要求量がすでに存在するために事態はさらに悪化することになる。レイテンシ問題を低減すると、他の方法では得られないような低コストのマルチメディア・アプリケーションが得られる機会が増加することになる。レイテンシがシステムの処理効率の向上と他の手段によって十分に低減されれば、以前には不可能であったマルチメディア・アプリケーションを汎用コンピュータ・システムで実行させることが可能になる。
複数の処理コンポーネントに対応する複数のバッファに関連して起こる、もう1つの問題は、使用中であるために、他のアプリケーションが使用できないシステム・リソースの量である。言い換えれば、各処理コンポーネントがシステム・メモリなどのシステム・リソースから得られる独自のバッファをもつようにすると、システム・リソースの不足が起こるため、システム・パフォーマンスを低下させる非効率の原因となる。
プロセスおよびコンポーネント間の共用メモリはリソース割当て問題を解決して、共用バッファを可能にすることを試みている。共用メモリ機能はオペレーティング・システムの「ユーザ・モード」で実行されるのが普通であるため、許可を受けたアプリケーションだけがシステム・メモリ内に置かれ、ユーザが書いたアプリケーションが実行されている指定のアドレス空間を使用していたかどうかを確かめるための、安全上のオーバヘッドが大幅に発生することになる。この安全メカニズムは、あるアプリケーションまたはプロセスが別のアプリケーションに影響するのを防止するためのものである。
マルチメディア環境では、実行優先度が非常に高く、セキュリティ保護度が低いオペレーティング・システムのモードで実行されるソフトウェア・ドライバで処理を行い、多くの場合、ドライバが直接に操作する実際のハードウェアへアクセスできるようにソフトウェア・ドライバを相互接続すると好都合である。多くのアプリケーションは、Windows NT用語では「カーネル・モード(kernel mode) 」と一般に呼ばれ、本明細書でも用いている、このゆるやかで、パフォーマンス指向のモードで実行させると利点が得られる。他の堅牢(robust)なオペレーティング・システムは機能的に同等のモードをもっている。
本明細書で使用されているカーネル・モード・ドライバを容易に使用することができない現行プログラムの1つの主要例として、ユーザがフィルタ(filter)と呼ばれる異なる処理ブロックを選択し、1つに接続して、マルチメディア・データのストリームを連続的に操作できるようにするグラフ作成機能(graph building functionality)がある。データはサウンドやビデオを表す一連のサンプルであるのが代表的であり、処理ブロックとしては、圧縮データの伸張(decompression) 処理、特殊効果処理、CODEC 機能、データをアナログ信号にレンダリング(rendering) すること、などがある。
このようなフィルタはユーザ・モードで置かれているのが代表的であるので、プログラムのグラフ作成部分はそのオペレーションを相互接続し、制御し、ユーザ入力と処理ブロックの再配置(rearrangemene) に応答できるようになっている。マルチメディア・データのストリームはその性質上一貫性があり、データは大量に生成されるので、パフォーマンスは重大な問題となっている。汎用オペレーティング・システムでは、ユーザ・モードとカーネル・モードと間の受渡し/切替えを繰り返し行うと起こるシステム・パフォーマンスは前述したようにある種のマルチメディア・アプリケーションを受け付けない程に低下することがある。
さらに、処理ブロックはハードウェアと関連づけられているので、ユーザ・モードとカーネル・モードのコンポーネントの間でなん度も遷移する必要が起こることが多くなっている。このような遷移(transition)はマルチメディア処理システムの総パフォーマンスを低下させる別の形態のオーバヘッドを含む。ユーザ・モードとカーネル・モードとの間で遷移を行うと、データを異なるバッファ間でコピーするときにもオーバヘッドが発生し、これは処理をカーネル・モードのままにしておけば避けられるものである。
以上のように、共用バッファを作成し、その存在を独立のソフトウェア・ドライバ間で通信するようにして、相互接続ソフトウェア・ドライバ環境でデータを2つまたはそれ以上のコンポーネントにより同じバッファで処理できるようにするメカニズムが必要とされている。このようなメカニズムはソフトウェア・ドライバが必要とするバッファ要求も通信するようにすると、グラフ・ビルダ(builder) などのサード・パーティ・エージェントが異なるソフトウェア・ドライバを動的に相互接続して、ある種のメディア・ストリーム処理シーケンスを達成できるという利点がある。
本発明の目的は、処理すべきデータを保持しているバッファを一連の別個の処理コンポーネントから切り離して、各処理コンポーネントがデータをその処理コンポーネントに関連するバッファへ転送しなくてもデータを順次に処理できるようにすることである。
本発明の目的は複数の分離した、別個の処理コンポーネントによりデータを処理するときに起こる、バッファ間のデータ転送の数を減少することである。
本発明の別の目的はマルチメディア・システムでのレイテンシ効果を低減することである。
さらに、本発明の別の目的は、汎用コンピューティング・システムが従来可能であった以上の効率でデータ集中型(data intensive)マルチメディア・アプリケーションを処理できるようにすることである。
さらに、本発明の別の目的は、複数の処理コンポーネントをもつアプリケーションを処理するときのシステム・リソースの必要量を、標準化された方法で特定のコンポーネントのバッファ必要量とバッファ割当て機能とを通信することによって低減することである。
本発明の目的は、相互接続を行う前にすべてのコンポーネントの必要量をまず照会し、受信することによって決定した通りに、サード・パーティ・コンポーネントが利用可能なバッファ割当てメカニズムを、個別コンポーネントを相互接続する一部として作成することである。
本発明のその他の目的および利点は以下の説明に記載されているが、その一部はその説明から理解されるものと、本発明を実施することにより知得し得るものとがある。本発明の目的と利点は、請求の範囲に個々に記載されているインストリューメント(instrument)の手段および組合せにより実現し、得られるものである。
上記目的を達成するために、また、本明細書に具現化され、広い意味で説明されている本発明によれば、個別処理コンポーネント間のバッファ間データ転送を低減する方法およびコンピュータ・プログラム・プログラムが提供されている。カーネル・モード・ドライバなどの処理コンポーネントは、バイト位置合わせやフレーム処理サイズなどのように、その処理コンポーネントがサポートできるある種のバッファリング要求(requirements)のほかに、その要求に従ってバッファを提供するためのバッファ作成と管理機能をもっている。バッファが作成されると、ある種の参照(例えば、バッファ・アロケータまたはバッファ自体への参照)が処理チェインの前方に置かれた別の処理コンポーネントへ渡されるようになっている。新しいバッファが必要でなければ、処理コンポーネントはロケーションまたはどのエンティティによって作成されたかに関係なく、既存バッファ内のデータを処理するだけである(たとえば同所(in place)処理または現場(in situ) 処理)。
従って、処理コンポーネントは、チェイン上の次の処理コンポーネントにデータが必要なときだけデータを新しいバッファへ転送するようになっている。相互接続処理コンポーネントでは、チェインを種々に組み合わせることが可能であるので、特定の処理コンポーネントの構成に依存してバッファ・アロケータを必要とする場合と必要としない場合がある。従って、処理コンポーネントは、処理コンポーネント間の相互接続を行い、処理コンポーネント間でバッファリングが正しく行われているかを確かめることを担当するサード・パーティ処理コンポーネントにバッファリング要求と機能を通信できる能力をサポートしている必要がある。
本発明の一実施の形態は、カーネル・モード・ドライバを標準化された方法で接続する一部となっている。ある特定のドライバまたはフィルタは、他のドライバ側の接続ピン・インスタンス(connection pin instance) と相互接続できる接続ピン・インスタンスをインスタンシェイトするために使用されるピン・ファクトリ(pin factory) をサポートし、定義しているので、ユーザ・モード・エージェントに頼らなくても、処理メッセージをドライバによってカーネル・モードで連続的に処理することが可能になっている。
コンプライアント・ドライバ(compliant driver)を接続することを希望するサード・パーティ・エージェントは接続ピン・ファクトリへの参照を通してその機能についてドライバに照会する。そのような機能としては、どのような種類の接続ピン・インスタンスがインスタンシェイトできるか、といったことがあり、この中には、処理されるデータのタイプ、データ・フォーマット、転送レート、転送媒体またはモード、接続ピン・インスタンスが入力か出力か、といった関係特性が含まれる。他にも照会されるものとして、各接続ピン・ファクトリで利用できるバッファを割当てるためのデータ・バッファリング要求と機能がある。
ユーザ・モードで実行されるのが代表的であるサード・パーティ・エージェントが1つまたは2つ以上のコンプライアント・ドライバの機能について照会したあと、そのエージェントは、複数のドライバを1つに「チェイニング」してデータがドライバ間で最適に処理されるようにする最良の接続特性を決定する。この決定ステップは、すべてのドライバ機能の照会を終えて、最適な接続基準が選択できるようになったあとで行われる。
各接続ピン・インスタンスごとに、サード・パーティ・エージェントは特定のピン・インスタンスでバッファ・アロケータを形成する必要があるかどうかも判断する。この場合も、これは、相互接続を行う前にすべての異なるフィルタとピン・ファクトリに照会した後で行われる。
次に、サード・パーティ・エージェントは、フィルタに置かれているピン・ファクトリを利用して必要な接続ピン・インスタンスを作成することによってドライバを相互接続する。エージェントはデータ・フォーマットと接続フォーマットを接続ピン・インスタンス作成の一部として指定する。さらに、特定のピン・インスタンスでバッファ・アロケータが必要であれば、サード・パーティ・エージェントは接続ピン・インスタンスのハンドル(handle)を親として使用してアロケータを作成する。NTオペレーティング・システムの下で実装されている実施の形態では、実際の接続ピン・インスタンスは「ファイル」へのハンドルを返す作成入出力オペレーションによって作成される。作成入出力要求は、接続ピン・インスタンスのデータ・フォーマットと接続フォーマットを示すデータ構造へのドライバ・インスタンス・ハンドルと参照を含んでいる。
さらに、以前に作成された接続ピン・インスタンス(例えば、入力ピン・インスタンスまたはIRP「シンク(sink)」ピン)への参照は他の接続ピン(例えば、出力ピン・インスタンスまたはIRP「ソース(source)」ピン)を作成する要求の中で指定され、接続ピン・インスタンス間の接続が行われるようにする。バッファ・アロケータをもつ入力ピン・インスタンスへの参照を使用してソース・ピン・インスタンスが作成されると、バッファ・アロケータのソース・ピン・インスタンスと共に通知が行われるので、データを既存バッファから新しいバッファへ転送することが可能になる。参照が示されていなければ、ソース・ピンは処理を終えた後データを既存バッファに残しておく。
コンプライアント・ドライバを作成するためには、ドライバ開発者は、ユーザ・モードのエージェントが機能について照会し、ドライバ間の相互接続を行えるようにする、ある種の標準機能をサポートしている。Windows NTオペレーティング・システム上で構築されている、ある実施の形態では、これは、必要とする機能を実装している「集合(set) 」(つまり、プロパティ、メソッド、およびイベントの集合)の使用によって達成されている。
集合は、集合全体を特定するGUID(globally unique identifier)(グローバルにユニークな識別子)と、集合内の各機能エレメントのRUID(relatively unique identifier)(相対的にユニークな識別子、例えば、集合自体内で相対的な識別子)をもつものとして論理的に定義されている。各集合は1つまたは2つのIOCTLs(IO Controls)(入出力コントロール)だけと関連づけられ、IOCTLは、集合の仕様と組み合わされて、ドライバとのすべてのインタラクションを制御する。
本実施の形態では、3タイプの集合が使用されている。つまり、プロパティ集合、メソッド集合、およびイベント集合である。プロパティ集合はサウンド・ボリューム、転送レートなどの、値または設定値をドライバ内で管理するために使用され、コールがプロパティ値を得ようとしているのか、および/またはプロパティ値を設定しようしているのかを示すフラグと一緒に単一のIOCTLを使用する。メソッド集合は、メモリの割当て、バッファのフラッシング(flushing)などのように、ドライバが実行できるオペレーションを管理するために使用され、単一のIOCTLを使用して特定のメソッドをコールする。イベント集合は、デバイス変更通知、データ・スターベーション(data starvation) 通知などのように、ドライバの処理に関連するイベントを管理するために使用され、2つのIOCTLを使用する。1つは特定のイベントをイネーブル(enable)にするためのもので、もう1つは特定のイベントをディスエイブル(disable) にするためのものである。
集合を使用するには、入出力制御オペレーションは特定のIOCTLと、集合のGUID、RUIDをもつデータ構造への参照およびその他の必要なデータを使用して開始される。例えば、サウンド・カード・ドライバでボリューム・プロパティを設定する場合は、集合プロパティのIOCTLを使用し、ボリューム設定値をもつプロパティ集合の適切なGUIDを指定し、その集合内の特定RUIDがボリューム・プロパティを示していることを指示し、新しいボリューム設定値を含んでいる入出力制御オペレーションが行われることになる。
サポートされる集合について照会するには、ヌルGUIDが特定集合タイプの特定IOCTL(例えば、プロパティ集合IOCTL、メソッド集合IOCTL、またはイベント・イネーブルIOCTL)で照会フラグと一緒に使用され、サポートされる集合GUIDのリストが返される。ある集合内のサポートされたプロパティ、メソッド、またはイベントについて照会するには、集合GUID、集合タイプIOCTL、および照会フラグが、サポートされたRUIDのリストを返すオペレーションと一緒に使用される。
汎用集合メカニズムを使用すると、コンプライアント・ドライバをサポートするために最小限の機能を実装することができるが、それでも拡張性は無制限である。集合は、特定の集合が実装されている限り、相互動作可能で、相互接続可能なドライバのシステムを作成するために、多数の異なるドライバ開発者によって独立してコーディングすることができる仕様書に定義することができる。さらに、この仕様書には、サポートする必要のある必須のプロパティ、メソッドおよびイベントを定義できるだけでなく、ドライバの機能と拡張機能に依存して実装できるオプションのプロパティ、メソッド、およびイベントも定義することができる。要求される基本的最小限の共通性のほかに、ドライバ開発者は独自の集合を定義し、その集合にGUIDを割当てることによって追加の機能を組み込むことも可能である。サポートされる機能(つまり、サポートされるGUIDとRUIDの照会を行うこと)を列挙できるようにすると、サード・パーティ制御エージェントなどの、呼出し側(caller)は期待を調整することも、基礎となるフィルタの機能に依存して適切な補償を行うこともできる。
バッファ・アロケータ・インスタンスを作成するためには、作成入出力オペレーションが再び使用され、特定の接続ピン・インスタンスを親としてそのハンドルによって指定すると、バッファ・アロケータを表す別のハンドルが返される。このバッファ・アロケータ・ハンドルはソース接続ピン・インスタンスに置かれているプロパティに入れられるので、フィルタは、指示されたバッファ・アロケータによって管理される新しいバッファへデータを、適切なストリーム入出力オペレーションを使用して転送することを知ることになる。
本発明の上記およびその他の目的と特徴は以下の説明および請求の範囲に詳しく記載されている通りであるが、以下に説明する本発明を実施することによって知得することも可能である。
本発明の上記およびその他の利点と目的がどのようにして得られるかという方法を示すために、以下では、添付図面に図示されている具体的実施の形態を参照して、以上で簡単に説明してきた本発明を詳しく説明することにする。添付図面は本発明の代表的な実施の形態を示したにすぎず、従って、本発明の範囲を限定するものではないとの了解の下で、以下、添付図面を使用しながら本発明をもっと具体的にかつ詳しく記述し説明することにする。
本明細書で用いられている「ユーザ・モード(user mode) 」という用語は、ユーザが書いたプログラムの大部分が実行されるときの、オペレーティング・システムにおける動作レベルのことである。ユーザ・モードの動作レベルはセキュリティ・レベルが最も高く、あるアプリケーション・プログラムまたはプロセスが別のアプリケーション・プログラムまたはプロセスに干渉するのを防止するために大量のオーバヘッドが消費されるのが代表的である。さらに、システム・リソースへのアクセスは特定のインタフェースを通して厳格に制御され、実行優先度は最低ではないとしても、最低優先度の1つであるのが一般である。
本明細書で用いられている「カーネル・モード(kernel mode) 」という用語はユーザ・モードの動作モードよりも制約が非常に少ない、オペレーティング・システムにおける動作レベルのことである。カーネル・モードのプログラムまたはプロセスの例としては、ハードウェア・コンポーネントを制御するソフトウェア・ドライバ(software driver) を含む。代表例として、カーネル・モードのプログラムはパフォーマンスに影響されやすく、従って、動作上のオーバヘッドはユーザ・モードのプログラムよりも少なくなっている。さらに、ハードウェアや多くのシステム・リソースへのアクセスは無制約であるか、あるいはユーザ・モードのプログラムの場合よりも制約がはるかに少なくなっている。多くの場合、カーネル・モードで実行されるプログラム・コードは、規則(convention)に対するプログラマの規律正しさと準拠とを信頼して、システムが良好に動作するようにする(例えば、別のプログラムのアドレス空間を破壊しないようにする)。カーネル・モードを表わす別の用語として、「トラステッド(trusted) 」コードがある。
本明細書で用いられている「ドライバ(driver)」という用語はカーネル・モードで実行されるのが代表的である、ソフトウェア・ドライバ・プログラムのことである。ドライバという用語は、オペレーティング・システム上にロードされる実際の実行可能プログラムまたはある種の機能を分け与えるプログラム部分を意味する場合もある。ドライバは、多くの場合、ある形態のハードウェアと関連づけられているが、必ずしもそうである必要はない。
本明細書で用いられている「フィルタ(filter)」という用語はソフトウェア・ドライバ内に置かれている機能部分のことであり、この中には、ドライバ自体も含まれ、そこでは、接続ポイントがフィルタを通してデータを送信するために公開されている。例えば、ソフトウェア・ドライバはいくつかの異なるフィルタをサポートする場合もあれば、1つの単一機能をもっている場合もある。さらに、内部的には1つに接続され、外部的には入出力用に接続ポイントを公開している異なるドライバからの複数のフィルタは単一フィルタとして集合的に参照される場合もある。また、もっと総称的な意味では、フィルタという用語は、伸張(decompression) などのように、それがカーネル・モードで実行されるソフトウェア・ドライバ・フィルタで起こるか、ユーザ・モードで実行される別のプログラム・コードで起こるかに関係なく、実行されるオペレーションを意味する場合もある。
本明細書で用いられている「ドライバ・オブジェクト(driver object) 」という用語は、ソフトウェア・ドライバを管理し、これをシステム・リソースとして知らせるオペレーティング・システムによって定義されているオペレーティング・システムのエンティティのことである。
本明細書で用いられている「デバイス・オブジェクト(device object) 」という用語はシステムによって定義されたシステム・レベルのエンティティのことであり、これは利用が可能であるドライバの機能の一部をシステム・リソースとして知らせ、ドライバの機能と他のシステム・コンポーネントが利用できるかどうかを定義している。ドライバ・オブジェクトとデバイス・オブジェクトはどちらも、代表的にドライバ・ソフトウェアのロード時と初期化時に作成される。
本明細書で用いられている「ファイル・オブジェクト(file object) 」という用語は、デバイス・オブジェクトによって指定されたリソースの呼出しを管理するオペレーティング・システムのエンティティのことであり、これはオペレーティング・システムによって定義されている。ファイル・オブジェクトはドライバ・オブジェクトの使用状況に関するコンテキストを提供する。さらに、ファイル・オブジェクトは、以前のファイル・オブジェクトが新しいファイル・オブジェクトの作成時に「親」と指定されていれば、別のファイル・オブジェクトと階層的に関係づけることが可能である。ファイル・オブジェクトは、代表的にデータ・ストリーム上に操作するすべての入出力オペレーションの管理に使用される。
本明細書で用いられている「データ(data)」という用語は、相互接続されたカーネル・モードのフィルタを通して処理される一切の情報のことである。そのようなデータは、ビデオ、オーディオ、テキスト、MIDIなどを表すメディア・データを含むが、他のアプリケーションの場合には制御情報やパラメータも含んでいる場合がある。例えば、カーネル・モード・フィルタ・グラフはプロセス制御オペレーションで使用されることがあるが、そこでは、異なるフィルタ間で受け渡しされる制御情報はマシン類をアクチュエートする制御信号を創り出すために使用されている。メディア処理システムの例が示されているが、他のアプリケーションも、本明細書に説明されている相互接続カーネル・モード・フィルタのシステムから、同じような方法で利点を得ることが可能である。
本明細書では、本発明の説明は、Microsoft(登録商標)社から提供されているWindows NT(商標)オペレーティング・システムのコンテキスト内で記載されている。さらに、本明細書に説明されている好適実施の形態を理解するためには、Windows NTの入出力アーキテクチャの知識が前提になっている。入出力システムおよび NT オペレーティング・システム全般について解説した好適書としては、Helen Custer著「Windows NTの内部(Inside Windows NT) 」(Microsoft Press発行)があるが、本書は引用により本明細書の一部を構成するものである。
ドライバおよびファイル・オブジェクト、デバイス・オブジェクト、ドライバ・オブジェクトなどのシステム・エンティティの以下の説明では、Windows NTオペレーティング・システム上でこれらがどのような働き方をするかが解説されているが、この分野の精通者ならば理解されるように、本発明は、類似のコンポーネントを持つ他のオペレーティング・システム上で実装することが可能であり、これらのオペレーティング・システムが同じ用語を使用しているかどうかとは無関係である。例えば、別のオペレーティング・システムがファイル・オブジェクトとして動作するエンティティを持っていれば、そのエンティティはその実際の名称に関係なく、ファイル・オブジェクトと解釈することができる。
まず、図1を参照して説明すると、図示のシステム例は、サウンド・データのストリームをディスク・ドライブから読み取り、そのサウンド・データをレンダリング(rendering) して、従来のモデルに従ってスピーカから聞こえるようにするものである。あるデータ量はハード・ドライブ20にストアされるが、これはディジタル化されたサウンド・サンプルの形態でサウンドを表している。ほかにも、サウンド・データ・ストリームのソースとしては、電話回線を利用して送られてくるディジタル化情報、ネットワークや他の通信パケットからのディジタル化情報、この分野で公知の他のソースが考えられる。データ・ストリームはディジタル化サンプルから構成され、これらのサンプルはデータ・フォーマットと規則によって、または各サンプルに付加される明示的タイムスタンプ情報によってタイム・インターバル情報が関連づけられている。カーネル・モードのディスク・ドライバ22はディスク・ドライブ・ハードウェア20と相互作用し、ユーザ・モードのリーダ(reader)プログラム・コンポーネント24の制御下に置かれている。制御エージェント(controlling agent) 26はサウンド・データのレンダリングを行うために異なるコンポーネントを管理するが、動的グラフ作成機能(dynamic graph building capability) を備えている場合は、異なるソフトウェア・コンポーネントが動的に割当てられて、エンド・ユーザの指定に従ってカスタム・フィルタリングまたは他の処理経路を提供できるようにする。
リーダ・コンポーネント24はオペレーティング・システムの標準入出力制御インタフェースを使用してディスク・ドライバ22と相互作用し、圧縮サウンド・データをディスク・ドライブ20から読み取って、ユーザ・モード・プロセスのアドレス空間(address space) の一部としてユーザ・モードで割当てたバッファに入れる働きをする。次に、デコンプレッサ(decompressor)・コンポーネント28は圧縮データを処理に適した伸張(decompressed)フォーマットに伸張する。図示のように、このステップ全体は、付随の低優先度の、プロセス動作(process behavior)安全メカニズムを使用してユーザ・モードで実行される。
効果フィルタ(effects filter)30はデータに操作を加えて、ある種の特殊効果が得られるようにし、カーネル・モードで動作する附属の効果フィルタ32をもっている。さらに、効果プロセッサ34が存在する場合もあれば、効果フィルタ全体が実際のハードウェア・プロセッサをエミュレートするソフトウェアで動作する場合もある。効果フィルタ32をアクセスするためには、効果コンポーネント30はシステム入出力制御メカニズムを使用して、データと制御を効果フィルタに転送する。この場合も、カーネル・モード/ユーザ・モード境界を交差して、この遷移が行われる。
効果フィルタ32は効果プロセッサ34を制御し、必要または望ましいとされる特殊効果がそのデータ上に作られるようにする。これは、効果コンポーネント30から全データをコピーし、そのコピーを効果フィルタ32に、実際のシステム構成によっては、再度効果プロセッサ34にも移すことにより行われる。多くのソフトウェア効果コンポーネントはハードウェア・プロセッサが関連づけられているが、他のコンポーネントは、ホスト・プロセッサ上で実行されるシステム・ソフトウェア内で完全に機能している。
効果コンポーネント30の処理の完了時にコントロールとデータがユーザ・モードに戻されると、これは、次に、サウンド・レンダリング・コンポーネント36に転送される。サウンド・レンダリング・コンポーネント36はコントロールとデータをサウンド・レンダリング・ドライバ38に転送し、これを受けてサウンド・レンダリング・ドライバは、処理され、フィルタリングされたデータをスピーカ42からのサウンドとしてレンダリングするようにサウンド・カード40を制御する。以上から容易に理解されるように、ユーザ・モードとカーネル・モード間の転送は多種類存在するために、サウンド・データのレンダリングを非効率化している。連続するサウンドまたはビデオ・ストリームのように、マルチメディア・データはタイミングに影響されやすい性質のため、これらの非効率性とコントロールの遷移を少なくすると共に、異なるバッファ間でなん度もデータをコピーすることを少なくすると、好都合である。
本明細書で用いられている本発明の一実施の形態は、Windows NTオペレーティング・システム・アーキテクチャ上で提供されるサービスから構成されている。このサービスはシステムのユーザがアクセスする、いくつかの異なるソフトウェア・コンポーネントに分割されている。第1は、ユーザ・モードのAPIであり、これは、接続ピン・インスタンスと、クロック・メカニズムやバッファ割当てメカニズムなどの特定の機能を表している他のファイル・オブジェクトとを作成するためのルーチンを含んでいる。ほかにも、もっと重要なものとして、ドライバ開発者が標準化アーキテクチャに従うドライバを作成するのを支援するルーチンとデータ構造が完備されている。システムに用意されているこれらの機能を利用すると、異なるドライバ開発者は特定のアーキテクチャに準拠して相互に相互作用するコンプライアント・ドライバを作成することができる。ユーザ・モード・エージェントはNTエグゼクティブおよび入出力マネージャのシステム・サービスと通信する、ユーザ・モードで実行中の環境サブシステムを通してコンプライアント・ドライバと通信する。これは、他のすべての入出力に対する同じ標準入出力メカニズムであり、好適実施の形態の本実装では、既存のシステム・サービスを可能な限り利用するようになっている。
本発明を利用する図1のシステムのアーキテクチャは図2に示すようになっている。制御エージェント44は知らされているドライバに照会し、データ・フォーマットと接続フォーマットに従って相互接続を行い、レンダリングを完全にカーネル・モードで行うようにする。さらに、制御エージェントは重要なイベントの通知を受けるので、必要に応じて制御を行うことができる。このようなイベントの例としては、処理の終了、データ・スターベーション事態などを含む。
この構成では、サウンド・データは前述したように、ディスク・ドライバ48によってディスク・ドライブ46から読み取られる。リーダ・ドライバ50はディスク・ドライバ48を制御し、従来の使い方と同じようにNT層(NT layered)入出力アーキテクチャに従ってディスク・ドライバ48と「垂直方向」に関連づけられている。「垂直方向」と「水平方向」の用語は、NT層入出力アーキテクチャの一部として現在行われているドライバ接続(垂直方向)と、サード・パーティ制御エージェントによって動的に行われる相互接続カーネル・モード・ドライバに従う接続(水平方向)とを区別するために用いられている。
リーダ・ドライバ50は以下で説明する接続メソッドに従ってデコンプレッサ・ドライバ52とも「水平方向」に相互接続され、制御エージェント44によって管理されている。デコンプレッサ52は伸張をカーネル・モードで行ってから、データとコントロールを効果フィルタ54に引き渡す。効果フィルタは必要に応じて効果プロセッサ56を利用して特殊効果を適用してからデータとコントロールをサウンド・レンダリング・ドライバ58に引き渡し、このドライバはサウンド・カードを制御し、データをスピーカ62からのサウンドとしてレンダリングする。図2から理解されるように、処理をカーネル・モードのままにしておくと、ユーザ・モードとカーネル・モードとの間の複数の遷移がなくなり、処理をユーザ・モードで行うと通常起こるオーバヘッド量が減少するので、効率面の利点が得られる。
次に、図3を参照して説明する。図3は、本発明の一実施の形態に従う相互接続ソフトウェア・ドライバに関係するシステム・オブジェクトの階層的性質を示すロジック図である。ドライバ・オブジェクト64は、メモリにロードされるときの、実行可能ソフトウェア・コード・イメージを表すために作成される。ドライバ・コード・イメージはドライバの機能全体を含んでおり、ドライバ・オブジェクト64はシステムに置かれている場所、サポートされるドライバの種類などのイメージに関する情報を含んでいる。
制御エージェントによって独立にアクセスできる機能の各タイプ別に、デバイス・オブジェクト66a 〜66N が入出力ディレクトリ構造に作成され、これらのオブジェクトは利用可能で、ユーザ・モードのクライアントによってアクセスされる異なる機能を表している。これらは、フィルタまたは独立に利用できる他の機能部分を表しているのが代表的である。ドライバ・オブジェクト64とデバイス・オブジェクト66a 〜66N は囲みボックス68で示すように、ドライバ・コードのインストール時に作成される。
歴史的には、デバイス・オブジェクトは物理ハードウェアの各エレメントごとに存在する。しかるに、最新の入出力システムの柔軟性は、デバイス・オブジェクトが完全にソフトウェアで実装されたフィルタを表すことを可能にさせている。そのため、デバイス・オブジェクトは専らソフトウェアで実装されたフィルタの各インスタンスごとに作成することが容易になっている。従って、ソフトウェア・フィルタは、デバイス・オブジェクトで表された各インスタンスがデバイス・オブジェクトと1対1の対応関係をもつように実装することも、単一のデバイス・オブジェクトがより伝統的な手法に従い、各々がフィルタのクライアント・インスタンスを表している複数のファイル・オブジェクトを管理するように実装することも可能になっている。
デバイス・オブジェクト、図示の例では、デバイス・オブジェクト66a 上には、ファイル・オブジェクトが作成され、これはデバイス・オブジェクトで表された機能の独立インスタンスを表している。デバイス・オブジェクトはフィルタを表し、そのフィルタの複数のインスタンスを管理するのに対し、ファイル・オブジェクトは特定のエンティティによって使用される、そのフィルタの実際のインスタンスを表している。従って、ファイル・オブジェクト70はデバイス・オブジェクト66a によって定義されたフィルタのインスタンスである。
フィルタを使用するには、制御エージェントまたは他のユーザ・モード・クライアントは入出力ディレクトリ構造内で利用可能なデバイス上でファイルをオープンする。適切なコンテキスト情報を収めているファイル・オブジェクトが作成され、そのファイルへのハンドルがユーザ・モード・クライアントに返される。ファイル・オブジェクトは、作成時に「親」ファイル・オブジェクトを指定することによって階層的に関係づけることが可能であるが、ファイル・オブジェクトはすべてが同一デバイス・オブジェクトの子であるような、兄弟(sibling) 関係も持っている。
ファイル・オブジェクト内のコンテキスト情報は、ユーザ・モード・クライアントとの入出力インタフェースを管理する情報、ファイル・オブジェクトが表わしているエンティティの「状態(state) 」などからなっている。コンテキスト情報には、システムが必要とする情報があり、さらに、特殊な意味をもたせることができる、ユーザ定義可能エリアも含まれている。ユーザ定義可能エリアの使い方の例は、下述するバリデーション(validation)とIRPルーチング(routing) ・メソッドのインプリメーテンションの説明個所に示されている。
接続ピン・インスタンスを提供するためには、フィルタ・インスタンスを表すファイル・オブジェクト70が親として使用され、特定フィルタの接続ピン・インスタンスを表す子ファイル・オブジェクトが作成される。ファイル・オブジェクト70は接続ピン・ファクトリの定義と可用性に関して照会されるのに対し、実際のファイル・オブジェクトは特定のファイル・オブジェクトを適切な情報コンテキストとして使用して、ピン・ファクトリの各インスタンスごとに作成され、接続ピン・インスタンスが有効に、かつ正しく作成されるようにする。例えば、ファイル・オブジェクト72と74はファイル・オブジェクト70で表されたフィルタの接続ピン・インスタンスを表し、ファイル・オブジェクト70と階層的に関係づけられている。それぞれファイル・オブジェクト72と74で表された接続ピン・インスタンスはフィルタ・インスタンス(ファイル・オブジェクト70で表されている)に入ったあとで、そこから出るデータ・パスにすることができ、これは一連のチェイン・フィルタまたは他のドライバ機能を形成するときに他の接続ピン・インスタンスと接続するために使用できる。
ピン・インスタンスがフィルタ・インスタンスを表す別のファイル・オブジェクトと階層関係をもつファイル・オブジェクトで表されて、ピン・インスタンスのコンテキスト情報を提供するようにするのとまったく同じように、他のファイル・オブジェクトをピン・インスタンスと階層的に関係づけて他の機能を表すようにすると、正しいコンテキスト情報が得られるようになる。コンテキスト情報は、ピン・データ・フォーマット、通信タイプなどのように、作成時に使用される個々のパラメータに従って、あるピン・インスタンスを他のピン・インスタンスと区別するために必要である。
バッファ割当てメカニズム、タイミング・メカニズムなどのように、個別コンテキストかユーザ・モードのコントロールのどちらかをハンドルを通して要求する他の操作エンティティも、ファイル・オブジェクトで表すことができる。さらに、ファイル・オブジェクト(例えば、特定の接続ピン・インスタンスと関連づけられたバッファ割当てメカニズム)間の階層関係は、必要ならば、子ファイル・オブジェクトの作成時に親ファイル・オブジェクトを指定することにより確立することができる。これらの親子関係は、操作エンティティを表すファイル・オブジェクト間の関係と構造を決定するために存在する。さらに、特定タイプの「親」ファイル・オブジェクトはある種のタイプの「子」ファイル・オブジェクトだけを作ることができるので、以下で説明するように作成バリデーション・メカニズムが必要になる。この場合も、このようなファイル・オブジェクトは対応するハンドルがユーザ・モードで利用可能になっており、これらのハンドルはNtCreateFileなどのシステムAPIコールを通してクライアントに返される。
ファイル・オブジェクトへのハンドルはカーネル・モード・ドライバと通信するために、制御エージェントなどのユーザ・モード・クライアントによって使用される。ファイル・オブジェクト、デバイス・オブジェクト、およびドライバ・オブジェクトの階層的チェインは、入出力サブシステムが階層関係をもつファイル・オブジェクトとデバイス・オブジェクトを通ってドライバ・オブジェクトまで戻り、実際のドライバ・コードに入るエントリ・ポイント(entry point) に到達することができるようにする。このようなエントリ・ポイントはソフトウェア・ドライバ・コードの中の機能を指す参照(例えば、ポインタ)になっている。さらに、特定のファイル・オブジェクトと、ソフトウェア・ドライバ・コードへのエントリ・ポイントをもつドライバ・オブジェクトとの間のオブジェクト通路(pathway) 上にあるオブジェクトの各々は、入出力サブシステムがIRPを作成するときに重要なコンテキスト情報のほかに、下述するルーチングおよびバリデーション・メカニズムに従ってIRPを正しくルーチングするときに使用されるデータ構造への参照も提供する。
ファイル・オブジェクトと他のシステム・オブジェクトに対するハンドルはプロセス専用であり、ユーザ・モード・プロセスが基礎となるオブジェクトと通信するときの手段となる。注目すべきことは、ファイル・オブジェクトなどの、基礎となる単一システム・オブジェクトを参照するために複数のハンドルが作成できることである。このことは、複数のアプリケーションがファイル・オブジェクトで表されたピン・インスタンスに情報を供給できることを意味する。
異なるドライバを相互接続するとき重要となる情報エレメントの1つとして、デバイス・オブジェクト・スタックの深さ(depth) パラメータがある。これは特定のドライバ・オブジェクトのIRPスタック・ロケーションを示している。このようにすると、入出力マネージャを使用して、相互接続されたドライバ間で単一のIRPを使用し受け渡しできるので、IRPを別々に作成し、それを種々の相互接続ドライバ間で送信するよりもパフォーマンス向上を提供できることになる。別の方法として、各ドライバは適切な入出力マネージャのコールを通して、各連続通信ごとに新しいIRPを作成し、各々の新IRPを相互接続されたドライバのチェイン上の次のドライバへ送信させることも可能である。
次に、図4〜図6を参照して説明する。図は、異なるタイプのファイル・オブジェクト作成のバリデーションと適切なハンドラへの入出力要求パケット(I/O Request Packet:IRP)のルーチングを可能にするシステム・ドライバ・オブジェクト、デバイス・オブジェクト、およびファイル・オブジェクトのエクステンションを示している。図4は、1つまたは2つ以上のフィルタまたは他のドライバ機能を実装している実行可能コードを表すドライバ・オブジェクト76を示している。ドライバ・オブジェクト内では、Windows NTアーキテクチャはソフトウェア・ドライバ開発者が用意した作成ハンドラへの参照を要求している。この実施の形態によれば、マルチプレクシング・ディスパッチ機能(multiplexing dispatch function)78は作成ハンドラとしてドライバ・オブジェクト76から参照され、メッセージを作成されるファイル・オブジェクトのタイプに応じて特定の作成ハンドラへルーチングするために使用される。マルチプレクシング・ディスパッチ機能78のオペレーションは図8に示すフローチャートを参照して以下で説明する。
同じように、ドライバ・オブジェクトからの他のハンドラはマルチプレクシング・ディスパッチ機能を示し、どのように実装するかに応じて、これらは同じ機能にすることが可能である。言い換えれば、以下で詳しく説明するように、各タイプの入出力ハンドラ参照(例えば、読取り、書込み、デバイス制御など)はデバイス・オブジェクト内のエクステンション・データとファイル・オブジェクト内のコンテキスト情報を使用して、メッセージを適切なハンドラへルーチングするマルチプレクシング・ディスパッチ機能を指している。バリデーション・テーブルを参照するデバイス・オブジェクト内のエクステンション・データは、作成オペレーションで親ファイル・オブジェクトの指定がないとき使用される。指定があれば、親ファイル・オブジェクトのコンテキスト情報は正しいバリデーション・テーブルを示している。
図5は、ドライバ開発者によって所望により利用でき、ドライバ専用情報を含んでいる特定のデバイス・エクステンション・エリア82をもつドライバ・オブジェクト80を示している。ドライバ・オブジェクト80のデバイス・エクステンション・エリア82内の定義されたロケーションには、ファイル・タイプ・バリデーション・テーブル84と呼ばれ、ファイル・オブジェクト・タイプ86のストリング表現を含んでいるデータ構造への参照と、表現される各ファイル・タイプ別の関連する作成ハンドラ88への参照が置かれている。作成マルチプレクシング・ディスパッチ機能はファイル・タイプ・バリデーション・テーブル84を使用して、作成されるファイル・オブジェクト・タイプを検査し、そのあと、コントロールを適切な作成ハンドラへ引き渡す。これについては、以下の図8の説明個所で詳しく説明する。検査されるストリングはIRP作成要求に見出され、ユーザ・モードのNtCreateFile関数コールと共に使用されるファイル名ストリングから創られる。NtCreateFile関数コールは、ピン・インスタンスまたは他のメカニズムを作成するためにユーザ・モード関数セルの中で行われる。
図6は、ソフトウェア・ドライバ開発者が使用するために解放されているファイル・コンテキスト・エリア92をもつファイル・オブジェクト90を示している。参照はファイル・コンテキスト・エリア92からIRP要求ハンドラ・テーブル94へ行われる。IRP要求96の異なるタイプは特定のハンドラ98と関連づけられ、適切なマルチプレクシング・ディスパッチ機能はこの情報を使用して正しいハンドラにアクセスする。正しい作成ハンドラを決定する場合には、ファイル・タイプ・バリデーション・テーブル100と呼ばれるデータ構造が参照され、そこには、ファイル・オブジェクト・タイプ102のストリング表現と、表現される各ファイル・タイプ別の関連する作成ハンドラへの参照104が入っている。子ファイル・オブジェクト(つまり、デバイス・オブジェクトではなく別のファイル・オブジェクトを親としてもつファイル・オブジェクト)の場合は、タイプはファイル・オブジェクト・タイプ102内のストリングと比較されるストリングで表されている。一致するものが見つかると、関連する作成ハンドラは、参照104のうち、一致したファイル・オブジェクト・タイプ・ストリングと関連づけられている参照を使用してアクセスされる。一致するものが見つからなければ、要求は無効であるので、エラー表示が出されることになる。
次に、図7を参照して説明すると、図は作成バリデーションとメカニズムをセットアップするためのインストレーション・プロシージャを示している。ステップ106で、インストール・プログラムは適切なマルチプレクシング・ディスパッチ機能への参照をドライバ・オブジェクトの中に作成する。図4に示すように、作成ハンドラは汎用マルチプレクシング・ディスパッチ機能を指している。同様に、ドライバ・オブジェクト76の中の他のすべてのハンドラ参照は、特定ハンドラと密接な関係をもつ他の汎用(generic) マルチプレクシング・ディスパッチ機能を必要に応じて指している。別の方法として、各ハンドラ参照は同一マルチプレクシング・ディスパッチ機能を指すことも可能であり、その場合は、このディスパッチ機能はIRP要求を処理したあと、それを適切なハンドラへルーチングすることができる。この方法によるマルチプレクシング機能は異なる種類の要求(例えば、作成、書込みなど)を受け付ける必要があるため、複雑化することが避けられない。
次に、ステップ108で、ソフトウェア・ドライバ実行可能コードのインストールの一部として作成された各デバイス・オブジェクトは、図5に示すようにファイル・タイプ・バリデーション・テーブル84を参照するように調整される。最後に、ステップ110で、IRP要求の処理は、適切なデバイス・オブジェクト80から参照されたファイル・タイプ・バリデーション・テーブル84を使用してマルチプレクシング・ディスパッチ機能から開始される。
ファイル・オブジェクトが作成されると、適切なIRPディスパッチ・テーブル94が作成され、必要ならば、インデックスされたファイル・オブジェクト・タイプ・バリデーション・テーブル100と一緒に参照される。ファイル・オブジェクト・タイプ・バリデーション・テーブルの作成は、ファイル・オブジェクト・タイプに従って用意された作成ハンドラ内で行われる。データ構造が作成され、これはIRPディスパッチ・テーブル94とファイル・オブジェクト・タイプ・バリデーション・テーブル100を表しており、それを指す参照は作成される特定ファイル・オブジェクト90のファイル・コンテキスト情報92と一緒に特定ロケーションにストアされる。
次に、図8を参照して説明すると、図は作成マルチプレクシング・ディスパッチ機能のオペレーションとそのバリデーション・メカニズムを示すフローチャートであり、そこには、システム・ドライバ・オブジェクト、デバイス・オブジェクト、およびファイル・オブジェクトから参照されるデータ構造との相互作用も示されている。ステップ112で、ユーザ・モード・プロセスはファイル・オブジェクトを作成する入出力要求を送信する。この入出力作成要求はNtCreateFileのシステムAPIを呼び出すことによって行われる。ステップ114で、入出力マネージャはドライバ・オブジェクト76内の参照に基づいてIRPをマルチプレクシング・ディスパッチ機能78に送信する(図4参照)。
マルチプレクシング・ディスパッチ機能78が作成要求のIRPを受け取ると、ステップ116でテストが行われ、親ファイル・オブジェクトがあるかどうかが判断される。この判断を行うために必要な情報はIRP自体の中にあるが、これはユーザ・モード・プロセスによって元来用意されたものである。ユーザ・モード・プロセスは「親」ファイル・オブジェクトを参照するハンドルを作成要求の一部として用意し、NTシステムは「親」ファイル・オブジェクトへの正しい参照をもつIRPを作成する。
親ファイル・オブジェクトがなければ、右へのブランチがとられ、マルチプレクシング・ディスパッチ機能78は適切なデバイス・オブジェクト80からのデバイス・エクステンション82を使用して、ファイル・タイプ・バリデーション・テーブル84をステップ118で参照する(図5参照)。バリデーション・テーブル84を使用して、マルチプレクシング・ディスパッチ機能78は要求の中のストリングをファイル・オブジェクト・タイプ86のストリングと比較することによって、ステップ120でファイル・オブジェクト・タイプを検査する。
ステップ122でストリングが一致していると判断されると、適切な作成ハンドラがステップ124でアクセスされる。一致していなければ、作成要求はステップ126で拒否される。ステップ124でアクセスされた作成ハンドラはステップ126でファイル・オブジェクトを作成するか、あるいは作成させる。作成されたファイル・オブジェクトを使用して、適切な作成ハンドラは、以前に作成していたIRPディスパッチ・テーブル94を指すファイル・オブジェクト参照をファイル・コンテキスト92の中に作成する。
再びステップ116に戻って、親ファイル・オブジェクトが存在するかどうかが判断される。親ファイル・オブジェクトが存在するとステップ116で判断され、それが作成要求に関連するIRPに入っていれば、マルチプレクシング・ディスパッチ機能78は親ファイル・オブジェクト90からのファイル・コンテキスト92を使用して、ステップ130でIRPディスパッチ・テーブル92を参照する(図6)。作成要求の場合は、マルチプレクシング・ディスパッチ機能78はステップ132でファイル・タイプ・バリデーション・テーブル100を参照する。ファイル・タイプ・バリデーション・テーブル100を使用して、マルチプレクシング・ディスパッチ機能78は、上記と同じように、要求の中のストリングをファイル・オブジェクト・タイプ102のストリングと比較することによってステップ133でファイル・オブジェクト・タイプを検査する。
ストリングが一致しているとステップ134で判断されると、適切な作成ハンドラがステップ138でアクセスされる。一致していなければ、作成要求はステップ136で拒否される。適切な作成ハンドラを使用して、ファイル・オブジェクトは140で作成され、作成ハンドラは新しく作成されたファイル・オブジェクトの新しいIRPディスパッチ・テーブル94を作成し、新しく作成されたIRPディスパッチ・テーブル94を指す参照を新しく作成されたファイル・オブジェクト90のファイル・コンテキスト・エリア92の中にステップ142で作成する。注意すべきことは、親ファイル・オブジェクトおよび有効に作成された子ファイル・オブジェクトとの相互作用を説明するために、どちらの場合も、図6に示す同じファイル・オブジェクト構造が使用されていることである。どちらの場合も同じ構造が存在するが(新しいファイル・オブジェクトが作成されたあと)、これらはその使い方が異なり、含んでいる情報も異なっている。
接続ピン・インスタンスが作成されるといつでも、接続ピンIDが引き渡され、これはピン・インスタンスの作成を「サポート」するファイル内のピン・ファクトリを示している。この分野の精通者ならば理解されるように、接続ピンIDは、ファイル・オブジェクトが検査されるのとまったく同じように、バリデーションテーブルでストリングとして検査することも可能であり、また、その実装方法もさまざまである。
異なるドライバ間の接続を行うためには、あるドライバがそのような相互接続をサポートしていることを確かめるための共通メカニズムが必要である。この共通メカニズムは、接続ピン・ファクトリ機能を含むフィルタ機能を明らかにすることを可能にするものでなければならない。さらに、この種のメカニズムは、ドライバ開発者の柔軟性を向上するように拡張可能であることも必要である。
コンプライアント・ドライバを定義し、機能を明らかにすることを可能にするために本実施の形態で選択されている1つのメカニズムは関連アイテムの「集合」と名づけられている。これは既存の入出力通信メカニズムと一緒に使用すると便利なメカニズムである。集合は集合全体を特定するGUID(グローバルにユニークな識別子)と集合内の各機能エレメントのRUID(相対的にユニークな識別子、例えば、集合自体内の相対的な識別子)を持つものとして論理的に定義されている。集合識別子および選択されたRUIDアイテムと一緒にオペレーションするために必要な他のデータ構造は、フィルタ・ハンドルをパラメータとして使用して入出力制御コールの一部として引き渡される。機能の完全なシステムを実装するためには、少数のIOCTLを割当てるだけで十分である。実装されるとき、3つの異なる種類の集合がその機能に応じて確立されるので、必要になるIOCTLは総計4個である。他の実装では、集合の使い方が異なる場合がある。特定のIOCTLは、選択されたエレメント(RUIDを使用する)をなんらかの方法で解釈または使用するように入出力制御のハンドラに通知する。さらに、制御フラグをGUIDおよびRUIDと一緒に渡して、制御情報をもっと詳しく指定することができる。
最初の集合タイプはプロパティ集合であり、これはドライバ内または関連ハードウェア上に置かれている値または設定値と一緒に使用される。そのような設定値の例としては、転送レート、ボリューム・レベル(音量)などがある。1つのIOCTLがプロパティ集合と関連づけられ、制御フラグは"get" プロパティ・コマンドと"set" プロパティ・コマンドとを区別している。このようにすると、同じデータ構造が特定のプロパティを設定または取得するように使用でき、ドライバは必要なアクションを使用されたIOCTLに基づいて決定することができる。正しいプロパティは、ユニークなGUIDとRUIDの組合せからなる集合識別子(set identifier)によって特定される。
メソッド集合は使用されるもう1つの集合タイプであり、これはドライバによって実行できるアクションの集合である。メソッド集合を特定するために必要なIOCTLは1つだけであり、アクチュエートされる正しいメソッドは集合識別子のユニークなGUIDとRUIDの組合せによって特定される。メソッドはドライバを制御するために使用され、ドライバを使用するための初期化、バッファのクリアといった機能を含んでいる。
イベント集合は、デバイス変更通知、データ・スターベーション通知などのドライバ処理や、ユーザ・モード・アプリケーションで使用すると便利である集合によって定義された他の通知に関連するイベントを管理するために使用される。2つのIOCTLが使用され、1つは特定のイベントをイネーブルにするためのものであり、もう1つは特定のイベントをディスエーブルにするためのものである。RUIDで識別された、与えられたイベントに必要なデータ構造は、イベントをイネーブルにするか、ディスエーブルにするかに関係なく共用することができる。
集合を使用するには、入出力制御オペレーションは特定のIOCTLおよび集合GUID、 RUIDをもつデータ構造と他の必要なデータ(例えば、制御フラグ、データ構造など)を指す参照を使用して開始される。例えば、サウンド・カード・ドライバでボリューム・プロパティを設定することは、入出力制御オペレーションをプロパティ集合IOCTL、集合プロパティ・オペレーションを示す制御フラグ、ボリューム設定値をもつプロパティ集合の適切なGUID、ボリューム・プロパティを示しているその集合内の特定RUID、および新しいボリューム設定値を使用することを必然的に伴なう。
サポートされる集合についてタイプ別に照会するには、ヌルGUIDとサポートされる集合の列挙を示す制御フラグとをもつ、特定の集合タイプのIOCTL(例えば、プロパティIOCTL、メソッドIOCTL、またはイベント・イネーブルIOCTL)が入出力コマンドの一部として出され、サポートされる集合GUIDのリストが返される。ある集合内のサポートされるプロパティ、メソッドまたはイベントについて照会するには、集合GUID、集合タイプIOCTL、ヌルRUID、およびサポートされるエレメントの列挙を示す制御フラグが入出力オペレーションと共に使用される。サポートされるRUIDのリストは入出力オペレーションの結果として返される。このリストから、サード・パーティ・エージェントは、実装されている集合のどのオプション・エレメント(もしある場合)がサポートされるかを判断することができる。
GUIDでユニークに識別された集合の仕様書は、ドライバ開発者とサード・パーティ制御エージェントのどちらもが実装ガイドとして利用できるメカニズムをドキュメント化している。サード・パーティ開発者は、あるドライバの機能を照会に対する応答に基づいて知り、事前プログラムされた知識を抽象的集合定義に基づいて知ることになる。同様に、ドライバ開発者は、知った機能をどのようなサード・パーティ・エージェントに対して提供する集合または集合グループを実装するときのガイドとして抽象的集合定義を使用することができる。
ここで説明している接続機能を提供するためには、コンプライアント・ドライバはある種の集合をサポートしていなければならない。以下の表は、プロパティ集合フォーマットでサポートされ、本発明を実装するときに使用できるいくつかの重要な情報を示している。最初の表は、フィルタによって実装される接続ピン・ファクトリに関するプロパティに関し、2番目の表は、特定の接続ピン・ファクトリをテンプレートとして使用して作成される実際の接続ピン・インスタンスに関するプロパティを示している。
Figure 2007128538
Figure 2007128538
Figure 2007128538
Figure 2007128538
Figure 2007128538
Figure 2007128538
上記の表は単なる例示であり、これに限定されるものではない、この分野の精通者ならば理解されるように、異なるドライバ間の接続を作成するためには多数の異なるプロパティとスキーマを実装することが可能である。1つの重要な要素は標準化係数(standardization factor)であり、異なるドライバ製造者または開発グループは同一のプロパティ集合を実装する能力をもっているので、相互接続できるドライバを作成できるようにすることである。
もう1つの有用なプロパティ集合は、あるフィルタ上の入力と出力の接続ピン・ファクトリの内部関係に関するトポロジ情報を与える。この情報はあるフィルタ上の入力ピン・ファクトリおよび対応する出力ピン・ファクトリの関係だけでなく、入力と出力のピン・ファクトリの間でどのようなタイプの処理が行われるかも記載している。行われる処理の例としては、異なるデータ変換、データ伸張、エコー打消し(cancellation)などがある。このような情報は複数のフィルタを使用して仮定上の接続パスをトレースしてから実際の接続ピン・インスタンスおよび接続を作成する自動化フィルタ・グラフ作成機能で使用すると、便利である。基本的には、トポロジ情報はフィルタの内部構造を説明し、これをプロパティ集合メカニズムを通してサード・パーティ・エージェントからの照会に公開する。
従って、コンプライアント・ドライバは指定されたプロパティ集合を実装しているものにすぎない。そのため、サード・パーティ制御エージェントは、あるプロパティ集合がサポートされていることが分かったとき、コンプライアント・フィルタに対し照会と設定を行うことができる。全体目標は、異なるフィルタを1つに接続してフィルタ・グラフを作る方法に関する十分な情報を得ることである。
汎用集合メカニズムを使用すると、最小限の機能を実装してコンプライアント・ドライバのシステムをサポートできるが、その場合でも、拡張性は無制限である。集合は、特定の集合が実装されている限り、相互操作可能で相互接続可能なドライバのシステムを作成するために多数の異なるドライバ開発者によって独立にコーディングできる仕様書の中で定義することができる。さらに、この仕様書には、サポートしなければならない必須のプロパティ、メソッド、およびイベントを定義できるだけでなく、ドライバ機能と拡張機能に応じて実装できるオプションのプロパティ、メソッド、およびイベントも定義できる。最小限に要求される基本的共通性のほかに、ドライバ開発者は独自の集合を定義し、これらにGUIDを割当てることにより追加の機能を組み入れることも可能である。
次に、図9および図10を参照して説明する。図は2つのカーネル・モード・フィルタを接続するプロセスを図形化して示している。図9はロジック・ブロック説明図であり、そこでは各フィルタ・インスタンスと接続ピン・インスタンスはファイル・オブジェクトで表されている。図10はファイル・オブジェクトおよび適切な接続を作成するときのステップを示すフローチャートである。
ステップ144からスタートして、フィルタA146のインスタンスおよびフィルタB148のインスタンスはユーザ・モード・エージェントによって作成される。これらは特定のデバイスでファイルを作成する標準ファイル・システムAPIを使用して作成される。フィルタA146とフィルタB148がコンプライアント・フィルタまたはドライバとなっているのは、これらが適切なプロパティ、メソッド、およびイベント集合を実装して接続ピン・インスタンスの作成をサポートし、サポートされる集合とそのフィルタ用に定義された接続ピン・ファクトリに関してそれぞれのフィルタの機能に照会するようになっているからである。
サード・パーティ制御エージェントは、ステップ150でフィルタA146とフィルタB148にそれぞれ照会し、利用可能な接続ピン・ファクトリおよびそれから作成できる接続ピン・インスタンスの属性を判断する。これらの属性には、前述したように、各フィルタ146と148のそれぞれのピン・ファクトリのタイプ別の接続フォーマットとデータ・フォーマットがある。照会は、以下で詳しく説明する集合ベース照会メカニズムを使用して行われる。
上記情報の照会を終えると、サード・パーティ制御エージェントは、以前に照会したデータ・フォーマットと接続フォーマットの範囲に基づいて最適接続フォーマットを決定する。この決定はステップ152で行われ、選択した接続パスの要求事項に応じて同じフィルタをサード・パーティ・エージェントが異なった使い方をできるようにする。サード・パーティ制御エージェントはデータ交差プロパティ(data intersection property)、トポロジ情報、および接続ピン・ファクトリを両方のフィルタで使用して、作成される実際のフィルタ・グラフに応じてデータ・フォーマットと接続配置の最良の選択方法を決定する。
入力フィルタ・ピン・インスタンス154はステップ152で判断された最適検出情報を使用して、ステップ156でサード・パーティ・エージェントによって作成される。入力ピン・インスタンス154はファイル・オブジェクトであるので、ハンドルが作成プロセスから返されるが、これは入出力要求を入力インスタンス154へ送るために使用できる。さらに、入力ピン・インスタンス154の作成が有効性の検査をされているが、この作成には、図4〜図6、図7および図8を参照して前述したルーチングおよびバリデーション・メカニズムが使用される。
接続を完成するために、出力ピン・インスタンス158は、以前に作成された入力ピン・インスタンス154のハンドルをNtCreateFileコールの中でパラメータとして使用してステップ160で作成される。出力ピン・インスタンス158がこのようにして作成される効果として、システム・ファイル管理機能と入出力管理機能を使用して内部IRPスタック構造が作成される。このスタック構造により、オリジナルの書込みコマンドは、さまざまな方法で接続された接続ピン・インスタンスとフィルタによって適当な順序で連続処理することが可能になるので、異なるフィルタ間の直接データ・フローが容易化される。これを行うためには、入力ピン・インスタンスを供給する関連出力ピン・インスタンスの前に入力ピン・インスタンスが作成されていることが必要である。
デバイス・オブジェクトのスタック深さパラメータは、このドライバに送られるIRP用にスタック・ロケーションをいくつ作成するかを制御する。スタック深さパラメータは、デバイス・オブジェクトが初めて作られるときは1つであると想定されているが、複数のドライバが1つにチェイニングされているかどうかに応じて、あとで変更することも可能である。現システムでは、この変更は、必要ならば、出力ピン・インスタンスが初期「停止」状態から「取得」または他の状態に遷移するとき行われる。接続ピン・インスタンスの状態遷移はIRPを正しく作成し、処理するための正しいスタック深さパラメータ情報を決定するメカニズムである。
チェイニングされた接続ピン・インスタンス集合を正しく割当てるためには、接続ピン・インスタンスを特定の順序で停止状態から出るように遷移させる必要がある。つまり、最後の入力ピン・インスタンス(この例では、入力ピン・インスタンス154)から始まって、関連の(例えば、接続された)出力ピン・インスタンス(この例では、出力ピン・インスタンス158) まで連続的に逆方向に戻っていく必要がある。多数のフィルタが1つにチェイニングされていれば、最も深いフィルタまたはブリッジの入力ピン・インスタンスが遷移の開始ポイントであって、ブリッジまたはフィルタ上の初期出力ピン・インスタンスが設定されるまで逆方向に連続的に構築していかなければならない。言い換えれば、停止状態から出る遷移はチェインを逆昇るように行われ、各接続ピン・インスタンスが前の接続ピン・インスタンスの後で必要になるスタック・サイズを得るようにしなければならない。代表例として、必ずしもそうする必要はないが、接続ピン・インスタンスは停止状態から取得状態へ遷移するが、以下での説明の便宜上、取得状態への遷移はスタック深さパラメータの調整に関しては、停止状態から出る遷移と同じ目的を果たすようになっている。
すべてのピン・インスタンスが取得状態になったあとは、ストリーム読取りと書込みをフィルタ・グラフに対して出すことができる。なお、注目すべきことは、ここで説明しているシステムが、関連入力と出力ピン・インスタンスの接続をどの順序でも行うことができ、停止状態からの遷移だけはボトムアップ方式、つまり、最も深いものから先に行わなければならないことである。さらに、フィルタ・グラフは初期作成後に変更が行えるように再構成可能になっている。変更が行われるときは、状態遷移は停止状態にある接続ピン・インスタンスだけで行い、正しいスタック深さパラメータ情報が得られるようにする必要がある。
フィルタ上に見出される接続ピン・ファクトリは、フィルタが特定フォーマットでデータを消費および/または作成できる場所を表している。例えば、特定の接続ピン・ファクトリは、16ビットの44キロヘルツPCMオーディオや8ビットの22キロヘルツPCMオーディオなどの、いくつかの異なるデータ・フォーマットをサポートすることができる。前述したように、接続ピン・ファクトリやそのデータ・フォーマットなどの異なる機能については、適切なプロパティ集合メカニズムとシステム入出力機能を使用してフィルタから照会することができる。実際の接続ピン・インスタンスはピン・ファクトリから受信した情報に基づいて作成される。
単一のストリーム書込みまたはストリーム読取りオペレーションがユーザ・モード・エージェントから出されると、接続されたフィルタを通してデータの連続処理が行われるストリーミング環境では、IRP制御用の2つのメイン・メソッドがNTオペレーティング・システムのネーティブ機能の一部として使用することができる。第1のメソッドでは、個別IRPは各フィルタによって作成され、次のフィルタへ送られて処理され、このフィルタは新しいIRPを作成し、チェインを下って次々と処理されていく。他のメソッドでは、単一のIRPが使用され、入出力マネージャと相互作用するために用意された標準プロシージャを使用して連続フィルタ間で受け渡しされていく。チェイン上の各連続フィルタごとに新しいIRPを作成していく第1のメソッドが使用される場合は、フィルタ間の相互接続順序が重要でないのは、フィルタはIRPのデスティネーション(destination) だけを知っていればよく、入出力マネージャをコールしてIRPを指定のフィルタへ送ることができるからである。IRPが再使用される場合に重要なことは、停止状態からの接続ピン・インスタンスの遷移が再使用IRPを受け取る最後のフィルタから始まるように行われ、再使用IRPを受け取る最初のフィルタまで、または処理のためにIRPを作成したフィルタまで逆方向に処理していくことである。
相互接続カーネル・モード・フィルタの本実施の形態と実装例は、IRP共用を利用してドライバ開発の複雑さを軽減し、より堅牢なドライバが作成されることを可能にし、処理を効率化するという利点がある。「ボトム・アップ」のピン・インスタンス状態遷移パスは、正しいスタック順序が連続ドライバによって処理されるIRPに作成され、各ドライバ・オブジェクトが適切なスタック深さパラメータ集合をもつことを保証する。さらに、受信側入力ピン・ファクトリの現状態は、状態遷移シーケンスを正しくたどっていたかどうかを確かめるためにチェックされる。そのような理由から、特定の接続ピン・ファクトリの通信プロパティは起こり得るフロー方向を判断し、接続ピン・インスタンスの状態遷移を正しく分配する上で支援する。
出力ピン・インスタンス(またはIRPソース)を作成するとき、別のフィルタ上の入力ピン・インスタンス(またはIRPシンク(sink))を表すファイル・オブジェクトへの参照はNtCreateFileコールの一部として引き渡される。適切な作成ハンドラはマルチプレクシング・ディスパッチ機能とデバイス・オブジェクト/ファイル・オブジェクト階層を使用して、前述したように実行される。この作成ハンドラは入力ピン・インスタンスをもつフィルタ(例えば、図9のフィルタB148)のデバイス・オブジェクトを、入力接続ピン・インスタンス・ファイル・オブジェクト(例えば、入力ピン・インスタンス154)を通してアクセスすることができる。デバイス・オブジェクトから、前のスタック深さパラメータを読み取ることができ、出力ピン・インスタンスをもつフィルタのデバイス・オブジェクトのスタック深さパラメータが増加される。例えば、フィルタA146に関連するデバイス・オブジェクトは、図9に示す接続ではフィルタB148に関連するデバイス・オブジェクトのそれから増加されるスタック深さパラメータをもっている。これは停止状態から出る遷移のとき行われるのが通常であり、IRPは接続ピン・インスタンスが停止状態にある間はルーチングされない。
フィルタがIRPを処理するとき、その特定フィルタ用に指定された情報を含んでいる、IRPスタック内のどのスタック・フレームまたはロケーションをアクセスすべきかを、関連デバイス・オブジェクトのスタック深さパラメータを参照するか、あるいはそれを使用することによって知る。さらに、現フィルタは、デバイス・オブジェクトのスタック深さパラメータを減らして次のフィルタのIRPスタック・ロケーションに位置づけることによって、処理チェイン上の次のフィルタ用のIRPを準備する。
フィルタ・コードはIRPスタック内の次のロケーションを準備し、入出力マネージャをコールしてIRPを、指定された通りに次のフィルタに渡すことを受け持っている。このようにすると、フィルタは、特定の接続ピン・インスタンスを表す、どのファイル・オブジェクトがIRPと関連データを受け取って処理するかを指定することができる。従って、IRPの順次処理のためにそれぞれのデバイス・オブジェクトをスタックするためのIoAttachDeviceのような標準入出力マネージャ・コールは使用されない。
注目すべきことは、接続ピン・インスタンス間の接続を作成することは、その接続を表すために新しいデバイス・オブジェクトを作成することを意味しないことである。基礎となる単一のデバイス・オブジェクトはフィルタのインスタンスとそのフィルタ上のすべての接続ピン・インスタンスをサポートするために使用される。正しいデータ処理のために必要な具体的情報はファイル・オブジェクトのコンテキスト・エリアに保存されていて、コンテキスト情報はそのまま残されているが、非ページ・メモリ使用量は最小限に保たれている。さらに注目すべきことは、IRPベースの媒体について説明してきたが、相互接続フィルタ間の通信のための他の媒体も使用できることである。そのようなものとして、非ホスト・ハードウェアとハードウェア間通信での直接関数コールがある。
次に、図11と図12および図13を参照して、図1(従来技術)と図2(相互接続カーネル・モード・ドライバのハイレベル・ロジック図)に示すソフトウェア・ドライバの正しい作成、接続、および状態遷移順序について説明する。図11はボックス162で囲んだロジック構造とそこに含まれる処理ステップを示している。図12は接続ピン・インスタンスを作成して、カーネル・モード・フィルタの相互接続を完成する様子を示し、図13に示すフローチャートにボックス164で囲んだ処理ステップを含んでいる。
すべての相互接続が行われている図12の状態にあるとき、カーネル・モード・フィルタ・システムは処理を行うために読み書きの準備状態にある。入出力システムは正しい状態遷移プロセスによって正しく設定されたIRPスタック情報を使用して、ストリーム読取りと書込みをそれぞれの接続ピン・インスタンスを通して異なるフィルタ・エレメントに引き渡す。なお、グラフを作成するために使用されたエージェント以外の、ある種の外部ソフトウェアは、ブリッジまたはフィルタ自体とハードウェアも含めて、ストリーム読取りとライトのデータを提供する。
ステップ168からスタートしたあと、制御エージェント170はステップ180で、リーダ・フィルタ172、デコンプレッサ・フィルタ174、効果フィルタ176、およびサウンド・レンダリング・フィルタ178のインスタンスを作成する。さらに、リーダ・フィルタ172とディスク・ドライバ182との間の接続が行われて、データがディスク・ドライブから持ち込まれるようにする。各フィルタ・インスタンスの作成は標準入出力コールを使用してデバイス入出力ディレクトリ階層に見出される適切なデバイス上のファイルをオープンすることにより、ユーザ・モード制御エージェント170によって行われる。このコールからは、各フィルタのインスタンスを表すファイル・オブジェクトへのハンドルが返される。
ステップ184で、サード・パーティ・エージェントは効果フィルタ172、デコンプレッサ・フィルタ174、効果フィルタ176、およびサウンド・レンダリング・フィルタ178に照会し、接続ピン・ファクトリの機能を判断する。これらの機能は、どのような種類の入出力ピン・インスタンスが作成できるか、特定のフィルタは各接続ピン・ファクトリのインスタンスをいくつサポートするか、各接続ピン・ファクトリでサポートされるデータ・フォーマット、通信パスの媒体またはタイプなどがある。これらの機能は以前に詳しく説明したプロパティ集合メカニズムを使用して照会され、カーネル・モード・フィルタは、適切な「集合」(例えば、プロパティ集合)をサポートしているのでアーキテクチャに従っていることが前提になっている。
ステップ184でのこのようなすべての照会情報は、チェインニングされた接続パスが、適切な接続ピン・インスタンスを作成し、接続することによりそれぞれのフィルタ間で可能であるかどうかを判断するために使用される。サード・パーティ・エージェントは、相互接続のために必要なピン・インスタンスのタイプを判断し、与えられた目的を達成するフィルタ・グラフを作成する。
サポートされるデータ・フォーマットに基づく接続フォーマットの決定はステップ186で行われる。フィルタ上のトポロジ情報、データ・フォーマット、およびデータ交差プロパティを使用すると、仮定上の(hypothetical)フィルタ・グラフを作成することができる。接続順序は重要でないので、そのようにする必要はないが、フィルタ・グラフを作成しようとするとき時間を節約することができる。この仮定上のフィルタ・グラフがエラーなしで作成されるのであれば、サード・パーティ・エージェントは、相互接続する接続ピン・インスタンスの作成を信頼して行うことができるという安心が得られる。実際のピン・インスタンスが作成されていなければ、ある種の照会からはエラーが返されるので、かかる接続ピン・インスタンスを作成してから仮定上のフィルタ・グラフを作成するようにすると、実行可能であるとの信頼できる指示が返されることになる。この場合も、仮定上のフィルタ・グラフは相互接続を行う前にテストすることが可能である。
正しい接続情報が分かっているとステップ186で決定されると、入力ピン・インスタンスを作成し、相互接続して、図13のボックス164で囲まれた処理ステップのループで表すことができる。このループはデータ・ストリームのソースから最も遠くに離れた入力ピン・インスタンスから始まる処理ステップを含んでいる。この最後の入力ピン・インスタンスは「最も深い」ピン・インスタンスと呼ばれ、これは最初に作成され、そのあとに関連する出力ピン・インスタンスを続けることができる。従って、接続は、以前に作成された入力ピン・インスタンスのハンドルを使用して出力ピン・インスタンスを作成したものである。
このパターンは、すべての入力ピン・インスタンスが関連出力ピン・インスタンスとの接続の前に、それ以後連続して作成されるように続けられる。このような接続シナリオは単なる例示であり、それぞれの出力と入力ピン・インスタンスを接続して、本発明によるカーネル・モード・フィルタ間の接続を形成する他の可能な方法を限定するものではない。フィルタは、入力ピン・インスタンスからのハンドルが別のフィルタ上の接続された出力ピン・インスタンスの作成期間に使用される限り、実装に従ってどの順序でも接続することが可能である。さらに、前述したように、初期作成後(および使用後も)フィルタ・グラフに変更を行うことが可能である。
ループの最初の繰り返しでは、入力ピン・インスタンス188はステップ190で作成される。作成機能からハンドルを受け取ると、サード・パーティ制御エージェント170はそのハンドルをNtCreateFileコールでパラメータとして使用してステップ194で出力ピン・インスタンス192を作成する。最初の繰り返しでこれを行うと、サウンド・レンダリング・フィルタ178は、それぞれ対応する接続ピン・インスタンス188と192を通して効果フィルタ176に実効的に接続される。現実装では、NtCreateFileコールはユーザ・モード・クライアントが利用できるAPIの関数コールの一部として「ラップ(wrapped) 」される。これにより、サード・パーティ・エージェントのユーザ・モード開発者は詳細を知る必要から解放されるので、すべての関係機能を単一ユーザ・モードAPIに集中させることができる。
ステップ196で、サード・パーティ・エージェントは作成すべき入力ピン・インスタンスが他にも残っているかどうかを判断する。残っていれば、入力ピン・インスタンスを作成し、そのあとに別のフィルタ上の対応する出力ピン・インスタンスを続けなければならない。最終的には、すべての接続が行われ、サード・パーティ制御エージェント170はストリーム化データ処理に対してフィルタ・グラフを準備する。
以上のようにして、入力ピン・インスタンス202はステップ190でボックス164で囲まれたループの2回目の繰り返しで作成され、他方、出力ピン・インスタンス204は入力ピン・インスタンス202のハンドルをステップ194でその作成の一部として使用する。最後に、この特定の例では、3回目と最後の繰り返しで、入力ピン・インスタンス206が作成され、そのあとに出力ピン・インスタンス208が続いて接続が完結する。
ステップ197で、サード・パーティ制御エージェント170は、フィルタ・グラフによるストリーム化データ処理に備えて各接続ピン・インスタンスを停止状態から取得状態へ遷移させる。それぞれのフィルタのデバイス・オブジェクトの各々でスタック深さパラメータを正しく設定するためには、状態遷移は「最も深い」または最後の接続ピン・インスタンス(例えば、処理のためのデータを受け取る最後の入力ピン・インスタンス)から始めて、最初の接続ピン・インスタンス(例えば、データをグラフに送り込む最初の出力ピン・インスタンス)に到達するまで相互接続カーネル・モード・フィルタのチェインを順次に「さかのぼる」ように行う必要がある。最初のフィルタまたはブリッジはIRPを作成し、スタック・ロケーションはIRPがグラフ内の各カーネル・モード・フィルタに効率よく連続して受け渡されるように十分に割当てられる。
最後に、サード・パーティ制御エージェント170はストリーム読取りと書込みを出し、ステップ198でデータを処理してからステップ200で終了する。
前述したように、出力ピン・インスタンスの各作成には、そこに接続された入力ピン・インスタンスを表すファイル・オブジェクトのハンドルが必要である。このファイル・オブジェクト参照は、出力ピン・インスタンスの作成ハンドラが入力ピン・インスタンスに対応するデバイス・オブジェクトへの参照を、現在または将来のアクセスのためにセーブしておくことができるようにする。
もっと具体的に説明すると、これにより、入力ピン・インスタンスを管理するデバイス・オブジェクトのスタック深さパラメータは、停止状態から取得または他の状態へ状態遷移するとき出力ピン・インスタンスのドライバによってアクセスすることが可能になる。入力ピン・インスタンスに関連するスタック深さパラメータの値はアクセスされ、増加され、出力ピン・インスタンスに対応するデバイス・オブジェクトのスタック深さパラメータの中にセーブされる。
スタック深さパラメータは、共用IRPスタック構造のどこに特定フィルタ用のスタック・フレーム情報が置かれているかを判断するために使用されるが、これは各フィルタごとに異なっている。フィルタをこのように相互接続し、状態遷移を正しいシーケンスで行うと、通信をユーザ・モードにしなくても、カーネル・モードの相互接続フィルタのチェインを下るように単一IRPを受け渡してくことができる。
以上の説明から理解されるように、同一の接続ピン・ファクトリを基礎にした複数のインスタンスをもつことが可能である。例えば、オーディオ・ミキシング・フィルタは複数のピン・インスタンスをミックスして単一の出力ピン・インスタンスにしてから処理することができる。各入力インスタンスは同一タイプであり、フィルタは1つのタイプの入力ピンだけをサポートすることができる。このような構成の別の例として、複数の入力を1つの出力にする例がある。
逆のことを行うことも可能である。つまり、スプリッタ・フィルタは単一入力接続ピン・インスタンスをもち、複数の出力ピン・インスタンスを提供することによりデータ・ストリームを倍にすることが可能である。この分野の精通者ならば理解されるように、上述してきた接続メカニズムから実際の実装とその要求条件に応じて種々態様に変形し、種々態様に組み合わせることが可能である。
ドライバ開発者が独立に実装できる共通メカニズム(例えば、プロパティ集合、メソッド集合、およびイベント集合)を、すべてのコンプライアント・フィルタにサポートさせることによって均一性と標準化が達成されているので、制御エージェントは異種ソフトウェア・プロバイダから提供されるコンプライアント・フィルタを都合よく接続することができる。さらに、接続ピン・ファクトリの観点から見た機能の多くはある状況では必要であっても、別の状況では必要でない場合がある。必要とされる接続ピン・インスタンスの決定は異なるフィルタ間の相互接続を実際に行うサード・パーティ制御エージェントによって最初に行われる。
次に、図14を参照して説明すると、図は複数の処理コンポーネント間で使用されるときの、バッファ・アロケータ・メカニズムのオペレーションを示したものである。図には、特定の処理コンポーネントに関連するバッファ間のデータ・フロー(つまり、バッファ・フレーム間の実際のデータ転送)も示されている。コントロールは各処理コンポーネントに渡されるが、データは必要時にだけ転送され、一部の処理コンポーネントはデータ操作を実行し、データを既存バッファ・フレームに戻すようにしている。言い換えれば、データは新しいバッファに転送されることなく同じロケーションで処理されるので、「同所(in place)」で処理されると呼ばれている。
シンク処理コンポーネント210はバッファ・アロケータ・メカニズム212(四角で表されている)をその機能の一部としてもっている。バッファ・アロケータ・メカニズムは、サウンドまたはビデオ処理カード上のオンボード・メモリなどの特定のメモリにデータが置かれることを保証する必要のある処理コンポーネントや、前のバッファがバイト位置合わせ、フレーム・サイズなどの許容されない特性をもっているような処理コンポーネントにだけ存在している。さらに、バッファ・メモリのフレームを割当てるとき使用されるバッファ・アロケータ・メカニズムへの参照は円で示され、すべての処理コンポーネントはそのような参照をもっている。なお、ソース処理コンポーネント214は矢印218で示すようにシンク・バッファ・アロケータ212を参照するバッファ・アロケータ参照216をもっている。さらに、転送処理コンポーネント220はヌル(空白)のバッファ・アロケータ参照222をもち、シンク処理コンポーネント210も空の円223で示すようにヌルのバッファ・アロケータ参照をもっている。
この単純な処理例では、ソース処理コンポーネント214はシンクバッファ・アロケータ212を使用してバッファ・フレーム224aを割当て、バッファ・アロケータ参照216を使用してアクセスされる。割当てられたフレーム224aには、矢印226で示すようにソース処理コンポーネント214によってデータが満たされる。なお、ソース処理コンポーネントはある種のデータ操作または変換を行ってから、新たに割当てられたフレーム224aにデータを書き込むことができる。
この時点で、ソース処理コンポーネント214は処理を終えており、処理のコントロールを矢印228で示すように変換処理コンポーネント220に引き渡す。バッファ・アロケータ参照222の参照がヌル値をもっており、バッファ・アロケータ・メカニズムが指示されていないので、変換処理コンポーネント220は、バッファの割当ても、データを一方のバッファから他方のバッファへ転送することも行わない。従って、変換処理コンポーネント220は矢印230で示すように、割当てられたバッファ・フレーム224bで「同所」のデータ変換を行う。
データは新しいバッファ・フレームに転送されていないので、バッファ・フレーム224a、フレーム224b、およびフレーム224cは同じフレームであり、異なる処理コンポーネントへ連続して渡されるだけである。矢印231は割当てられたフレームがソース処理コンポーネント214と変換処理コンポーネント220の間で受け渡されることを示している。
最後に、変換処理コンポーネントは処理のコントロールを、矢印232で示すようにシンク処理コンポーネント210に引き渡す。なお、処理コントロールと一緒に、同じフレームがフレーム224bと224cの間で矢印234で示すように受け渡されて処理される。この場合も、図に示すように、フレーム224a、フレーム224b、およびフレーム224cはいずれもソース処理コンポーネント214によって最初に割当てられた同じフレームであり、別々に示されているのは説明の便宜上である。
シンク処理コンポーネント210はデータの処理を終えると、矢印236で示すようにバッファ内の割当て済みフレーム224cを解放する。シンク処理コンポーネント210は最早バッファを使用していないので、矢印236は内側に向かってシンク処理コンポーネント210を指しており、このフレームは割当て解除することも再使用することも可能である。
図15は、バッファ・アロケータ・メカニズムが上述してきた相互接続カーネル・モード・バッファ方式でどのように論理的に実装されるかを示している。図14と図15は共に同じフィルタ・グラフ・トポロジを示し、バッファ・アロケータ・メカニズムのオペレーションを理解しやすくするために使用されている。関係ドライバとその部分はそれぞれ、ユーザ・モード・クライアントがドライバを制御することを可能にするアクセス・ポイントをもち、これらはファイル・オブジェクトで表されている。相互通信はIRPを使用して行われる(IRPがカーネル・モード・ドライバによって作成されたか、ユーザ・モード入出力オペレーションに応答してNTエグゼクティブによって作成されたかとは無関係である)。
ソース処理コンポーネント238のインスタンス(ファイル・オブジェクトで表されている)は出力ピン・インスタンス240(これもファイル・オブジェクトで表されている)が関連づけられており、これは別のフィルタ・インスタントの接続のソースとなっている。変換フィルタ244の「子」である入力ピン・インスタンス242は詳しく前述したように、出力ピン・インスタンス240への参照をもつように作成されている。同様に、入力ピン・インスタンス248をもつシンク・フィルタ246は出力ピン・インスタンス250に接続され、これは変換処理コンポーネント244と関係づけられている。
相互接続されたカーネル・モード・ソフトウェア・ドライバのシステムでは、バッファ・アロケータ・メカニズムは入力ピン・インスタンスと関係づけられ、入力ピン・インスタンス上に作成または形成されると言われている。さらに、出力ピン・インスタンスは必要ならば、バッファ・アロケータ・メカニズムへの参照を論理的にもち、出力ピン・インスタンスをもつフィルタはこの参照を利用してバッファ・フレームの割当てと新しいフレームへのデータ転送を行ってから、コントロールを別の処理コンポーネントへ引き渡す。すでに説明したように、ヌル参照は、新しいフレームへのデータ転送が必要でないこと、および、処理を既存フレームで行うことができることを示している(つまり、処理の後、データは同じバッファ・フレームに戻される)。バッファ・アロケータ参照が存在するかどうかは、フィルタ・グラフを作成したサード・パーティ制御エージェントの初期交渉によって判断される。
入力ピン・インスタンス248上に形成されたバッファ・アロケータ・メカニズムはファイル・オブジェクトで表されているが、破線254は、出力ピン・インスタンス240がバッファ・アロケータ252を表すファイル・オブジェクトへの参照(例えば、ポインタまたはハンドル)をもっていることを示している。図15に示す例では、メモリのフレームはシステム・メモリ256から割当てられている。
フィルタは種々の方法で相互接続できるので、バッファ・アロケータは、用意されている場合であっても、必要でないことがある。バッファ・アロケータのインスタンスを表すファイル・オブジェクトが作成されるのは、フィルタを相互接続するサード・パーティ制御エージェントが必要であると判断した時だけである。このようにすると、フィルタはさまざまな構成で柔軟に接続でき、かつ、最適なデータ転送特性はそのまま保持される。さらに、デフォルトのシステム・バッファ・アロケータを用意すると、ドライバ開発者の開発作業をさらに削減することができる。
サード・パーティ制御エージェントは、架空上のモデルを構築する一部として接続ピンに必要なバッファ要件についても照会してから、実際のフィルタ接続を行う。いくつかの実装では、ピンのインスタンス生成前に照会を行うことが可能になっているが、本実施の形態では、必要なバッファ要件を確かめるためには、その前に実際の接続ピン・インスタンスを作成しておくことが要求される。さらに、本明細書に開示されている実施の形態では、照会は前述した集合メカニズムの使用を通して行われる。
サード・パーティ・クライアントまたは制御エージェントはカーネル・モード・フィルタの相互接続を完成してフィルタ・グラフを作成したとき、次に、入力ピン・インスタンス(またはシンク・ピン・インスタンス)のハンドルを使用してアロケータ要件の交渉を開始する。規定により、入力ピン・インスタンスは必要なバッファ割当て量を定義し、バッファ割当てメカニズムを提供するのに対し、出力ピン・インスタンスは入力ピン・インスタンスに関連する適切なバッファ割当てメカニズムへの参照をもっている。この分野の当業者ならば理解されるように、他の規定を使用すると、バッファ割当ての役割を入力ピン・インスタンスと出力ピン・インスタンスの間で逆にするといったように、同じ結果を効果的に達成することができる。
バッファ割当ての要件は、すべてのコンプライアント・フィルタによってサポートされる特定のプロパティ集合メカニズムを使用して確かめられる。理解されるように、「バッファ・アロケータ」のプロパティ集合は、他の集合と同じようにさまざまな方法で構成することが可能である。例えば、プロパティ集合は単一のプロパティをもつことが可能であり、その場合、そのプロパティはセグメント化された情報をもつデータ構造である。あるいは、プロパティ集合は複数のプロパティをもつことも可能であり、その場合、1つ1つは異なるフレーミング要件エレメント用となっている。データ構造からなる単一プロパティは、すべてのフレーミング要件情報を取り出すためにサード・パーティ制御エージェントが必要とするプロパティ集合照会が少なくなるので、ある状況によってはより効率的である。さらに、単一データ構造は要件情報を照会するためだけでなく、実際のバッファ・アロケータの作成時にパラメータを指定するためにも使用できる。
以下の表はデータ構造に、または個別的プロパティとして組み入れることができるフレーミング要件エレメントの非排他的リストを示している。また、これらの表には、このようなエレメントが実施の形態でどのような使い方がされるかの解説も含まれている。
Figure 2007128538
Figure 2007128538
Figure 2007128538
この分野の当業者ならば理解されるように、組み入れることができる関係フレーミング・プロパティはほかにもある。さらに、ここで説明しているバッファ割当てメカニズムは、表3に指定されているものより多いバッファ・フレーム・エレメントが組み込まれているか、そのサブセットが実装されているかに関係なく、ほぼ同じように機能する。
フィルタ・グラフ要件がサード・パーティ制御エージェントによって判断されると、次に、適切なカーネル・モード・バッファ・アロケータを適切な入力ピン・インスタンス上に作成することができる。クライアントは適切な接続ピン・インスタンスのハンドルを使用し、バッファ・アロケータの適切な作成パラメータを指定することによってバッファ・アロケータ・インスタンスを作成する。このようにして得られた、バッファ・アロケータを表すファイル・オブジェクトは接続ピン・インスタンスの子となり、そのファイル・オブジェクトとフィルタ自体のインスタンスを表すファイル・オブジェクトからのコンテキスト情報を使用してそれを正しく作成する。
言い換えれば、接続ピン・インスタンスの作成をバリデーションし、メッセージを特定の接続ピン・インスタンスの適切なハンドラへ転送するための、前述したものと同じメカニズムはバッファ・アロケータのインスタンスの作成にも同じように適用される。この場合も、NtCreateFileコールはサード・パーティ制御エージェントが使用できるAPIの一部としてハイレベル関数コールの中でラップされることになる。
バッファ・アロケータ・インスタンスはここで説明している実施の形態では、作成されるとすれば、入力ピン・インスタンスだけで作成される。
バッファ・アロケータ・インスタンス・ハンドルが適切なAPIを通して出力ピン・インスタンス・ハンドルに対して指定されていなければ、フィルタは、ストリーム入出力コントロールを通して渡されたストリーム・セグメントがフィルタの要件に合致しているものと想定できるので、データを同所で自由に変更することができる。
システムに用意されているデフォルト・アロケータをフィルタ開発者によって使用すると、入力接続ピン・インスタンスにバッファ割当て機能をもたせる作業が単純化される。このデフォルト・アロケータはデータをシステム・メモリから転送することができるデバイス・ドライバのためにシステム・メモリ・バッファ・フレーム割当てを行うが、特定のメモリ割当てプロパティを必要とする。デフォルト・バッファ・アロケータを使用すると、フィルタ開発者はバッファ割当てを行うコードを実際に準備する作業から解放される。しかし、その場合でも、フィルタは適切なプロパティ集合をサポートすることによって必要バッファ割当て量要求をサポートするように書かれることになる。
デフォルト・アロケータを使用するためには、フィルタ設計者は、(1)必要バッファ割当て要件要求に応えるコードを準備し、(2)デフォルト・アロケータ作成ハンドラ参照を、デフォルト・アロケータが関係する特定接続ピン・インスタンスのバリデーション・テーブルに入れる。言い換えれば、アロケータ・タイプ・メカニズムの作成要求がフィルタを通して渡されると、特定のGUIDストリングはバリデーション・テーブルで突き合わされ、デフォルト・アロケータ作成ハンドラへのアクセスができるようにする。
デフォルト・バッファ・アロケータはシステム・メモリを使用し、作成要求の一部として渡されたバッファ・アロケータ・フレーミング・プロパティに従って動作する。この種のデフォルト・アロケータはその特定機能と相互接続順序に応じて、種々の変換フィルタで使用される可能性がある。
オンボード・メモリまたは他のデバイスに依存する記憶方式のためのバッファ・アロケータを要求するフィルタは、バッファ・アロケータ・プロパティ集合とメソッド集合をサポートすることで専用のバッファ・アロケータを用意することができる。フィルタ専用アロケータの場合、フィルタは機能全体を実装するプログラム・コードを準備することに責任を有している。しかし、バッファ・アロケータのオペレーションは、デフォルトであるか、フィルタ専用であるかに関係なく、どのバッファ・アロケータの場合も同じであるので、サード・パーティ・エージェントはフィルタとバッファ・アロケータを正しく相互接続することができる。
バッファ・アロケータを表すファイル・オブジェクトは、正常に作成されたときは、データ構造を指すポイントをファイル・コンテキスト・エリアに置いている。このデータ構造には、IRPを種々のIRPコード(例えば、作成、入出力コントロールなど)に基づいて指定のハンドラへ送るためのディスパッチ・テーブルが、バッファ・アロケータの状態を保持するための他のデータ・エリアと構造と共に収められている。トラッキングできる実装依存情報のいくつかを挙げると、バッファが関係する接続ピン・インスタンスのファイル・オブジェクトへの参照、割当てフレーミング要件データ構造への参照、イベントを待っているクライアントのイベント・キュー、未処理になっている割当て要求(例えば、IRPによって受信されたもの)のキューなどがある。
ここで開示されている実施の形態のバッファ割当てメカニズムが利用できるインタフェース、つまり、通信方法は2つある。まず、すべてのアロケータはユーザ・モード・クライアントと正しく通信するためにはIRPベースのインタフェースを提供しなければならない。オプションとして、割当てプール・タイプがオペレーティング・システムのディスッパチ・レベル(サービスの限定されたサブセットが利用できるが、低優先度のタスクがそのプロセッサでブロック・アウトされるような高さの優先度レベル)でサービスを受けることができる場合は、関数テーブル・インタフェースがサポートされるので、相互接続されたフィルタは直接関数コールを使用して(DPC処理時に)パフォーマンスを向上することができる。これにより、IRPを入出力マネージャを通して受け渡すという余分のオーバヘッドを発生することなく、あるいは実行スレッドをスケジュールしてコンテキスト切替えを待つことなく、イベント通知を伝達することができる。
IRPベースのインタフェースはIRPを次のように連続的に処理する。割当て要求が渡されると、バッファ・アロケータはその要求を完了し、割当てられたバッファ・フレームを指すポインタを戻し、すべてのフレームが割当てられていれば、アロケータはIRPに保留(pending) のマークを付け、IRPをアロケータの要求キューに追加し、ほぼFIFO順に処理される。最後に、アロケータは保留中というステータスをコール側に戻す。
バッファ・フレームがアロケータに利用可能になったとき、アロケータはIRPベースのインタフェースの要求キューに置かれている最初の要求を完了することを試みる。以前にサービスを受けることができなかったIRPはこの要求キューに置かれ、処理のために新たに解放されたフレームを待つことになる。これとは逆に、要求キューで待たされている作業がなければ、そのフレームは空きリストに戻される。
直接関数コール・テーブルを使用するディスパッチ・レベル・インタフェースは次のように動作する。割当て要求が関数コール(これはDPC時に行うことができる)によって渡されると、アロケータは使用可能なフレームがあれば、そのフレームを指すポインタを戻し、さもなければ、ヌル(空白)を直ちに戻す。この場合、カーネル・モード・リクエスタは空きフレームがあることを知らせる空きイベント通知を待つことができる。この通知を受けると、カーネル・モード・リクエスタは割当て要求を再度試みる。
なお、ディスパッチ・レベル・インタフェースとIRPベースのインタフェースのどちらもが使用可能な空きフレームを奪い合うことが起こり得る。また、完了待ちに置かれている割当て要求IRPが要求キューに残っていれば、アロケータは、コール側がフレームを解放したとき現IRQLが受動レベルになければ、ワーカ・アイテム(worker item) をスケジュールしなければならないが、これは、直接コール・インタフェースを使用することはDPCレベルにある可能性を意味するからである。基本的には、IRPの待ち行列はワーカ・アイテムが実行されるまでは空きフレームを探し出さない。
さらに、ここで説明しているバッファ・アロケータ・メカニズムはMDL(memory descriptor list:メモリ記述子リスト)と一緒に使用するのに適しているので、バッファ間の転送数をさらに削減することができる。このような実装によると、NTオペレーティング・システムのシステム・メモリ機能とのシームレスな相互作用が向上することになる。
次に、図16を参照して説明すると、同図には前述したバッファ割当てメカニズムを利用する図11と図12の相互接続フィルタ・システムが示されている。制御エージェント170はフィルタ間の相互接続を行ったあと、必要バッファ量について各入力ピン・インスタンスに照会する。図に示すように、サウンド・レンダリング・フィルタ178はバッファ・フレームをサウンド・カード・メモリ258から割当てる必要があり、デコンプレッサ・フィルタ174はデータをディスク・ドライブ262から直接に受け取ることができるシステム・メモリ260からメモリを割当てることになる。
制御エージェント170はファイル・オブジェクトで表され、入力ピン・インスタンス188上に形成されるバッファ・アロケータ264を作成する。バッファ・アロケータ264はバッファ・フレームをサウンド・カード・メモリ258から割当て、バッファ・アロケータ264への参照は破線266で示された出力ピン・インスタンス204に設定される。この参照はバッファ・アロケータ264を表すファイル・オブジェクトへのハンドルとなり、必要時にバッファ・フレームを割当てるためにデコンプレッサ・フィルタ174によって使用されてからデータが新しいバッファに転送される。
同じように、バッファ・アロケータ268もファイル・オブジェクトによって表され、入力ピン・インスタンス206上に作成される。このバッファ・アロケータ268はシステム・メモリ260の割当てを管理する。制御エージェント170はバッファ・アロケータ268を作成したあと、破線270で示すようにその参照を出力ピン・インスタンスにストアする。この場合も、バッファ・アロケータ268はシステム・メモリ260間のバッファ・フレームの割当てを担当し、データがディスク262からそこに転送できるようにする。
制御エージェントは出力ピン・インスタンス192のバッファ・アロケータ参照の値にヌル(空白)を入れ、同所変換が行われることを示し、効果フィルタ176はサウンド・カード・メモリ258内の既存バッファからデータを読み取り、必要とされる変換または効果を適用したあとでデータをサウンド・カード・メモリ258に戻す。逆に、制御エージェントがバッファ・アロケータ参照を設定していなければ、値が空白であり、同所変換が行われると想定される。
次に、図17のフローチャートと図16のロジック図を参照して、バッファ・アロケータのオペレーションについて説明する。このプロセスは相互接続が行われたあとで実行され、ストリーム読取りと書込みは制御エージェント170からリーダ・フィルタ172に渡される。
最初に、リーダ・フィルタ172はステップ272で、デコンプレッサ・フィルタ174のバッファ・アロケータ268を使用してシステム・メモリにフレームを割当てる。リーダ・フィルタ172の出力ピン・インスタンス208はライン270で示すように、バッファ・アロケータ268を表すファイル・オブジェクトへのハンドルを受け取るので、直接にアクセスしてバッファ・アロケータ268を制御することができる。
ファイル・リーダ・フィルタ172はシステム・メモリ260内の実際のバッファ・フレームへのアクセス権を得ると、ステップ276で矢印274で示すように、ディスク262からのデータをフレームに入れる。このことから理解されるように、リーダ・フィルタ172はデータをシステム・メモリ260に持ち込むとき、変換または他の操作をデータに対して行うことができる。
次に、ファイル・リーダ・フィルタ172はステップ278でデコンプレッサ・フィルタ174へのストリーム書込みを開始する。このストリーム書込みはIRPによってNT入出力マネージャに渡される。ステップ280で、デコンプレッサ・フィルタ174はバッファ・アロケータ264を使用してサウンド・カード・メモリ258のフレームを割当てる。デコンプレッサ・フィルタ174がバッファ・アロケータ264を知っているのは、そこへのハンドルが出力ピン・インスタンス204に対してストアされていたためである。
デコンプレッサ・フィルタ174はデータを伸張し、矢印284で示すようにそのデータを、サウンド・カード・メモリ258に以前に割当てられたフレームに転送する。なお、データを伸張するとき、サウンド・カード・メモリから割当てられたフレームがシステム・メモリに存在するよりも多くなっている場合がある。この余剰バッファ・フレーム比が必要になるのは、データの伸張効果を受け入れるためである。
重要なことは、データを一方のバッファから他方のバッファへ転送するとき、転送されるデータ量が1:1の対応関係でない場合があることである。言い換えれば、受信側バッファが必要とするスペース(またはフレーム数)は、バッファ転送間でどのようなフィルタリングまたは変換が行われるかに応じて、多くなる場合と少なくなる場合とがある。
デコンプレッサ・フィルタ174は特定フレームの伸張を終えると、NT入出力マネージャの機能を使用してストリーム書込みを効果フィルタ176に渡す。効果フィルタ176はステップ288でストリーム書込みIRPを受け取り、既存サウンド・カード・メモリ258でデータを同所処理する。この効果処理はデータを1:1で置換するのと同じであるので、必要なバッファ・メモリは多くなることも、少なくなることもない。
効果フィルタ176がデータの同所処理を終えると、ストリーム書込みIRPはステップ290でサウンド・レンダリング・フィルタに渡される。この場合も、ストリーム書込みIRPをサウンド・レンダリング・フィルタ178に転送させるメカニズムは効果フィルタ176によってコールされたNT入出力マネージャの機能である。
最後に、サウンド・レンダリング・フィルタ178はステップ292でストリーム書込みIRPを受け取り、サウンド・カード・メモリ258に存在するサウンド・データの実際のレンダリングを形成するようにサウンド・カード・ハードウェアを制御する。この時点で、以前に割当てられていたサウンド・カード・バッファ・フレームは書込み要求を満たすために再使用することも、未処理の要求がなければ解放することもできる。バッファ・フレームが使用可能であることはデコンプレッサ・フィルタ174に知らされるので、待ちに置かれているストリーム書込みを使用してデータを処理し、割当てが解放されたバッファ・フレームに入れることができる。同様に、システム・メモリ260のバッファ・フレームは再使用されるか、解放される。
この分野の精通者ならば理解されるように、本発明の種々方法はコンピュータ・プログラム・コード手段として、磁気ディスク、CD−ROM、およびこの分野で共通している他の媒体やまだ未開発の他の共通媒体などの、コンピュータ読取り可能媒体上にストアされるコンピュータ命令として組み込んでおくことが可能である。さらに、コンピュータ・ハードウェア・メモリに置かれる重要なデータ構造は、上記のようなコンピュータ・プログラム・コード手段をオペレーションにより作成することができる。
本発明は本発明の基本的特徴の精神から逸脱しない限り、他の実施形態で実現することも可能である。上述してきた各種実施の形態はすべての点で説明した通りであるが、これらの実施の形態に限定されるものではない。従って、本発明の範囲は上述してきた説明によってではなく、特許請求の範囲に記載されている事項によってのみ限定されるものである。特許請求の範囲の等価技術の意味と範囲に属する一切の変更は本発明の範囲に属するものである。
制御エージェントの指示を受けてサウンド・データをディスク・ファイルから持ち込み、サウンド・データをなんらかの形態で処理し、サウンド・データをレンダリングしてスピーカから再生させる相互接続フィルタとドライバのシステムを示す従来技術のデータ・フロー図である。 図1に示すシステムと目的が同じであり、サウンド・データをディスク・ドライバから読み取り、そのデータを処理し、そのデータをレンダリングしてスピーカから聞こえるようにし、処理フィルタとレンダリングは、この場合も制御エージェントの指示を受けて相互接続カーネル・モード・ドライバによって処理されるようした本発明によるシステムを示す図である。 オペレーティング・システムで作成され、使用されるドライバ・オブジェクト、デバイス・オブジェクトおよびファイル・オブジェクト間の関係を示す垂直関係モデルを示す図である。 ドライバ・オブジェクトのロジック・ブロック図であり、本発明のシステムに従ってメッセージを適切なプロセス・ハンドリング・コードへ転送し、新しいファイル・オブジェクトの作成をバリデーションするためのデータ構造およびプログラム・コードとの論理的関係を示す図である。 デバイス・オブジェクトのロジック・ブロック図であり、本発明のシステムに従ってメッセージを適切なプロセス・ハンドリング・コードへ転送し、新しいファイル・オブジェクトの作成をバリデーションするためのデータ構造およびプログラム・コードとの論理的関係を示す図である。 ファイル・オブジェクトのロジック・ブロック図であり、本発明のシステムに従ってメッセージを適切なプロセス・ハンドリング・コードへ転送し、新しいファイル・オブジェクトの作成をバリデーションするためのデータ構造およびプログラム・コードとの論理的関係を示す図である。 ルーチングとバリデーション・コンポーネントリの初期セットアップとカーネル・モード・ドライバによる入出力メッセージの処理を示すフローチャートである。 制御エージェントの処理、ルーチングとバリデーション・メカニズム、および新しいファイル・オブジェクトを作成する具体的な作成ハンドラ・ルーチンを示す詳細フローチャートである。 オペレーティング・システムでファイル・オブジェクト構造を利用して、接続を標準化された方法で行う接続フィルタ間の水平関係を示すロジック図である。 図9のカーネル・モード・フィルタまたはドライバを作成し、接続するためにユーザ・モードの制御エージェントによってとられる処理ステップを示すフローチャートであり、制御エージェントから受け取った入出力要求を処理するために接続を行い、その処理が異なるドライバ(フィルタ)間で続けられる様子を示している。 ユーザ・モードの制御エージェントの指示を受けてカーネル・モード・フィルタのチェインを作成するために使用され、サウンド・データをハード・ドライブから読み取り、カーネル・モード・フィルタでそのデータを処理し、そのデータをレンダリングしてスピーカから聞こえるようにするシステムを実装するためのカーネル・モード・ドライバと接続を示す概要ロジック図である。 ユーザ・モードの制御エージェントの指示を受けてカーネル・モード・フィルタのチェインを作成するために使用され、サウンド・データをハード・ドライブから読み取り、カーネル・モード・フィルタでそのデータを処理し、そのデータをレンダリングしてスピーカから聞こえるようにするシステムを実装するためのカーネル・モード・ドライバと接続を示す概要ロジック図である。 図11と図12に示すシステム用に相互接続カーネル・モード・ドライバを作成するための処理ステップを示すフローチャートである。 バッファ割当てメカニズムがどのような働きをするかを示す図であり、割当てられたバッファ・フレームがある処理コンポーネントから別の処理コンポーネントへ渡されるときの、バッファ・フレームの論理的構成と処理を示す。 バッファ割当てメカニズムがどのような働きをするかを示す図であり、相互接続カーネル・モード・フィルタのシステムにおいて入力ピン・インスタンスを表すファイル・オブジェクトの「子」であるファイル・オブジェクトとして表されるバッファ・アロケータを示している。図14と図15はどちらも同じフィルタ・グラフ・トポロジを示している。 図11および図12に示すシステムの遷移において、バッファ・フレームの割当てを制御するバッファ・アロケータを利用して行われるバッファ割当てを示す図である。 相互接続カーネル・モード・フィルタのチェインを通してデータをディスク・ドライバから持ち込んで、サウンド処理ハードウェア上でデータをレンダリングする処理ステップを示すフローチャートであり、具体的には、バッファ・アロケータのオペレーションと図16に示すシステムでバッファ間で実際に行われるデータ転送を示している。
符号の説明
44,170 制御エージェント
46,262 ディスク・ドライブ
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,188,242,248 入力ピン・インスタンス
158,192,204,208,240,250 出力ピン・インスタンス
172 リーダ・フィルタ
174 デコンプレッサ・フィルタ
176 効果フィルタ
178 サウンド・レンダリング・フィルタ
210 シンク処理コンポーネント
212 バッファ・アロケータ・メカニズム
214,238 ソース処理コンポーネント
216,222 バッファ・アロケータ参照
220 変換処理コンポーネント
224a バッファ・フレーム
244 変換フィルタ
246 シンク・フィルタ
252,264,268 バッファ・アロケータ
256 システム・メモリ
258 サウンド・カード・メモリ
260 システム・メモリ

Claims (5)

  1. 第1および第2デバイス・ドライバを相互接続して、前記デバイス・ドライバが相互に通信し、データ処理のためのコントロールを転送できるようにカーネル・モード接続を標準化され、拡張可能な方法で使用し、さらに、データが必要な場合にだけ既存バッファから新しいバッファへ転送されるようにする方法において、該方法は、
    データ・フォーマットと接続フォーマットをサード・パーティ・コンポーネントによって第1デバイス・ドライバへ提供するステップと、
    前記接続フォーマットの第1インスタンスとインスタンシェイトされた接続へのハンドルを、該接続フォーマットの第1インスタンス上にバッファ・アロケータが形成されていれば、そこに形成されたバッファ・アロケータへの参照も含めて、前記第1デバイス・ドライバによって前記サード・パーティ・コンポーネントに応答して作成するステップと、
    前記ハンドルを該第1デバイス・ドライバによって該サード・パーティ・コンポーネントに戻すステップと、
    前記サード・パーティ・コンポーネントによって、前記データ・フォーマット、前記接続フォーマット、および前記ハンドルを前記第2デバイス・ドライバへ提供するステップと、
    前記接続フォーマットの第2インスタンスを前記ハンドルを利用して、前記第2ドライバによって該サード・パーティ・コンポーネントに応答して形成し、該第1接続フォーマット・インスタンスが新しいバッファを指示し、その管理を行うバッファ・アロケータを参照している場合にだけ、該第1ドライバが該第1および第2接続フォーマット・インスタンスを通してデータを、完全にカーネル・モード内で前記既存バッファから新しいバッファへ転送できるようにし、そうでなければ、第1ドライバはデータ処理コントロールだけを該第2ドライバに引き渡して既存バッファでデータを処理するようにしたステップと
    を備えたことを特徴とする方法。
  2. 請求項1に記載の方法において、
    サード・パーティ・コンポーネントによって前記第1デバイス・ドライバに照会してバッファ要求を判断するステップと、
    第1デバイス・ドライバのバッファ要求とオプションを、照会に応答して該第1ドライバによって前記サード・パーティ・コンポーネントに提供するステップと、
    バッファ・アロケータを第1接続フォーマット・インスタンスの一部として形成すべきかどうかを、提供されたバッファ要求に基づいて該サード・パーティ・コンポーネントによって判断するステップと、
    必要な場合、バッファを作成し、その管理を行うバッファ・アロケータを接続フォーマット・インスタンス上に形成するステップと
    をさらに備えたことを特徴とする方法。
  3. 第1および第2デバイス・ドライバを相互接続して、前記デバイス・ドライバが相互に通信し、データ処理のためのコントロールを転送できるようにカーネル・モード接続を標準化され、拡張可能な方法で使用し、さらに、データが必要ば場合にだけ既存バッファから新しいバッファへ転送されるようにする方法において、該方法は、
    サポートされる接続のタイプについて前記第1および第2デバイス・ドライバにサード・パーティ・コンポーネントによって照会し、該第1ドライバの場合には、各接続タイプごとにバッファリング要求と各接続タイプごとにバッファ・アロケータが使用可能であるかどうかも照会するステップと、
    各デバイス・ドライバがサポートする接続のタイプを、照会に応答して該第1および第2デバイス・ドライバによって前記サード・パーティ・コンポーネントに提供し、該第1ドライバの場合には、各接続タイプごとにバッファリング要求と各接続タイプごとにバッファ・アロケータが使用可能であるかどうかも提供するステップと、
    該第1および第2デバイス・ドライバ間の接続を行う方法と、第1ドライバの接続フォーマットについてバッファ・アロケータを形成する必要があるかどうかを、提供された接続情報に基づいて該サード・パーティ・コンポーネントによって判断するステップと、
    データ・フォーマットと接続フォーマットを該サード・パーティ・コンポーネントによって前記第1デバイス・ドライバに提供するステップと、
    前記第1デバイス・ドライバへの前記接続フォーマットのインスタンスとインスタンシェイトされた接続への接続ハンドルを、該サード・パーティ・コンポーネントに応答して該第1デバイス・ドライバによって作成するステップと、
    前記第1デバイス・ドライバによって前記ハンドルを前記サード・パーティ・コンポーネントに返すステップと、
    前記接続ハンドルとバッファ要求を該サード・パーティ・コンポーネントによって該第1デバイス・ドライバに提供するステップと、
    必要な場合、バッファ要求に従ってバッファを作成し、その管理を行うバッファ・アロケータのインスタンスを、インスタンシェイトされたバッファ・アロケータへのバッファ・アロケータ・ハンドルも含めて接続インスタンス上に、該サード・パーティ・コンポーネントに応答して該第1デバイス・ドライバによって作成するステップと、
    前記バッファ・アロケータ・ハンドルを該第1デバイス・ドライバによって該サード・パーティ・コンポーネントに返すステップと、
    前記接続ハンドルと、使用可能な場合、前記バッファ・アロケータ・ハンドルとを該サード・パーティ・コンポーネントによって該第2デバイス・ドライバに提供して前記第1および第2デバイス・ドライバを相互接続し、処理コントロールを該第2デバイス・ドライバから該第1デバイス・ドライバへ渡せるようにすると共に、前記バッファ・アロケータ・ハンドルが存在していて新しいバッファを指示するときだけ前記データを前記既存バッファから転送し、存在しなければ、該第1ドライバが該既存バッファで該データを処理できるようにするステップと
    を備えたことを特徴とする方法。
  4. カーネル・モード・データ処理システムにおいて、
    データ・ソースと、
    発生コンポーネントと終結コンポーネントを含む複数のカーネル・モード・データ処理コンポーネントであって、発生コンポーネントはデータ・ストリームのデータ・サンプルを前記データ・ソースから読み取り、処理コンポーネントの一部はバッファを有しているものと、
    データ・サンプルの処理を発生コンポーネントから終結コンポーネントにルーチングするためのデータ処理コンポーネント間のカーネル・モード・コンポーネント相互接続であって、各コンポーネントはデータ・サンプルを処理し、バッファが次の処理コンポーネントと関連づけられている場合にだけ、データ・サンプルを新しいバッファへ転送するようにしたものと
    を備えたことを特徴とするカーネル・モード・データ処理システム。
  5. カーネル・モード・メディア・レンダリング・システムにおいて、
    メディア・ソースと、
    発生コンポーネントと終結コンポーネントを含む複数のカーネル・モード・メディア処理コンポーネントであって、
    発生コンポーネントはメディア・ストリームのメディア・サンプルを前記メディア・ソースから読み取り、
    終結コンポーネントは前記メディア・ストリームをレンダリングし、
    各メディア処理コンポーネントはメディア・サンプルをメディア処理コンポーネント間で受け渡すための接続ピンを有し、
    一部のピンはデータ・バッファが関連づけられているものと、
    接続ピンを使用して作成されたメディア処理コンポーネント間のカーネル・モード・コンポーネント相互接続であって、メディア・サンプルの処理コントロールを発生コンポーネントから終結コンポーネントへルーチングし、メディア・サンプルはデータ・バッファが関連づけられているピンの間だけで転送されるようにしたものと
    を備えたことを特徴とするカーネル・モード・メディア・レンダリング・システム。
JP2006340461A 1997-04-04 2006-12-18 セパレートプロセッシングコンポーネント間のバッファ間データ転送を減らす方法およびシステム Expired - Fee Related JP4889471B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/825,957 US6209041B1 (en) 1997-04-04 1997-04-04 Method and computer program product for reducing inter-buffer data transfers between separate processing components
US08/825,957 1997-04-04

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP16478697A Division JP3929551B2 (ja) 1997-04-04 1997-06-20 セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ読取り可能媒体

Publications (2)

Publication Number Publication Date
JP2007128538A true JP2007128538A (ja) 2007-05-24
JP4889471B2 JP4889471B2 (ja) 2012-03-07

Family

ID=25245322

Family Applications (2)

Application Number Title Priority Date Filing Date
JP16478697A Expired - Fee Related JP3929551B2 (ja) 1997-04-04 1997-06-20 セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ読取り可能媒体
JP2006340461A Expired - Fee Related JP4889471B2 (ja) 1997-04-04 2006-12-18 セパレートプロセッシングコンポーネント間のバッファ間データ転送を減らす方法およびシステム

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP16478697A Expired - Fee Related JP3929551B2 (ja) 1997-04-04 1997-06-20 セパレート・プロセッシング・コンポーネント間のバッファ間データ転送を減らす方法およびコンピュータ読取り可能媒体

Country Status (5)

Country Link
US (2) US6209041B1 (ja)
EP (2) EP0871116B1 (ja)
JP (2) JP3929551B2 (ja)
CA (1) CA2208297C (ja)
DE (1) DE69736586T2 (ja)

Families Citing this family (104)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7042526B1 (en) * 1998-04-08 2006-05-09 Microsoft Corporation Worldwide television tuning system with country code based tuning
US6340997B1 (en) * 1998-04-08 2002-01-22 Microsoft Corporation Worldwide television tuning system with object-based tuning control modules
US8380041B2 (en) * 1998-07-30 2013-02-19 Tivo Inc. Transportable digital video recorder system
US6233389B1 (en) * 1998-07-30 2001-05-15 Tivo, Inc. Multimedia time warping system
US7558472B2 (en) * 2000-08-22 2009-07-07 Tivo Inc. Multimedia signal processing system
US8577205B2 (en) * 1998-07-30 2013-11-05 Tivo Inc. Digital video recording system
US7047554B1 (en) * 1998-12-09 2006-05-16 Intel Corporation System and method for integrating and controlling audio/video devices
AU4185900A (en) 1999-03-30 2000-11-14 Tivo, Inc. System for automatic playback position correction after fast forward or reverse
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
EP1214842B1 (en) 1999-09-20 2010-11-17 TiVo, Inc. Closed caption tagging system
US6594773B1 (en) * 1999-11-12 2003-07-15 Microsoft Corporation Adaptive control of streaming data in a graph
US7577958B1 (en) * 1999-12-09 2009-08-18 Nortel Networks Limited Expediting an operation in a computer system
US7155739B2 (en) 2000-01-14 2006-12-26 Jbip, Llc Method and system for secure registration, storage, management and linkage of personal authentication credentials data over a network
US7035916B1 (en) * 2000-02-16 2006-04-25 Microsoft Corporation Coupling a filter graph space to a network driver space
US6836888B1 (en) * 2000-03-17 2004-12-28 Lucent Technologies Inc. System for reverse sandboxing
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
US7266613B1 (en) * 2000-08-09 2007-09-04 Microsoft Corporation Fast dynamic measurement of bandwidth in a TCP network environment
US7185082B1 (en) 2000-08-09 2007-02-27 Microsoft Corporation Fast dynamic measurement of connection bandwidth using at least a pair of non-compressible packets having measurable characteristics
US6983466B2 (en) * 2000-12-06 2006-01-03 Microsoft Corporation Multimedia project processing systems and multimedia project processing matrix systems
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
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
US6768499B2 (en) * 2000-12-06 2004-07-27 Microsoft Corporation 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
US7114161B2 (en) 2000-12-06 2006-09-26 Microsoft Corporation System and related methods for reducing memory requirements of a media processing system
US6774919B2 (en) * 2000-12-06 2004-08-10 Microsoft Corporation Interface and related methods for reducing source accesses in a development system
US7447754B2 (en) * 2000-12-06 2008-11-04 Microsoft Corporation Methods and systems for processing multi-media editing projects
US7287226B2 (en) 2000-12-06 2007-10-23 Microsoft Corporation Methods and systems for effecting video transitions represented by bitmaps
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
US6882891B2 (en) 2000-12-06 2005-04-19 Microsoft Corporation Methods and systems for mixing digital audio signals
US7103677B2 (en) 2000-12-06 2006-09-05 Microsoft Corporation Methods and systems for efficiently processing compressed and uncompressed media content
US6834390B2 (en) 2000-12-06 2004-12-21 Microsoft Corporation System and related interfaces supporting the processing of media content
US20030217184A1 (en) * 2000-12-30 2003-11-20 Govindan Nair Method and apparatus for allocating buffers shared among protocol layers in a protocol stack
US20070230921A1 (en) * 2001-04-05 2007-10-04 Barton James M Multimedia time warping system
US6792449B2 (en) 2001-06-28 2004-09-14 Microsoft Corporation Startup methods and apparatuses for use in streaming content
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
US7725557B2 (en) * 2002-06-24 2010-05-25 Microsoft Corporation Client-side caching of streaming media content
US7024672B2 (en) * 2002-06-26 2006-04-04 Microsoft Corporation Process-mode independent driver model
US7448049B1 (en) * 2002-10-18 2008-11-04 Crossroads Systems, Inc. System and method of supporting kernel functionality
US7650421B2 (en) * 2002-12-30 2010-01-19 Microsoft Corporation Adaptable accelerated content streaming
CN1245685C (zh) * 2002-12-31 2006-03-15 上海科泰世纪科技有限公司 基于构件的操作系统动态设备驱动的方法
AU2004202425A1 (en) * 2003-06-04 2004-12-23 Panasonic Corporation Program replacing method
US20040268400A1 (en) * 2003-06-26 2004-12-30 Microsoft Corporation Quick starting video content
US7054774B2 (en) 2003-06-27 2006-05-30 Microsoft Corporation Midstream determination of varying bandwidth availability
US7441020B2 (en) * 2003-06-27 2008-10-21 Microsoft Corporation Media plug-in registration and dynamic loading
US7391717B2 (en) * 2003-06-30 2008-06-24 Microsoft Corporation Streaming of variable bit rate multimedia content
US7613767B2 (en) * 2003-07-11 2009-11-03 Microsoft Corporation Resolving a distributed topology to stream data
US20050065969A1 (en) * 2003-08-29 2005-03-24 Shiby Thomas Expressing sequence matching and alignment using SQL table functions
US7900140B2 (en) * 2003-12-08 2011-03-01 Microsoft Corporation Media processing methods, systems and application program interfaces
US7712108B2 (en) * 2003-12-08 2010-05-04 Microsoft Corporation Media processing methods, systems and application program interfaces
US7733962B2 (en) * 2003-12-08 2010-06-08 Microsoft Corporation Reconstructed frame caching
US7735096B2 (en) * 2003-12-11 2010-06-08 Microsoft Corporation Destination application program interfaces
US9323571B2 (en) * 2004-02-06 2016-04-26 Intel Corporation Methods for reducing energy consumption of buffered applications using simultaneous multi-threading processor
US20050185718A1 (en) * 2004-02-09 2005-08-25 Microsoft Corporation Pipeline quality control
US7941739B1 (en) 2004-02-19 2011-05-10 Microsoft Corporation Timeline source
US7934159B1 (en) 2004-02-19 2011-04-26 Microsoft Corporation Media timeline
US7664882B2 (en) * 2004-02-21 2010-02-16 Microsoft Corporation System and method for accessing multimedia content
US7609653B2 (en) * 2004-03-08 2009-10-27 Microsoft Corporation Resolving partial media topologies
US7577940B2 (en) * 2004-03-08 2009-08-18 Microsoft Corporation Managing topology changes in media applications
US7669206B2 (en) 2004-04-20 2010-02-23 Microsoft Corporation Dynamic redirection of streaming media between computing devices
JP2005317115A (ja) * 2004-04-28 2005-11-10 Sony Corp 情報処理装置および情報処理方法、並びに、プログラム
US7818444B2 (en) 2004-04-30 2010-10-19 Move Networks, Inc. Apparatus, system, and method for multi-bitrate content streaming
US7162533B2 (en) * 2004-04-30 2007-01-09 Microsoft Corporation Session description message extensions
US7590750B2 (en) * 2004-09-10 2009-09-15 Microsoft Corporation Systems and methods for multimedia remoting over terminal server connections
US7640552B2 (en) * 2004-10-29 2009-12-29 Microsoft Corporation Multimedia filter resilience
JP4897698B2 (ja) 2004-11-19 2012-03-14 ティヴォ インク 以前に放送されたコンテンツを安全に転送する方法および装置
US7580915B2 (en) * 2004-12-14 2009-08-25 Sap Ag Socket-like communication API for C
US7593930B2 (en) * 2004-12-14 2009-09-22 Sap Ag Fast channel architecture
US7600217B2 (en) * 2004-12-14 2009-10-06 Sap Ag Socket-like communication API for Java
US7971001B2 (en) 2004-12-28 2011-06-28 Sap Ag Least recently used eviction implementation
US7672949B2 (en) * 2004-12-28 2010-03-02 Sap Ag Connection manager having a common dispatcher for heterogeneous software suites
US8370448B2 (en) * 2004-12-28 2013-02-05 Sap Ag API for worker node retrieval of session request
US20060143256A1 (en) 2004-12-28 2006-06-29 Galin Galchev Cache region concept
US8204931B2 (en) 2004-12-28 2012-06-19 Sap Ag Session management within a multi-tiered enterprise network
US7933947B2 (en) * 2004-12-28 2011-04-26 Sap Ag Connection manager that supports failover protection
US7500133B2 (en) * 2004-12-28 2009-03-03 Sap Ag Connection manager for handling message oriented protocol-based requests
US7694065B2 (en) 2004-12-28 2010-04-06 Sap Ag Distributed cache architecture
US8140678B2 (en) * 2004-12-28 2012-03-20 Sap Ag Failover protection from a failed worker node in a shared memory system
US7539821B2 (en) 2004-12-28 2009-05-26 Sap Ag First in first out eviction implementation
KR100645537B1 (ko) * 2005-02-07 2006-11-14 삼성전자주식회사 안정적인 패킷 포워딩을 위한 동적인 큐 관리방법 및 이를위한 네트워크 프로세서의 구성요소
US8589562B2 (en) 2005-04-29 2013-11-19 Sap Ag Flexible failover configuration
US7748009B2 (en) * 2005-05-16 2010-06-29 Microsoft Corporation Use of a precursor to select cached buffer
US7689660B2 (en) * 2005-06-09 2010-03-30 Sap Ag Application server architecture
US7966412B2 (en) 2005-07-19 2011-06-21 Sap Ag System and method for a pluggable protocol handler
KR100764621B1 (ko) 2005-10-21 2007-10-08 엔에이치엔(주) 데이터 풀링 방법 및 데이터 풀링 시스템
US20070156907A1 (en) 2005-12-30 2007-07-05 Galin Galchev Session handling based on shared session information
US8707323B2 (en) * 2005-12-30 2014-04-22 Sap Ag Load balancing algorithm for servicing client requests
US8479283B2 (en) * 2006-11-28 2013-07-02 Microsoft Corporation Generating security validation code automatically
US8484611B2 (en) * 2007-10-15 2013-07-09 International Business Machines Corporation Method and system for simplified assembly of information processing applications
US8312426B2 (en) 2008-01-07 2012-11-13 International Business Machines Corporation Method and system for simplified service composition in web environment
US8239828B2 (en) * 2008-01-08 2012-08-07 International Business Machines Corporation Method of recovering from software failures using replanning
US8245122B2 (en) * 2008-01-08 2012-08-14 International Business Machines Corporation Method and system for modeling user requests, applications and components used in dynamic application assembly
US8640149B2 (en) 2008-03-26 2014-01-28 International Business Machines Corporation Method and apparatus for dynamic web service composition and invocation
US8949140B2 (en) 2008-04-21 2015-02-03 International Business Machines Corporation Method and system for dynamic software reconfiguration triggered by component- or system- initiated events
US8898624B2 (en) * 2008-05-05 2014-11-25 International Business Machines Corporation Method and apparatus for simplified assembly of parametric information processing applications
US8374712B2 (en) * 2008-12-31 2013-02-12 Microsoft Corporation Gapless audio playback
WO2011001210A1 (en) * 2009-06-29 2011-01-06 Nokia Corporation Resource allocation
WO2011121168A1 (en) * 2010-03-31 2011-10-06 Nokia Corporation System and method for allocating buffers
US8448113B2 (en) * 2010-04-27 2013-05-21 International Business Machines Corporation Efficiently applying a single timing assertion to multiple timing points in a circuit using creating a deffinition
US9286032B2 (en) 2013-03-15 2016-03-15 International Business Machines Corporation Automated software composition
FR3034220B1 (fr) * 2015-03-27 2017-03-10 Damien Plisson Amelioration d'emission de flux multimedia
US10963172B2 (en) * 2018-08-09 2021-03-30 Apple Inc. Systems and methods for providing a back pressure free interconnect
US10922249B2 (en) * 2019-01-15 2021-02-16 Microsoft Technology Licensing, Llc Input/output control code filter

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265781A (ja) * 1991-12-31 1993-10-15 Internatl Business Mach Corp <Ibm> マルチメディア・データ処理システム
JPH0922357A (ja) * 1995-04-12 1997-01-21 Internatl Business Mach Corp <Ibm> 通信をブリッジする装置および方法
JPH09503081A (ja) * 1993-09-13 1997-03-25 タリジェント インコーポレイテッド オブジェクト指向ビデオ・システム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1244555A (en) * 1985-06-17 1988-11-08 Walter H. Schwane Process transparent multi storage mode data transfer and buffer control
US5056003A (en) * 1985-06-17 1991-10-08 International Business Machines Corporation Distributed data management mechanism
US5386566A (en) * 1991-03-20 1995-01-31 Hitachi, Ltd. Inter-processor communication method for transmitting data and processor dependent information predetermined for a receiving process of another processor
AU4219693A (en) * 1992-09-30 1994-04-14 Apple Computer, Inc. Inter-task buffer and connections
KR940007680A (ko) * 1992-09-30 1994-04-27 로버트 에이. 에셀만 메모리 할당 요구의 축소 방법 및 시스템
US5384890A (en) * 1992-09-30 1995-01-24 Apple Computer, Inc. Method and apparatus for providing multiple clients simultaneous access to a sound data stream
US5652913A (en) * 1992-10-13 1997-07-29 Microsoft Corporation System for providing intercommunication of I/O access factors stored in a shared data structure, accessed and maintained by both file system and device driver
EP0701205B1 (en) * 1994-07-22 2003-05-14 Sun Microsystems, Inc. Method and apparatus for space-efficient inter-process communication
US5768126A (en) * 1995-05-19 1998-06-16 Xerox Corporation Kernel-based digital audio mixer

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05265781A (ja) * 1991-12-31 1993-10-15 Internatl Business Mach Corp <Ibm> マルチメディア・データ処理システム
JPH09503081A (ja) * 1993-09-13 1997-03-25 タリジェント インコーポレイテッド オブジェクト指向ビデオ・システム
JPH0922357A (ja) * 1995-04-12 1997-01-21 Internatl Business Mach Corp <Ibm> 通信をブリッジする装置および方法

Also Published As

Publication number Publication date
US6601112B1 (en) 2003-07-29
CA2208297A1 (en) 1998-10-04
EP0871116A3 (en) 1998-12-16
US6209041B1 (en) 2001-03-27
JP3929551B2 (ja) 2007-06-13
JP4889471B2 (ja) 2012-03-07
CA2208297C (en) 2005-05-24
EP0871116A2 (en) 1998-10-14
JPH10283252A (ja) 1998-10-23
DE69736586D1 (de) 2006-10-12
EP0871116B1 (en) 2006-08-30
EP1619581A1 (en) 2006-01-25
DE69736586T2 (de) 2007-08-30

Similar Documents

Publication Publication Date Title
JP4889471B2 (ja) セパレートプロセッシングコンポーネント間のバッファ間データ転送を減らす方法およびシステム
JP4684376B2 (ja) カーネル・モードにおけるソフトウェア・ドライバを相互接続する方法,コンピュータ・プログラム・プロダクト、システムおよび記録媒体
JP3929554B2 (ja) ファイル・オブジェクトの生成をバリデーションし、ファイル・オブジェクトへのメッセージをルーチングする方法
JP4575528B2 (ja) 標準クロック・メカニズムを用いて、多重データ・ストリームの処理の同期と異なる処理速度のマッチングを行う方法
US6182108B1 (en) Method and system for multi-threaded processing
US6633923B1 (en) Method and system for dynamic configuration of interceptors in a client-server environment
US7424549B2 (en) System, method, and article of manufacture for using a replaceable component to select a replaceable quality of service capable network communication channel component
JPH08263292A (ja) オブジェクト指向プログラミング・インターフェース及びマップする方法
US6643712B1 (en) Validating the creation of and routing of messages to file objects
EP0695993A2 (en) System and method for interprocess communication
Andert Object frameworks in the Taligent OS
US6757904B1 (en) Flexible interface for communicating between operating systems
US7206843B1 (en) Thread-safe portable management interface
US20100023948A1 (en) Allocating resources in a multicore environment
EP0689139A2 (en) Anonymous reply port method and apparatus for a microkernel data processing system
EP0689137A2 (en) Message control structure registration method and apparatus for a microkernel data processing system
Karaorman et al. Using DMA with Framework Components for ‘C64x
US20030131140A1 (en) Data transfers in embedded systems
Abrossimov et al. CHORUS, a New Technology for Building UNIX Systems
Greenbaum Writing Flexible Device Drivers for DSP/BIOS II
JPH0635719A (ja) 複数プログラム間データ共有管理方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091211

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100305

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100406

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100806

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20100809

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100809

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

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20100827

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

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20100917

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110722

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110727

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

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

Year of fee payment: 3

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