(57)【要約】【課題】  ユーザとの対話を必要とすることなく文書を生成できる、サーバ等のコンピューティング装置に、文書を送ること。【解決手段】  本発明は、生成する文書が受信され、文書の生成を担当する生成アプリケーションが開始され、生成アプリケーションから文書生成関数への呼び出しが、プロキシ文書生成関数へと向け直され、次に、生成アプリケーションが文書を生成するように命令される。文書を生成オプションとともに受信し、前記生成オプションを前記プロキシ生成関数に提供することによって、前記プロキシ生成関数が前記生成オプションを利用して、前記生成アプリケーションがユーザとの対話なしで前記文書を生成することを支援できるようにする。   【選択図】図19
2004280804.tif 000002
【特許請求の範囲】
【請求項１】
生成アプリケーションを開始すること、
前記生成アプリケーションからの文書生成関数への呼び出しをプロキシ文書生成関数へと向け直すこと、
前記生成アプリケーションに文書を生成するように命令すること、
とを含む文書生成方法。
【請求項２】
前記文書を生成オプションとともに受信することをさらに含み、前記生成オプションを前記プロキシ生成関数に提供することによって、前記プロキシ生成関数が前記生成オプションを利用して、前記生成アプリケーションがユーザとの対話なしで前記文書を生成することを支援できるようにすることをさらに含む、請求項１記載の文書生成方法。
【請求項３】
前記文書を該文書のローカルファイルデータとともに受信することと、
一時ファイルデータを使用して前記文書を格納することと、
前記ローカルファイルデータを前記プロキシ生成関数に提供することによって、前記プロキシ生成関数が前記生成アプリケーションを支援できるようにすることを含み、該生成アプリケーションへの支援により、前記文書を、前記一時ファイルデータではなく前記ローカルファイルデータを使用して生成する、請求項１記載の文書生成方法。
【請求項４】
前記呼び出しを向け直すことは、
前記生成アプリケーションのインポートアドレス表において、前記生成関数にアクセスするために使用されるアドレスを識別することと、
前記インポートアドレス表において識別された前記アドレスを、前記プロキシ文書生成関数のアクセスに使用されるアドレスで置き換えること、とを含む請求項１記載の文書生成方法。
【請求項５】
生成オプションとともに、生成する文書を受信すること、
前記生成オプションをプロキシ生成関数に提供すること、
生成アプリケーションを開始すること、
前記生成アプリケーションから文書生成関数への呼び出しを、前記プロキシ文書生成関数へと向け直すこと、
前記生成アプリケーションに前記文書を生成するように命令すること、とを含み、
前記プロキシ生成モジュールは、前記生成オプションを利用して、前記生成アプリケーションがユーザとの対話なしで前記文書を生成することを支援する文書生成方法。
【請求項６】
前記呼び出しを向け直すことは、
前記生成アプリケーションのインポートアドレス表において、前記生成関数にアクセスするために使用されるアドレスを識別することと、
前記インポートアドレス表において識別された前記アドレスを、前記プロキシ文書生成関数のアクセスに使用されるアドレスで置き換えること、とを含む請求項５記載の文書生成方法。
【請求項７】
生成する文書を該文書のローカルファイルデータとともに受信すること、
一時ファイルデータを使用して前記文書を格納すること、
前記ローカルファイルデータをプロキシ生成関数に提供すること、
生成アプリケーションを開始すること、
前記生成アプリケーションから文書生成関数への呼び出しを、前記プロキシ文書生成関数へと向け直すこと、
前記生成アプリケーションに前記格納された文書を生成するように命令すること、
とを含み、
前記プロキシ生成関数は、前記生成アプリケーションを支援して、前記一時ファイルデータではなく前記ローカルファイルデータを使用して前記文書を生成させる、文書生成方法。
【請求項８】
前記呼び出しを向け直すことは、
前記生成アプリケーションのインポートアドレス表において、前記生成関数にアクセスするために使用されるアドレスを識別すること、
前記インポートアドレス表において識別された前記アドレスを、前記プロキシ文書生成関数のアクセスに使用されるアドレスで置き換えること、とを含む請求項７記載の文書生成方法。
【請求項９】
生成する文書を該文書のローカルファイルデータおよび生成オプションとともに受信すること、
一時ファイルデータを使用して前記文書を格納すること、
前記ローカルファイルデータおよび生成オプションをプロキシ生成関数に提供すること、
生成アプリケーションを開始すること、
前記生成アプリケーションから文書生成関数への呼び出しを、前記プロキシ文書生成関数へと向け直すこと、
前記生成アプリケーションに前記格納された前記文書を生成するように命令すること、
とを含み、
前記プロキシ生成関数は、前記生成アプリケーションが前記一時ファイルデータではなく前記ローカルファイルデータを使用して前記文書を生成することを支援し、前記プロキシ生成モジュールは前記生成オプションを利用して、前記生成アプリケーションがユーザとの対話なしで前記文書を生成することを支援する、文書生成方法。
【請求項１０】
前記呼び出しを向け直すことは、
前記生成アプリケーションのインポートアドレス表において、前記生成関数にアクセスするために使用されるアドレスを識別すること、
前記インポートアドレス表において識別された前記アドレスを、前記プロキシ文書生成関数のアクセスに使用されるアドレスで置き換えること、とを含む請求項９記載の文書生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、包括的に文書生成に関し、特に、ユーザとの対話を必要としない文書生成に関する。
【背景技術】
【０００２】
ハンドヘルドコンピューティング装置および無線ネットワーキング性能の普及に伴い、サーバ上で動作するプログラムが文書をプリントすることが望ましい場合が多くなった。電子メール、ウェブブラウザ、またはモバイル機器上で利用可能な他の通信手段を使用して、ユーザはプリントする文書をサーバに電子的に送信する。サーバは、一時ファイル名を使用して文書を保存する。モバイル装置では、文書は、ユーザによって作成された、したがってユーザにより既知のファイル名、たとえば「c:￥mydocuments￥file.doc」を使用して保存される可能性が高かった。
【０００３】
しかし、サーバ上のファイル管理プログラムは、一時的に文書を格納するとき、新しく、通常はあまりユーザフレンドリではないファイル名を生成する。この場合のファイル名は、たとえば「c:￥winnt￥temp￥973498−98398843−09679−67267￥t839348abcb5.temp」である。これを行うにあたり、ファイル管理ソフトウェアは、プリント後に一時ファイルを消去することができ、それによってサーバがそれ以降必要のないファイルでごちゃごちゃになることが回避される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
文書をプリントするために、ワードプロセッサまたはインターネットブラウザなどのサーバ上のプログラムが、一時的に格納されたファイルを開き、プリントコマンドを発行する。しかし、文書をプリントすることが可能なプログラムでは通常、ユーザとの対話で様々な生成オプションを選択する必要がある。生成オプションはたとえば、コピー部数、両面プリントが求められるか否か、また多くの場合、キーボード上でEnterを押下するか、またはマウスを使用してプリントコマンドボタンをクリックするかである。サーバがユーザから地理的に離れている場合、ユーザはプリントを指示するために必要な対話を提供することができない。その代わりに、ユーザはサーバ上で動作している他のプログラムに頼って、求められる対話を供給しなければならない。
【０００５】
さらに、文書をプリントするとき、文書のファイル名を、プリントを担当するプログラムによって付加されるヘッダまたはフッタに含めることが望ましい場合が多い。これによりユーザまたは別の団体が、文書の電子版を後で見つけられるようになる。プリント中の文書がサーバ上に一時的に格納されたものである場合、プリントを担当するプログラムは、文書をその一時ファイル名でしか分からない。このプログラムは、ユーザが文書を識別するファイル名についての情報を有さない。したがって文書をプリントするとき、一時ファイル名が、ヘッダまたはフッタに配置される。この情報は、ユーザにとって、たとえあるとしてもほとんど役に立たない。またこれにより、サーバについての情報が曝され、この情報が、ハッカーがシステムのセキュリティを侵害するために使用される可能性がある。
【課題を解決するための手段】
【０００６】
したがって、ユーザとの対話を必要とすることなく文書を生成できる、サーバ等のコンピューティング装置に、文書を送ることが必要であり、ここから本発明が生まれた。各種実施形態では、生成する文書が受信され、文書の生成を担当する生成アプリケーションが開始され、生成アプリケーションから文書生成関数への呼び出しが、プロキシ文書生成関数へと向け直され、次に、生成アプリケーションが文書を生成するように命令される。
【発明を実施するための最良の形態】
【０００７】
最初に
最近のオペレーティングシステムは、モジュール手法を採用して各種アプリケーションをサポートしている。たとえば、所与のオペレーティングシステムは、一連のプログラムモジュールに常駐する複数の関数を利用できるようにすることができる。しかし、所与のアプリケーションが必要とするのはこれら関数のうちの２〜３の関数のみでありうる。したがって、オペレーティングシステムによって提供される関数すべてのプログラムをコンピュータのメモリにロードする必要はなく、ロードする必要があるのはアプリケーションによって使用される関数のプログラムのみである。
【０００８】
Microsoft  Windows（登録商標）等のオペレーティングシステムは、１つまたは複数の生成モジュールを供給する。これらモジュールは、ユーザが、プリンタまたはファックスソフトウェア等の文書生成装置またはサービスを選択できるようにする関数、ならびにコピー部数、両面プリント、および肖像画または風景画ページレイアウト等の生成オプションを選択するための関数を提供する。オペレーティングシステムによって供給される生成モジュールは、人間による入力に応答して文書を生成するインタフェースを提供するように設計される。以下は、Microsoft  Windows（登録商標）によって供給される文書生成関数の一部のリストである。OpenPrinter()、GetPrinter()、SetPrinter()、GetPrinterData()、SetPrinterData()、PrinterProperties()、StartDocPrinter()、EndDocPrinter()、DocumentProperties()、GetDeviceCaps()、DeviceCapabilities()、CreateDC()、CreateIC()。
【０００９】
電子文書が遠隔サーバに送信される場合は、人間との対話が不可能なことが多い。サーバ上で動作しているソフトウェアは、文書を生成するプログラムインタフェースを必要とする。また、文書のファイル名をプリントされた文書のヘッダまたはフッタに含めることが望ましい場合が多い。ユーザの装置では、文書はユーザに既知の、おそらくユーザによって作成されたローカルファイル名を有する。文書は、サーバに送信されると、サーバのファイル管理プログラムによって生成される一時ファイル名を使用してサーバに一時的に格納される。プリントを担当するプログラムが文書を識別するのは、この一時ファイル名によってである。不都合なことに、一時ファイル名は、ユーザにとってたとえあるとしてもほとんど役に立たないものである。
【００１０】
したがって、本発明の各種実施形態は、文書の一時ファイル名ではなくローカルファイル名を識別して利用することができる、プリントプログラムインタフェースを提供するように動作するものと期待される。以下の説明では、コンピュータアプリケーションを実行するためにとられるステップについて図１〜図８を参照して述べる。本発明の各種実施形態を実施することができる環境については図９〜図１１を参照して述べる。次に、本発明の一実施形態を実施するためにとられるステップについて図１２および図１３を参照して述べる。最後に、本発明の特定の一実施態様の一例について図１４〜図２１を参照して述べる。
【００１１】
アプリケーションの実行
図１は、コンピュータ１０のいくつかの物理的な構成要素および論理的な構成要素を示すブロック図である。コンピュータ１０は、ＣＰＵ１２（中央演算処理装置）、格納メモリ１４、および動作メモリ１６を備える。ＣＰＵ１２は概して、コンピュータプログラムを実行することができる任意のプロセッサを表す。格納メモリ１４は概して、プログラムおよび他のデータを、ＣＰＵ１２によって使用されていないときに格納しておくように設計される任意のメモリを表す。通常、格納メモリ１４は、コンピュータ１０の電源がオフのときにその内容を保持することが可能な不揮発性メモリである。例としては、ハードディスクドライブ、フラッシュメモリ、およびフロッピーディスクが挙げられる。動作メモリ１６は概して、ＣＰＵ１２によって使用されているときのプログラムおよびデータを含むように設計された任意のメモリを表す。通常、動作メモリ１６はコンピュータ１２の電源がオフのときに内容を失う揮発性メモリである。動作メモリ１６の一例はＲＡＭ（ランダムアクセスメモリ）である。
【００１２】
図１は、オペレーティングシステム１８のみが動作メモリ１６にロードされた状態のコンピュータ１０を示す。格納メモリ１４はアプリケーション２０、一連の生成モジュール２２を含むオペレーティングシステムファイル２１、およびデータ格納部２３を含む。アプリケーション２０は概して、任意のコンピュータプログラムアプリケーションを表す。生成モジュール２２は概して、アプリケーション２０によって必要とされたり、されなかったりする文書生成関数を提供する任意のプログラムを表す。データ格納部２３は、アプリケーション２０によって作成または使用される電子ファイルを格納する論理メモリ領域を表す。たとえば、アプリケーション２０がワードプロセッサである場合、データ格納部２３は文書処理文書を含む。
【００１３】
Microsoft  Windows（登録商標）等のオペレーティングシステムを使用してアプリケーション２０を実行するためにとられるステップについて、図２を参照して述べる。図３〜図８は、図２のステップが実行されたときの動作メモリの内容を示すのに役立つ。ユーザまたは他のプログラムからの指示により、オペレーティングシステム１８は格納メモリ１４にアクセスし、アプリケーション２０を見つけ、アプリケーション２０を動作メモリ１６にロードする（ステップ２４）。オペレーティングシステム１８は、アプリケーション２０が必要とする文書生成関数を供給するプログラムを含む生成モジュール２２を識別する（ステップ２６）。アプリケーション２０はＩＡＴ（インポートアドレス表）を含む。ＩＡＴは、ステップ２６において識別されたモジュールのメモリアドレスを識別するためにアプリケーション２０によって使用されるアレイである。ＩＡＴは、機能可能な場合、一意のメモリアドレスを、識別された各モジュールの各関数を識別する名称に関連付ける。しかし、識別されたモジュールがまだ動作メモリ１６にロードされていない場合、ＩＡＴはこの時点では、識別されたモジュールの名称およびそれぞれによって提供される、関連する関数を含む。ＩＡＴはアドレスを含んでいない。
【００１４】
オペレーティングシステム１８は、ステップ２６において識別された生成モジュール２２を動作メモリ１６にロードする（ステップ３０）。オペレーティングシステム１８は、ロードされたモジュール２２それぞれによって提供される文書生成関数のメモリアドレスを識別し、ＩＡＴを更新して機能可能にする（ステップ３２）。オペレーティングシステム１８はここでアプリケーション２０を実行する。アプリケーション２０が、ロードされた生成モジュール２２によって供給される文書生成関数を呼び出すと、その関数のアドレスをＩＡＴにおいて識別することができる。
【００１５】
図３および図４は、オペレーティングシステム１８がアプリケーション２０をロードしたステップ２６後の動作メモリ１６の内容を示す。動作メモリ１６はアプリケーション２０を含み、ＩＡＴ３４が付随する。ＩＡＴ３４は一連のエントリ３６を含む。各エントリは、アプリケーション２０が動作する必要がある各モジュール２２を参照し、各文書生成関数を参照する。文書生成関数は、これらモジュール２２によって提供されるアプリケーション２０によって呼び出される。各エントリ３６は、モジュールフィールド３８、関数フィールド４０、およびアドレスフィールド４２を含む。モジュール２２を参照する各エントリ３６については、モジュールフィールド３８はそのモジュール２２を識別する名称を含む。文書生成関数を識別する各エントリ３６については、関数フィールド４０は文書生成関数を識別する名称を含む。図３の例では、アプリケーション２０はモジュール１およびモジュール２を動作させる必要があった。
【００１６】
アドレスフィールド４２はこの時点では空であるが、アプリケーション２０による動作が必要なモジュール２２が、ロードされていないからである。モジュール１内で、アプリケーション２０は「service＿select」とラベルされる関数を呼び出す。モジュール２内で、アプリケーション２０は「copy＿number」および「page＿layout」とラベルされる関数を呼び出す。モジュール１およびモジュール２は他の関数を提供してもよいが、ＩＡＴ３４に列挙された関数のみがアプリケーション２０によって必要とされる。
【００１７】
図５は、ステップ３０後の動作メモリ１６の内容を示す。ステップ３０では、オペレーティングシステム１８が、アプリケーション２０で必要なモジュール２２を、動作メモリ１６にロードする。必要なモジュールは、モジュール１・２２Ａおよびモジュール２・２２Ｂとラベルされ、それぞれ図６および図７により詳細に示される。モジュール１・２２Ａは、service＿select４４、print＿to＿file４６、およびservice＿search４８とラベルされた関数を提供するプログラムを含む。オペレーティングシステム１８は、これら関数それぞれのプログラムを一連のメモリアドレス５０〜５４の内の１つにロードした。モジュール２・２２Ｂは、copy＿number５６、page＿layout５８、およびduplex６０とラベルされた関数を提供するプログラムを含む。オペレーティングシステム１８は、これら関数それぞれのプログラムを、一連のメモリアドレス６２〜６６のうちの１つにロードした。
【００１８】
図８は、オペレーティングシステム１８がＩＡＴ３４を更新する、ステップ３２後のＩＡＴ３４の内容を示す。ＩＡＴ３４はここでは、service＿select、copy＿number、およびpage＿layout関数のアドレスを含む。アプリケーション２０がこれら文書生成関数のいずれか１つを呼び出すときは常に、アプリケーション２０またはオペレーティングシステム１８はＩＡＴ３４にアクセスしてその関数のアドレスを識別することができる。
【００１９】
環境
図９は、本発明の各種実施形態を組み込むことができるコンピューティング環境６８の概略図である。環境６８はユーザ装置７０、サーバ７２、および生成装置７４を含む。ユーザ装置７０および生成装置７４は、リンク７６を介してサーバ７２に接続される。リンク７６は概して、通信リンク、赤外線リンク、無線周波数リンク、または電気通信を提供する他の任意のコネクタまたはシステムを介する任意のケーブル接続、無線接続、または遠隔接続を表す。リンク７６はイントラネット、インターネット、またはこれら両方の組み合わせを表すことができる。装置７０〜７４は、任意のポイントのリンク７６および装置間に論理的に確立されるしかるべき通信パスに接続することができる。
【００２０】
生成装置７４は概して、文書を生成可能なハードウェアおよびプログラムの任意の組み合わせを表す。文書生成の例としては、プリント、ファクシミリ送信、および電子メールを介しての配信が挙げられる。ユーザ装置７０は概して、リンク７６を介して電子文書をサーバ７２に送信可能なハードウェアおよび／またはプログラムの任意の組み合わせを表す。図９の例では、ユーザ装置７０はＰＤＡ（個人情報端末）である。しかし、ユーザ装置７０は任意の種類のコンピューティング装置であることができる。サーバ７２は概して、生成装置７４にユーザ装置７０から受信した文書を生成するように指示することが可能なハードウェアおよびプログラムの任意の組み合わせを表す。図１０はユーザ装置７０およびサーバ７２を２つの異なる装置として示しているが、それぞれによって提供される関数（後述）は、１つの装置に組み込んでも、または３つ以上の装置に組み込んでもよい。
【００２１】
図１０はサーバ７２のハードウェアおよびプログラム要素を示す。サーバ７２は、ＣＰＵ７８、格納メモリ８０、および動作メモリ８２を含む。格納メモリ８０は、生成アプリケーション８４、生成モジュール９４を含むオペレーティングシステムファイル８６、データ格納部８８、および遠隔生成サービス９０を含む。ＣＰＵ７８は概して、生成アプリケーション８４および遠隔生成サービス９０を実行することが可能な任意のプロセッサを表す。動作メモリ８２は、生成アプリケーション８４および遠隔生成サービス９０をロードすることが可能な任意のプログラムを概して表すオペレーティングシステム９２を含む。オペレーティングシステム９２は、生成モジュール９４を動作メモリ８２にロードして、ＣＰＵ７８が生成アプリケーション８４を実行できるようにすることも担当する。
【００２２】
生成アプリケーション８４は概して、サーバ７２上に文書生成関数を供給する任意のプログラムを表す。例としては、ワードプロセッサ、表計算アプリケーション、ウェブブラウザ、画像編集アプリケーション、および文書を生成可能な他のアプリケーションが挙げられる。オペレーティングシステムファイル８６は概して、アプリケーションの実行をサポートすることが可能な任意のプログラムを表す。通常、所与のオペレーティングシステムファイルは、そのファイルによって提供されるプログラム関数に頼るアプリケーションもロードされるまで、動作メモリ８２にロードされない。このようなプログラムの例として、各生成モジュール９４は概して、文書生成関数、すなわち生成アプリケーション８４によって使用される関数を供給する任意のプログラムを表す。１つまたは複数の生成モジュール９４は、文書の生成に求められる選択をユーザが行えるようにするインタフェースを提供することを担当する。このような選択としは、プリンタ等の生成装置の識別、用紙のサイズおよび向き、ならびに色および解像度設定が挙げられるがこれらに限定されない。
【００２３】
データ格納部８８は、生成アプリケーション８４によって使用される電子ファイルを格納する論理メモリ領域を表す。遠隔生成アプリケーション９０は、以下に述べるようにして、ユーザ装置７０（図９）から受信した文書を生成するために生成アプリケーション８４が動作メモリ８２にロードされた後で、生成アプリケーション８４を変更することが可能な任意のプログラムを表す。ＣＰＵ７８が生成アプリケーション８４を実行するとき、関数に呼び出しがかかる。この関数は、１つまたは複数の生成モジュール９４によって提供されるものである。しかし、遠隔生成アプリケーション９０に起因する変更により、これら呼び出しは、プロキシ生成モジュールによって提供されるプロキシ生成関数へと向け直される。所与のプロキシ生成関数が、たとえば、置き換えられた文書生成関数がユーザインタフェースに提供したであろうプログラムインタフェースを提供することができる。
【００２４】
図１１は、遠隔生成サービス９０の論理的なプログラム要素を示すブロック図である。遠隔生成サービス９０は、フッキングアプリケーション９６、フッキングモジュール９８、およびプロキシ生成モジュール１００を含む。フッキングアプリケーション９６は、生成アプリケーション８４を変更することが可能な任意のプログラムを表す。生成アプリケーション８４を変更により、１つまたは複数の生成モジュール９４によって提供される１つまたは複数の関数への、生成アプリケーション８４からの呼び出しが、プロキシ生成モジュール１００によって提供される文書生成関数へと向け直される。フッキングモジュール９８は概して、フッキングアプリケーション９６が必要とする関数を提供する任意のプログラムを表す。フッキングモジュール９８は単一のモジュールとして示されているが、代わりに、これが提供する関数を２つ以上のモジュールで提供してもよい。プロキシ生成モジュール１００は概して、１つまたは複数の生成モジュール９４によって提供される関数を置き換えることが可能な任意のプログラムを表す。
【００２５】
フッキングモジュール９８は、アプリケーションローダ１０２、モジュールローダ１０４、イベント検出器１０６、実行コントローラ１０８、ＩＡＴ改訂器１１０、およびファイルデータマネージャ１１２を含む。アプリケーションローダ１０２は、生成アプリケーション８４を動作メモリ８２中のそれぞれのメモリ空間にロードすること、それからデバッグモードで生成アプリケーション８４を開始することが可能な任意のプログラムを表す。
【００２６】
メモリ空間は、動作メモリ８２の一部であり、特定のアプリケーションおよび動作する必要がありうる任意のモジュールのために確保される。動作メモリ８２にロードされた各アプリケーションは、それぞれ一意のメモリ空間にロードされる。一意のメモリ空間を各アプリケーションに確保することにより、あるアプリケーションの動作が別のアプリケーションの動作を妨害しないようにするのに役立つ。デバッグモードでは、生成アプリケーション８４は通常通り動作するが、例外としてフッキングアプリケーション９６が生成アプリケーション８４の特定の態様に対する制御を保持する。たとえば、フッキングアプリケーション９６は、特定のイベントを検出すると、生成アプリケーション８４の実行を一時停止・再開することができる。フッキングアプリケーション９６はまた、生成アプリケーション８４のメモリ空間にプログラムをロードする能力も保持する。
【００２７】
モジュールローダ１０４は概して、プロキシ生成モジュール１００を生成アプリケーション８４のメモリ空間にロードすることが可能な、任意のプログラムを表す。イベント検出器１０６は、生成アプリケーション８４の実行中に１つまたは複数のイベントを検出することが可能な任意のプログラムを表す。このようなイベントの一例としては、生成アプリケーション８４が動作メモリ８２にロードされ、そのＩＡＴに生成モジュール９４によって提供される関数のアドレスが入ったときが挙げられる。実行コントローラ１０８は概して、生成アプリケーション８４の実行を一時停止・再開するように動作可能な任意のプログラムを表す。ＩＡＴ改訂器１１０は、生成アプリケーション８４のインポートアドレス表において、生成モジュール９４によって提供される文書生成関数を識別することが可能な任意のプログラムを表す。識別された関数のうちの１つまたは複数について、ＩＡＴ改訂器１１０は、その文書生成関数にアクセスするために使用されるアドレスを、プロキシ生成モジュール１００によって提供されるプロキシ文書生成関数にアクセスするために使用されるアドレスで置き換えることも担当する。
【００２８】
ファイルデータマネージャ１１２は概して、文書のファイルデータをプロキシ生成モジュール１００に提供することが可能な任意のプログラムを表す。ファイルデータは、パスを含む場合もあり、または含まない場合もある文書ファイル名等の情報を含む。たとえば、ファイル名c:￥mydocuments￥paper.docを挙げると、このファイル名のパスはc:￥mydocumentsである。
【００２９】
動作
文書の生成を開始するために、ユーザ装置７０上で動作しているプログラムによってとられるステップについて図１２を参照して述べる。まずユーザが、ユーザ装置７０上で動作しているプログラムに、生成するローカル文書を、そのローカルファイルデータとともに取得するように指示する（ステップ１１４）。文書のローカルファイルデータは、ユーザ装置７０上の文書のファイル名およびパスを表す。文書の生成オプションが選択される（ステップ１１６）。ローカル文書、そのファイルデータ、および選択された生成オプションが、生成のためにサーバ７２に送信される（ステップ１１８）。
【００３０】
これより、ステップ１１４において取得された文書を生成するためにとられるステップについて図１３を参照して述べる。オペレーティングシステム９２がフッキングアプリケーション９６を、動作メモリ８２中のそれぞれのメモリ空間に（フッキングモジュール９８とともに）ロードする（ステップ１２２）。ＣＰＵ７８によって実行された後、フッキングアプリケーション９６は、文書を、図１２のステップ１１８においてユーザ装置７０から受信したその文書のローカルファイルデータおよび生成オプションとともに受信する。フッキングアプリケーション９６は、一時ファイル名を生成し、これを使用して文書をサーバ７２のデータ格納部８８に格納する（ステップ１２４）。
【００３１】
フッキングアプリケーション９６は、デバッグモードで生成アプリケーション８４を開始する（ステップ１２６）。次に、オペレーティングシステム９２が、動作メモリ８２中のメモリ空間を、生成アプリケーション８４のために確保し、生成アプリケーション８４をそのメモリ空間にロードする（ステップ１２８）。オペレーティングシステム９２は生成モジュール９４をロードして、生成アプリケーション８４によって呼び出された文書生成関数を提供する。オペレーティングシステム９２は、生成アプリケーション８４によって使用される文書生成関数のアドレスを含むように、生成アプリケーション８４のＩＡＴを更新する。フッキングアプリケーション９６は、生成アプリケーション８４がロードされ、そのＩＡＴが更新されたときを検出し（ステップ１３０）、次に、生成アプリケーション８４の実行を一時停止する（ステップ１３２）。
【００３２】
生成アプリケーション８４が一時停止時に、プロキシ生成モジュール１００が、生成アプリケーション８４のメモリ空間にロードされる（ステップ１３４）。これを行うために、フッキングアプリケーション９６が、メモリ空間内のメモリチャンクを、生成アプリケーション８４のために確保する。フッキングアプリケーション９６は「ブートストラップコード」を確保されたメモリチャンクにロードする。ブートストラップコードは、プロキシ生成モジュール１００を生成アプリケーション８４のメモリ空間にロードし、生成アプリケーション８４によって使用される１つまたは複数の関数を呼び出すことが可能な任意のプログラムを表す。フッキングアプリケーション９６は、生成アプリケーション８４の実行中に初期に呼び出された関数のアドレスが、ブートストラップコードを指すアドレスで置き換えるよう、生成アプリケーション８４のＩＡＴを変更する。生成アプリケーション８４は、開始されると、ＩＡＴ中のアドレスを使用して関数を呼び出す。アドレスは変更されているため、呼び出しはブートストラップコードにルーティングされる。ブートストラップコードは、プロキシ生成モジュール１００を生成アプリケーション８４のメモリ空間にロードする。生成アプリケーション８４の期待される振る舞いを保つために、ブートストラップコードは、仮にＩＡＴがブートストラップコードのアドレスを含むように変更されていなかったならば生成アプリケーション８４が呼び出したであろう関数を呼び出す。
【００３３】
フッキングアプリケーション９６は、生成アプリケーション８４のＩＡＴを改訂する。これを行うにあたり、フッキングアプリケーション９６は、ロードされた１つまたは複数の生成モジュール９４によって提供される１つまたは複数の文書生成関数を指すアドレスを識別する。次にフッキングアプリケーション９６は、識別されたアドレスを、プロキシ生成モジュール１００によって提供される１つまたは複数のプロキシ文書生成関数を指すアドレスで置き換える（ステップ１３８）。フッキングアプリケーション９６は、プロキシ生成モジュール１００に、ステップ１２４において受信した生成オプションおよびローカルファイルデータを提供する（ステップ１４０）。次に、フッキングアプリケーション９６は、ステップ１２４において格納された文書を生成する命令で、生成アプリケーション８４の実行を再開する（ステップ１４２）。
【００３４】
生成アプリケーション８４は、特に意識せずにプロキシ生成モジュール１００を利用して文書を生成する（ステップ１４４）。プロキシ生成モジュール１００は、一時ファイルデータを使用して文書をロードし、ステップ１２４において受信した生成オプションに従って文書を生成するように生成装置７４に指示する。これを行うにあたり、プロキシ生成モジュール１００は、必要であれば、サーバ７２に文書を格納するために使用される一時ファイルデータではなく、ステップ１２４において受信したローカルファイルデータを使用する。有利なことに、これ以上のユーザとの対話は必要なく、生成オプションが、文書のファイルデータを使用することを命令する場合は、ローカルファイルデータが代わりに使用される。
【００３５】
図１２および図１３のフローチャートは特定の順序の実行を示しているが、実行の順序は図示のものと異なってもよい。たとえば、図示の順序から２つ以上のブロックの実行の順序を混ぜてよい。また、図１２または図１３において連続して示されている２つ以上のブロックを同時に、または一部同時に実行することもできる。このような変形はすべて本発明の範囲内にある。
【００３６】
例
図１４〜図２１は、図１３のステップ実行時の動作メモリ８２の内容を示すのに役立つ例を提供する。図１４は、ステップ１２２後の動作メモリ８２を示す。ステップ１２２後、フッキングアプリケーションのメモリ空間１４８はフッキングアプリケーション９６、フッキングモジュール９８、およびフッキングアプリケーション９６のＩＡＴ１５０を含む。
【００３７】
図１５はステップ１２８後の動作メモリ８２を示す。生成アプリケーション８４をロードする前に、オペレーティングシステム９２はメモリ空間１５２を確保した。ステップ１２８において、オペレーティングシステム９２は、フッキングアプリケーション９６の指示で、生成アプリケーション８４をそのＩＡＴ１４５とともにメモリ空間１５２にロードした。オペレーティングシステム９２は生成モジュール９４を識別してロードした。図１５および図１６の例において、生成モジュール９４はモジュール１・９４Ａ、モジュール２・９４Ｂ、およびモジュール３・９４Ｃとして列挙される。任意の数のモジュールをステップ１２８においてロードすることができる。しかしこの例では、生成アプリケーション８４はモジュール１、モジュール２、およびモジュール３・９４Ａ〜９４Ｃによって提供される文書生成関数のみを使用する。図１６を参照すると、モジュール１・９４Ａは２つの文書生成関数：アドレス１においてアクセス可能な関数１．１およびアドレス２においてアクセス可能な関数１．２のプログラムを提供する。モジュール２・９４Ｂは、１つの文書生成関数：アドレス３においてアクセス可能な関数２．１のプログラムを含む。モジュール３  ９４Ｃは、３つの文書生成関数：アドレス４においてアクセス可能な関数３．１、アドレス５においてアクセス可能な関数３．２、およびアドレス６においてアクセス可能な関数３．３のプログラムを含む。
【００３８】
図１７は、ＩＡＴ１５４がオペレーティングシステム９２によって更新される前の生成アプリケーション８４のＩＡＴ１５４を示す。図１８は更新後のＩＡＴ１５４を示す。１５４Ａと参照されるＩＡＴ１５４の更新前のものは、生成アプリケーション８４によって使用される各生成モジュール９４のエントリ１５６を含み、生成モジュール９４によって提供され、生成アプリケーション８４によって呼び出される各文書生成関数のエントリ１５８を含む。しかし、ＩＡＴ１５４Ａはエントリ１５８にアドレスを含まない。１５４Ｂと参照されるＩＡＴ１５４の更新後のものは、生成アプリケーション８４によって呼び出される関数のアドレスを含んでいる。
【００３９】
図１９は、プロキシ生成モジュール１００が、生成アプリケーションのメモリ空間１５２にロードされたステップ１３４後の動作メモリ８２を示す。図２０は、プロキシ生成モジュール１００をより詳細に示す。この例では、プロキシ生成モジュール１００が２つのプロキシ文書生成関数：アドレス７においてアクセスされるプロキシ関数１．２およびアドレス８においてアクセスされるプロキシ関数３．２を提供する。
【００４０】
図２１は、ステップ１３８においてフッキングアプリケーション９６によって改訂された後のＩＡＴ１５４を示す。１５４Ｃと参照されるＩＡＴ１５４の改訂後のものでは、関数１．２のアドレスがアドレス７：プロキシ関数１．２にアクセスするアドレスで置き換えられている。関数３．２のアドレスはアドレス８：プロキシ関数３．２にアクセスするアドレスで置き換えられている。
【００４１】
ステップ１４２の後、生成アプリケーション８４の実行が再開され、生成アプリケーション８４が文書生成関数１．２および３．２への呼び出しを行うと、これら呼び出しは、しかるべくプロキシ関数１．２および３．２に転送される。しかし、生成アプリケーション８４のプログラムは変更されていないため、転送は生成アプリケーション８４にトランスペアレントである。図１４〜図２２に示す例では、２つのみの関数呼び出しが転送された（プロキシ関数１．２および３．２に転送された関数１．２および３．２）が、任意の数の関数呼び出しを転送することができることに留意することが重要である。
【００４２】
本発明は、コンピュータ／プロセッサベースのシステム、またはコンピュータ可読媒体からロジックをフェッチまたは取得して、そこに含まれる命令を実行することが可能な他のシステム等の命令実行システムによって使用される、またはこれと併せて使用される任意のコンピュータ可読媒体に組み込むことができる。「コンピュータ可読媒体」は、命令実行システムによって使用される、またはこれと併せて使用されるプログラムを包含、格納、または保持することができる任意の媒体であることができる。コンピュータ可読媒体は、たとえば、電子媒体、磁気媒体、光学媒体、電磁媒体、赤外線媒体、または半導体媒体等の多くの物理的な媒体のいずれか１つを含むことができる。適したコンピュータ可読媒体のより具体的な例としては、フロッピーディスクまたはハードドライブ等のポータブル磁気コンピュータディスク、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ、またはポータブルコンパクトディスクが挙げられるがこれらに限定されない。
【００４３】
本発明を上記例示的な実施形態を参照して図示し説明した。しかし、添付の特許請求項に規定される本発明の精神および範囲から逸脱することなく、他の形態、詳細、および実施形態を作成しうることを理解されたい。
【図面の簡単な説明】
【００４４】
【図１】コンピュータシステムの物理的・論理的な構成要素を示すブロック図。
【図２】アクションモジュールを動作メモリにロードするためにとられるステップを示すフローチャート。
【図３】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図４】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図５】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図６】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図７】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図８】図２のステップを実行時の図１の動作メモリの内容を示すブロック図。
【図９】本発明の各種実施形態を組み込み可能なコンピューティング環境の概略図。
【図１０】本発明の一実施形態による、サーバ上に含まれるハードウェアおよびプログラムを示すブロック図。
【図１１】遠隔生成サービスの論理的なプログラム要素を示すブロック図。
【図１２】本発明の一実施形態による、生成する文書をサーバに送信するためにとられるステップを示す流れ図。
【図１３】本発明の一実施形態による、文書生成にとられるステップを示す流れ図。
【図１４】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１５】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１６】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１７】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１８】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１９】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図２０】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図２１】図１３に記したステップが本発明の一実施形態により実行されるときの、図１０の動作メモリの内容を示すブロック図。
【図１】
2004280804.tif 000003
【図２】
2004280804.tif 000004
【図３】
2004280804.tif 000005
【図４】
2004280804.tif 000006
【図５】
2004280804.tif 000007
【図６】
2004280804.tif 000008
【図７】
2004280804.tif 000009
【図８】
2004280804.tif 000010
【図９】
2004280804.tif 000011
【図１０】
2004280804.tif 000012
【図１１】
2004280804.tif 000013
【図１２】
2004280804.tif 000014
【図１３】
2004280804.tif 000015
【図１４】
2004280804.tif 000016
【図１５】
2004280804.tif 000017
【図１６】
2004280804.tif 000018
【図１７】
2004280804.tif 000019
【図１８】
2004280804.tif 000020
【図１９】
2004280804.tif 000021
【図２０】
2004280804.tif 000022
【図２１】
2004280804.tif 000023