(57)【要約】  移動通信装置のスキャニングサブシステムを効率的に更新するためのシステム、方法及びコンピュータプログラム製品が提供される。最初に受信されるのは、移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分である。更に、更新の第１部分の受信に加えて、更新の追加の部分が受信される。次いで、更新がスキャニングサブシステムにインストールされる。
2007525059.tif 000002
【特許請求の範囲】
【請求項１】
移動通信装置のスキャニングサブシステムを効率的に更新する方法であって、
移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分を受信するステップと、
前記更新の前記第１部分の受信に加えて、前記更新の付加的な部分を受信するステップと、
前記スキャニングサブシステムで前記更新をインストールするステップと、
を含む方法。
【請求項２】
前記更新の完全性を判断するステップを更に含む、請求項１に記載の方法。
【請求項３】
前記更新の完全性が検証された場合に前記スキャニングサブシステムに前記更新をインストールする、請求項２に記載の方法。
【請求項４】
前記更新の完全性は、シグネチャーを使用して判断される、請求項２に記載の方法。
【請求項５】
前記シグネチャーは前記更新の前記部分の一つと共に受信される、請求項４に記載の方法。
【請求項６】
前記シグネチャーは、前記更新の前記部分のそれぞれを用いて生成される別のシグネチャーに対して比較される、請求項４に記載の方法。
【請求項７】
前記シグネチャーは、前記更新の前記付加的な部分の最後の一つのみと共に受信される、請求項４に記載の方法。
【請求項８】
前記更新の前記部分のサイズが最小にされる、請求項１に記載の方法。
【請求項９】
前記更新の前記部分が圧縮される、請求項１に記載の方法。
【請求項１０】
前記第１部分が空であるかどうか判断するステップを更に備える、請求項１に記載の方法。
【請求項１１】
前記更新の前記付加的な部分は、前記第１部分が空であることが判断されたかどうかに基づいて条件付で受信される、請求項１０に記載の方法。
【請求項１２】
前記スキャニングサブシステムを使用してスキャニングを休止するステップを更に含む、請求項１に記載の方法。
【請求項１３】
前記スキャニングサブシステムに前記更新がインストールされ次第、前記スキャニングサブシステムを使用してスキャニングを再開するステップを更に含む、請求項１２に記載の方法。
【請求項１４】
前記更新は、前記移動通信装置により要求される、請求項１に記載の方法。
【請求項１５】
前記更新は、前記移動通信装置により要求データ構造体を使用して要求される、請求項１４に記載の方法。
【請求項１６】
前記要求データ構造体は、ユニホームリソースロケータ（ＵＲＬ）変数、移動通信識別子変数、アプリケーションプログラムインターフェイスバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び部分番号変数より成るグループから選択された変数を含む、請求項１５に記載の方法。
【請求項１７】
前記要求データ構造体は、ユニホームリソースロケータ（ＵＲＬ）変数、移動通信識別子変数、アプリケーションプログラムインターフェイスバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び部分番号変数を含むグループから選択された変数を含む、請求項１５に記載の方法。
【請求項１８】
前記更新の各部分はヘッダを含む、請求項１に記載の方法。
【請求項１９】
前記ヘッダは、前記更新の関連部分の識別子を指示する、請求項１８に記載の方法。
【請求項２０】
前記ヘッダは、前記更新の関連部分の長さを指示する、請求項１８に記載の方法。
【請求項２１】
前記移動通信装置はセルラー電話を含む、請求項１に記載の方法。
【請求項２２】
移動通信装置のスキャニングサブシステムを効率的に更新するためのコンピュータプログラム製品であって、
移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分を受信するためのコンピュータコードと、
前記更新の前記第１部分の受信に加えて前記更新の付加的な部分を受信するためのコンピュータコードと、
前記スキャニングサブシステムに前記更新をインストールするためのコンピュータコードと、
を備えるコンピュータプログラム製品。
【請求項２３】
移動通信装置のスキャニングサブシステムを効率的に更新するシステムであって、
バックエンドサーバーと、
前記バックエンドサーバーとワイヤレス通信して、当該バックエンドサーバから、移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分を受信し、前記更新の第１部分の受信に加えて前記更新の付加的な部分を受信し、更に、前記スキャニングサブシステムに前記更新をインストールするための移動通信装置と、
を備えるシステム。
【請求項２４】
バックエンドサーバーを使用して移動通信装置のスキャニングサブシステムを効率的に更新する方法であって、
移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分を送信するステップと、
前記更新の第１部分に加えて前記更新の付加的な部分を送信するステップと、
を含み、
前記更新が、前記移動通信装置の前記スキャニングサブシステムにインストールされる、方法。
【請求項２５】
移動通信装置のスキャニングサブシステムを更新する方法であって、
移動通信装置のスキャニングサブシステムを更新するように適応される更新の要求を送信するステップと、
前記要求に応答して前記更新の第１部分を受信するステップと、
前記第１部分が空であるかどうか判断するステップと、
前記第１部分が空でないと判断された場合には、前記更新の前記第１部分の受信に加えて前記更新の付加的な部分を受信するステップと、
前記更新に関連したシグネチャーを検証するステップと、
前記スキャニングサブシステムを使用してスキャニングを休止するステップと、
前記シグネチャーが検証された場合には、前記スキャニングサブシステムに前記更新をインストールするステップと、
前記スキャニングサブシステムに前記更新がインストールされ次第、前記スキャニングサブシステムを使用してスキャニングを再開するステップと、
を含む方法。
【発明の詳細な説明】
【発明の分野】
【０００１】
本発明は、移動通信装置のセキュリティに関するものであり、より詳細には、マルウェアに対して移動通信装置をスキャンすることに関するものである。
【発明の背景】
【０００２】
過去１０年間に、移動セルラー電話の数及び使用量が急速に増大した。より最近になって、移動電話及びパーソナルデジタルアシスタント（ＰＤＡ）の機能を兼ね備えたワイヤレス装置が導入されている。この分野は、新規なセルラーテレコミュニケーション規格（即ち、ＧＰＲＳ、ＵＭＴＳ及びＷＡＰ）がワイヤレスインターフェイスを通じた高速データ転送を可能にするので、近い将来、著しい成長を遂げることが予想される。
【０００３】
このようなプラットホームは、今日のパーソナルコンピュータやワークステーションが受けるのとほぼ同様に、いわゆる「マルウェア」、例えば、ウイルス、トロイの木馬、及びワーム（以下、集合的に「ウイルス」と称される）、並びに他の不要且つ有害なコンテンツからの攻撃を受けることが予想される。既に、移動電話に対する多数のウイルスが確認されている。
【０００４】
ウイルスの攻撃を阻止するためには、デスクトップ環境で配備されているのとほぼ同様に、移動プラットホームにウイルス対策ソフトウェアを配備しなければならない。現在、多種のデスクトップウイルス対策アプリケーションを入手することが可能である。これらアプリケーションの大半は、疑わしいファイルに所定のウイルスシグネチャーが存在するか否かをサーチする基本的スキャニングエンジンに依存する。これらのシグネチャーはデータベースに保持されており、データベースは、直近に特定されたウイルスを反映するように常時更新されねばならない。
【０００５】
通常、ユーザは、インターネットを介して、受信したｅ−メールから、或いはＣＤＲＯＭ又はフロッピーディスクから、交換データベースを頻繁にダウンロードする。また、ユーザは、新種のウイルスが検出されたときに必要となる新規なウイルス検出技術を利用するために、ソフトウェアエンジンを頻繁に更新することも求められる。
【０００６】
移動ワイヤレスプラットホームは、ソフトウェア開発者（ウイルス対策ソフトウェアの開発者を含む）に対して一連の問題を提起する。これらの中の主たるものは、移動プラットホームのメモリ及び処理能力に限界があり、且つそれらが所有する入力／出力能力にも限界がある（即ち、ＣＤＲＯＭもフロッピードライブもないし、広帯域巾の固定線ネットワークやインターネットに接続もできない）ことである。不都合なことに、この欠点は、移動通信装置のいかなる更新も困難にする。
【発明の開示】
【０００７】
移動通信装置のスキャニングサブシステムを効率的に更新するためのシステム、方法及びコンピュータプログラム製品が提供される。最初に受信されるのは、移動通信装置のスキャニングサブシステムを更新するようになっている更新の第１部分である。更に、更新の第１部分の受信に加えて、更新の追加の部分が受信される。次いで、更新がスキャニングサブシステムにインストールされる。
【０００８】
一実施形態では、更新の完全性を判断することができる。従って、更新の完全性が検証されたかどうかに基づいてスキャニングサブシステムで更新を条件付きでインストールすることができる。
【０００９】
オプションとして、更新の完全性は、シグネチャーを使用して決定することができる。このようなシグネチャーは、更新の１つの部分（即ち、最後の部分）と共に受信することができる。次いで、シグネチャーは、更新の各部分を使用して発生された別のシグネチャーに対して比較することができる。
【００１０】
移動通信フレームワークに固有の限定された帯域巾に適応するために、更新の部分のサイズを最小にすることができる。更に、更新の部分を圧縮することもできる。
【００１１】
使用に際し、第１部分が空であるかどうか判断することができる。従って、第１部分が空であることが判断されたかどうかに基づいて、更新の付加的な部分を条件付で受信することができる。この場合も、このような特徴は、移動通信フレームワークに固有の限定された帯域巾に適応する点で有益である。
【００１２】
オプションとして、更新を受信した際にスキャニングサブシステムを使用するスキャニングを休止することができる。更に、スキャニングサブシステムに更新がインストールされ次第、スキャニングを再開することができる。
【００１３】
更に別の実施形態において、更新の各部分のフォーマットは、移動通信フレームワークに固有の限定された帯域巾に適応するように設計することができる。例えば、更新の各部分は、ヘッダを含んでもよい。このようなヘッダは、更新の関連部分の識別子、更新の関連部分の長さ、等を指示することができる。
【００１４】
更に別の実施形態では、移動通信装置により更新を要求することができる。このような更新は、要求データ構造を使用して移動通信装置により要求することができる。任意であるが、このようなデータ構造は、ユニホームリソースロケータ（ＵＲＬ）変数、移動通信識別子変数、アプリケーションプログラムインターフェイスバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び／又は部分番号変数のような変数を含むことができる。
【詳細な説明】
【００１５】
図１は、一実施形態に係る移動通信フレームワーク１００を示す。図示されたように、移動通信装置１０２と、ワイヤレスネットワークを介して通信可能なバックエンドサーバー１０４とが含まれている。ここでの説明においては、移動通信装置１０２は、セルラー電話、ワイヤレスパーソナルデジタルアシスタント（ＰＤＡ）、ワイヤレスハンドヘルドコンピュータ、ワイヤレスポータブルコンピュータ、或いはワイヤレスネットワークを介して通信できる他の移動装置を含んでいるが、これらに限定されない。
【００１６】
一実施形態では、移動通信装置１０２は、スキャニングサブシステム１０５を備えていてもよい。このスキャニングサブシステム１０５は、移動通信装置１０２に記憶されるか又はそれに伝送されるデータをスキャニングすることができるサブシステムを含んでもよい。当然ながら、このようなスキャニングは、オンアクセススキャニング、オンデマンドスキャニング、又は他の任意の形式のスキャニングを指すことができる。更に、スキャニングは、上記データに代表されるコンテンツ（即ち、テキスト、ピクチャー、等）、マルウェアに対する一般的なセキュリティ型のスキャニング、等を含んでいてもよい。
【００１７】
続けて図１を参照する。移動通信装置１０２は、上記スキャニング機能を含む種々の機能を管理するようになっている複数のグラフィックユーザインターフェイス１０８を表示できるディスプレイ１０６を更に備えることができる。
【００１８】
使用に際して、移動通信装置１０２のディスプレイ１０６が用いられて、ネットワーク（即ち、インターネット、等）上のデータが表示される。オペレーション１を参照されたい。ここに示す使用の過程では、ユーザは、バックエンドサーバー１０４を介してネットワークからデータを検索するためのリンク又はアンカーを選択することにより、ディスプレイ１０６を使用してネットワーク上の種々のデータをブラウズすることができる。オペレーション２を参照されたい。次いで、オペレーション３において、検索されたデータをスキャンするためにスキャニングサブシステム１０５がコールされる。
【００１９】
ここに示す例では、スキャニングサブシステム１０５は、オペレーション４において、検索されたデータに関連してマルウェアを見つけたと示されている。この時点で、ユーザには、検索を停止するか、及び／又は特定されたマルウェアに関わらずデータを使用／アクセスするか、の選択肢がディスプレイ１０６を介して提供される。オペレーション５に注目されたい。オペレーション５における判断に基づいて、ユーザは、オペレーション６に示すように、「攻撃」の対象になるかもしれないし、ならないかもしれない。
【００２０】
図２は、別の実施形態に係る移動通信フレームワーク２００を示す。この移動通信フレームワーク２００は、移動通信装置が検索されたデータにおけるマルウェアの特定に反応する方法を除くと、図１の移動通信フレームワーク１００と同様である。
【００２１】
より詳細には、ユーザには、オペレーション５において一つの選択肢が与えられるだけである。即ち、ユーザは、マルウェアを組み込んでいることが発見されたデータに関連するダイアログを閉じることしかできない。オペレーション６に注意されたい。
【００２２】
図３は、一実施形態に係る移動通信装置に関連するアーキテクチャー３００を示す。このアーキテクチャー３００は、図１及び図２の移動通信装置に組み込むことが可能である。当然ながら、アーキテクチャー３００は、所望のいかなる状況においても実施されうるものである。
【００２３】
図示されたように、このアーキテクチャー３００は、複数の移動アプリケーションプログラム３０２を含むことができる。この説明においては、移動アプリケーションプログラム３０２は、種々のタスクを実行するために移動通信装置にインストールされる、いかなるアプリケーションプログラム、ソフトウェア、等を含むことができる。更に、このようなアプリケーションプログラム３０２は、ユーザの要求によって、ファームウェア、ハードウェア、等で実施されてもよいことに注意されたい。
【００２４】
別の実施形態では、アプリケーションプログラム３０２は、タスクが電子メールの管理を含むようなメールアプリケーションプログラムを含んでいるが、これに限定されない。更に、アプリケーションプログラムは、タスクがネットワークのブラウジングを含むようなブラウザアプリケーションプログラムを含んでいてもよい。更に、アプリケーションプログラムは、タスクが複数の電話番号の管理を含むような電話帳アプリケーションプログラムを含んでいてもよい。オプションとして、アプリケーションプログラムは、タスクがメッセージの伝送を含むようなメッセージアプリケーションプログラムを含んでいてもよい。いかなる形式のアプリケーションプログラムが含まれてもよいことに注意されたい。例えば、Ｊａｖａ（登録商標）アプリケーションプログラム又はそれと同様のものが含まれてもよい。
【００２５】
続けて図３を参照する。スキャニングサブシステム３０４は、このスキャニングサブシステム３０４に関連した第１アプリケーションプログラムインターフェイス（ＡＰＩ）３０６及び第１ライブラリー３０８を介してアプリケーションプログラム３０２と通信状態にある。第１アプリケーションプログラムインターフェイス３０６及び第１ライブラリー３０８に関連した任意の例示的細部に関するより多くの情報を、図４から図１２を参照して以下に詳細に説明する。
【００２６】
オプションとして、アプリケーションプログラム３０２は、スキャニングサブシステム３０４によるスキャニングを容易にするためにスキャニングサブシステム３０４へ情報を伝送することができる。このような情報は、スキャンされるべきデータの形式、及びこのようなスキャニングに関連したタイミングに関するものであってもよい。このようにスキャニングサブシステム３０４がアプリケーションプログラム３０２と情報を交換する方法に関するより多くの例示的情報を、図１３〜図１５を参照して説明する。
【００２７】
図３に示すように、第１ライブラリー３０８は、更新マネージャー３１０、コンフィギュレーションマネージャー３１２、及びシグネチャーデータベース３１４を含むことができる。使用に際して、更新マネージャー３１０は、シグネチャーデータベース３１４をスキャニングのための最新のシグネチャーで更新するプロセスを管理することができる。一実施形態では、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されていてもよい。このような更新プロセスに関するより多くの例示的情報を、図１６及び図１７を参照して説明する。
【００２８】
図３のアーキテクチャー３００のコンポーネントとして、オペレーティングシステム３１６が更に設けられており、当該オペレーティングシステム３１６は、移動通信装置にインストールされており、且つアプリケーションプログラム３０２を実行するようになっている。一実施形態では、スキャニングサブシステム３０４は、プラットホームとは独立したものでよく、従って、いかなる形式のオペレーティングシステム／移動通信装置との組合せにおいても実施することができる。
【００２９】
この特徴に適応するために、第２のアプリケーションプログラムインターフェイス３１８と、第２のライブラリー３２０は、種々の機能、例えば、システム／ライブラリー初期化３２２、エラーファンクション３３６、メモリ割り当て３３４、入力／出力（Ｉ／Ｏ）３２８、データ認証３３２、同期３３０、ハイパーテキスト転送プロトコル３２６、装置情報３２４、デバッグ３３８、及び他のファンクション（即ち共有メモリ、システム時間、等）をサポートし得るものになっている。一実施形態では、第２のアプリケーションプログラムインターフェイス３１８は、スキャニングサブシステム３０４と同様に、プラットホームとは独立したものであってもよい。第２のアプリケーションプログラムインターフェイス３１８及び第２のライブラリー３２０に関連した任意の例示的細部に関するより多くの情報を、添付資料Ａを参照して以下に詳細に説明する。
【００３０】
図４は、一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。一例においては、このシステム４００は、図３のアーキテクチャー３００のアプリケーションプログラム、スキャニングサブシステム、及びオペレーティングシステムの状況で実施されうる。しかしながら、このシステム４００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【００３１】
図示されたように、ワイヤレスネットワークを介して通信することのできる移動通信装置にインストールされたオペレーティングシステム４０２が含まれている。更に、移動通信装置にインストールされ、且つタスクを実行するためにオペレーティングシステム４０２を使用して実行されるアプリケーションプログラム４０４も設けられている。
【００３２】
スキャニングサブシステム４０６は、アプリケーションプログラムインターフェイス及びそれに関連したライブラリーを介してアプリケーションプログラム４０４と通信する状態を維持する（例えば、図３の第１アプリケーションプログラムインターフェイス３０６及び第１ライブラリー３０８を参照されたい）。このようなスキャニングサブシステム４０６は、アプリケーションプログラム４０４により実行されるタスクと共働してセキュリティ又はコンテンツ分析機能にアクセスするようになっている。一実施形態では、セキュリティ又はコンテンツ分析は、セキュリティ分析を含んでいてもよい。別の実施形態では、セキュリティ又はコンテンツ分析は、コンテンツ分析を含んでいてもよい。更に、セキュリティ又はコンテンツ分析は、オンデマンドウイルススキャニング及び／又はオンアクセスウイルススキャニングを含んでいてもよい。
【００３３】
使用に際して、セキュリティ又はコンテンツ分析機能が、アプリケーションプログラム４０４によって実行されるタスクに関連したアプリケーションデータに適用されてもよい。ここでの説明においては、アプリケーションデータは、入力され、処理され、出力され、又は、アプリケーションプログラム４０４によって行われるタスクの実行に別の方法で関連する、いかなるデータを含んでいてもよい。
【００３４】
アプリケーションプログラムインターフェイスを介してスキャニングサブシステム４０６及びアプリケーションプログラム４０４を密に結合することによって、要求されるオーバーヘッド及びコードの冗長性が僅かになる。このようなアプリケーションプログラムインターフェイス及びそれに関連したライブラリーに関するより多くの例示的情報について、以降の図面を参照して以下に詳細に説明する。
【００３５】
図５は、図４のシステム４００のアプリケーションサーバーの実施形態に係るものであって、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク５００を示す。このフレームワーク５００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【００３６】
図示されたように、スキャニングサブシステムは、アプリケーションプログラムインターフェイス５０６及びそれに関連したプロトコル（即ち、ｕＩｔｒｏｎメッセージングシステム）を介してアプリケーションプログラム５０４と通信するスキャニングプログラム５０２を含むことができる。以下で詳細に述べるように、アプリケーションプログラムインターフェイス５０６は、スキャニングプログラム５０２に関連した第１コンポーネント５０８と、アプリケーションプログラム５０４に関連した第２コンポーネント５１０とを含むことができる。
【００３７】
アプリケーションプログラムインターフェイス５０６が設けられた種々のコール５１２は、オープンコール、データコール、及びクローズコールを含んでいてもよい。使用に際して、スキャニングプログラム５０２は、アプリケーションプログラム５０４によって実行されるタスクに関連したアプリケーションデータ５１６をスキャンすることができる。
【００３８】
図６は、図４のシステム４００の再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワーク６００を示す。このフレームワーク６００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【００３９】
図示されたように、スキャニングサブシステムは、再入可能ライブラリー６０２を含むことができる。使用に際して、スキャニングサブシステムの再入可能ライブラリー６０２は、アプリケーションプログラム６０４に実行時にリンクされてもよい。従って、アプリケーションプログラムインターフェイス６０６は、複数のアプリケーションプログラム６０４のそれぞれに設けられてもよい。
【００４０】
図５における先のフレームワーク５００と同様に、アプリケーションプログラムインターフェイス６０６は、オープンコール、データコール及びクローズコールを含む種々のコール６１２を含むことができる。使用に際して、再入可能ライブラリー６０２を用いて、アプリケーションプログラム６０４によって実行されるタスクに関連したアプリケーションデータ６１６をスキャンしてもよい。
【００４１】
図７は、図４のシステム４００の状況で実施されたオンデマンドスキャニングシステム７００を示す。このシステム７００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【００４２】
オンデマンドスキャニングは、不当なコンテンツ又はコードを除去するために、記憶されたアプリケーションデータ７０２をスキャニングする。ユーザは、ユーザインターフェイス７０３を介してオンデマンドスキャニングを開始することができる。更に、各アプリケーションプログラム７０４は、スキャニングサブシステム７０６をコールして、それに対応するメモリに記憶されたオブジェクトのスキャニングを行うことができる。
【００４３】
一方、オンアクセススキャニングは、アプリケーションプログラム７０４がアプリケーションデータ７０２を処理又はレンダリングする前に、不当なコード又はコンテンツを特定する。オンアクセススキャニングは、スキャニングサブシステム７０６が不当なアプリケーションデータ７０２を検出するまでユーザにとって透過的である。
【００４４】
図８は、一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス８００の種々のコンポーネントの階層を示す図である。オプションとして、このアプリケーションプログラムインターフェイス８００は、図４のシステム４００の状況において実施されてもよい。しかしながら、このアプリケーションプログラムインターフェイス８００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【００４５】
図８に示すように、アプリケーションプログラムインターフェイスファンクションは、MDoScanOpen()８０２、MDoScanClose()８０４、MDoScanVersion()８０６、及びMDoScanData()８０８を備えている。MDoScanOpen()８０２及びMDoScanClose()８０４は、スキャニングサブシステムオブジェクトのインスタンスを生成／オープン及びクローズするのに使用される。MDoScanVersion()８０６は、スキャニングサブシステム及びシグネチャーパターンデータのバージョン情報を提供する。MDoScanData()８０８は、コンテンツ／データスキャニング及びレポーティングを実行する。また、スキャナのアプリケーションプログラムインターフェイスにはMDoScanUpdate()８１０も含まれており、当該MDoScanUpdate()８１０は、マルウェアシグネチャーデータベース及び検出ロジックの更新を提供する。このMDoScanUpdate()８１０が更新アプリケーションによりコールされると、ライブラリーは、リモートバックエンドサーバー（例えば、図１を参照されたい）に接続して、最新のファイル（即ち、ｍｄｏ．ｓｄｂ、ｍｄｏ．ｐｄ）をダウンロードする。
【００４６】
スキャニングサブシステムのコンフィギュレーションは、MDoConfigOpen()８１２、MDoConfigClose()８１４、MDoConfigGet()８１６及びMDoConfigSet()８１８を使用して行われる。このアプリケーションプログラムインターフェイス８００をコールすることによりコンフィギュレーションハンドルが得られると、コールしたアプリケーションプログラムは、ゲット及びセットコンフィギュレーションＡＰＩを使用して、スキャニングサブシステムコンフィギュレーション変数を問合せて、それをセットする。
【００４７】
また、このアプリケーションプログラムインターフェイス８００には、MDoGetLastError()８２０という名前のエラー検索ファンクションも含まれている。このファンクションは、発生した最新のエラーに関する情報を検索するのに使用される。
【００４８】
ＡＰＩコールのいずれかがなされる前に、好ましくはブート時に、ライブラリー環境設定を初期化するために、MDoSystemInit()８２５がコールされる。ライブラリーは、コンフィギュレーション設定、不当なコード検出ロジック（即ち、ｍｄｏ．ｐｄ）及びシグネチャーデータベース（即ち、ｍｄｏ．ａｄｂ）、並びに内部変数（即ち、同期オブジェクト等）を固定の持続的記憶位置に保持する。
【００４９】
MDoLibraryOpen()８３０及びMDoLibraryClose()８４０は、ライブラリーを初期化するのに使用される。アプリケーションプログラムは、他のＡＰＩコールがなされる前にMDoLibraryOpen()８３０をコールし、また、アプリケーションプログラムは、終了の前にMDoLibraryClose()８４０をコールすることができる。
【００５０】
アプリケーションプログラムインターフェイス８００は、種々のアプリケーションプログラムインターフェイスコンポーネントを使用して、システム環境初期化、バージョン状態情報の検索、スキャニングサブシステムの更新、スキャニング、スキャニングサブシステムのコンフィギュレーション等の種々の機能をサポートすることができる。アプリケーションプログラムインターフェイス８００に関する上記機能について、より多くの情報を以下に説明する。
【００５１】
システム初期化
MDoSystemInit()８２５は、特定の持続記憶位置に保持されるデータに対する検証及び環境初期化を実行する。不当なコード／コンテンツのシグネチャーパターンデータベース（即ち、ｍｄｏ．ｓｄｂ）、検出ロジック（即ち、ｍｄｏ．ｐｄ）、コンフィギュレーション設定、及び同期オブジェクトは、これらの位置に記憶することができる。MDoSystemInit()８２５は、いずれかのＡＰＩファンクションが実行される前に一度コールすることができる（即ち、ブート時に）。
【００５２】
テーブル＃１は、MDoSystemInit()８２５に関する例示的情報を示す。
テーブル＃１
MDoSystemInit
説明
システム環境情報を検証し、初期化する。
プロトタイプ
Int MDoSystemInit(void);
パラメータ
なし
リターン値
成功の場合は０、他の場合は非ゼロのエラーコード。
【００５３】
ライブラリーインターフェイスＡＰＩ
アプリケーションプログラムインターフェイス８００は、複数のライブラリーインターフェイスコンポーネントを含む。ＡＰＩインターフェイスのインスタンス化は、MDoLibraryOpen()８３０を使用して行うことができる。このファンクションを使用して得られるインスタンス化されたライブラリーインターフェイスハンドルは、その後のＡＰＩコールに使用することができる。アプリケーションプログラムが終了する前に、ハンドルをリリースするためにMDoLibraryClose()８４０をコールすることができる。図９は、MDoLibraryOpen()８３０及びMDoLibraryClose()８４０を使用する例示的ライブラリーインターフェイス初期化９００を示す。
【００５４】
テーブル＃２は、MDoLibraryOpen()８３０に関する例示的情報を示す。
テーブル＃２
MDoLibraryOpen
説明
ＡＰＩライブラリーインターフェイスハンドルを初期化して、返す。
プロトタイプ
MDOLIB_HANDLEMDoLibraryOpen(void);
パラメータ
なし
リターン値
成功の場合はライブラリーインターフェイスハンドル、他の場合はINVALID_MDOLIB_HANDLE。
MDoLibraryClose()も参照のこと
【００５５】
テーブル＃３は、MDoLibraryClose()８４０に関する例示的情報を示す。
テーブル＃３
MDoLibraryClose
説明
MDoLibraryClose()ファンクションにより返されたＡＰＩライブラリーハンドルに関連したシステムリソースをリリースする。
プロトタイプ
Void MDoLibraryClose(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
リターン値
なし
MDoLibraryOpen()も参照のこと
【００５６】
エラー検索
MDoLibraryOpen()８３０によるライブラリーの初期化及びインスタンス化が成功すると、MDoGetLastError()８２０は、発生した最新のエラーに関する情報をアプリケーションプログラムに提供する。
【００５７】
テーブル＃４は、MDoGetLastError()８２０に関する例示的情報を示す。
テーブル＃４
MDoGetLastError
説明
指定のライブラリーインスタンスの最新のエラー値を返す。
プロトタイプ
MDoErroeCode MDoGetLastError(MDOLIB_HANDLEhLib);
パラメータ
hLib
[入力] MDoLibraryOpenによって返されるハンドル化されたライブラリー
【００５８】
リターン値
MDoErrorCodeのデータ形式は、コンポーネント及びエラーコードの両方を含む３２ビット非符号化整数として定義することができる。多くの場合、検索されたエラー情報は、プラットホームの抽象ＡＰＩレイヤーにおいてセットされている。そのため、ここで与えられるMDoErrorCodeフォーマットは、抽象レイヤーＡＰＩ（添付資料Ａを参照）により定義されたAlErrorCodeフォーマットと同様である。図１０は、一実施形態に基づくMDoErrorCodeの例示的フォーマット１０００を示す。
【００５９】
テーブル＃５は、MDoGetLastError()８２０に関する例示的情報を示す。
テーブル＃５
MDoErrorCodeは、次のように定義される。
Typedef unsigned long MDoErrorCode;
MDoLibraryOpen()、MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【００６０】
例示的コンピュータコード＃１は、MDoGetLastError()８２０へのコールと共にサンプルのライブラリーコーリングシーケンスを示す。
コンピュータコード＃１
【表１】
2007525059.tif 000003
【００６１】
エラーコード
MDoGetLastError()８２０によりレポートされるエラーコードは、２つの部分、即ちコンポーネントコード及びエラーコードを含んでいる。更なる情報については、添付資料Ａを参照されたい。テーブル＃６は、例示的エラーコード及びそれに対応するコンポーネントコードをリストしたものである。また、MDoGetLastError()８２０は、抽象ライブラリーレイヤーにおいてセットされたエラーコードも返す。次のリストは、例示のためのものに過ぎず、何らこれに限定するものではないことに注意されたい。
テーブル＃６
【表２】
2007525059.tif 000004
【００６２】
スキャニングサブシステムＡＰＩ
アプリケーションプログラムインターフェイス８００は、複数のスキャニングサブシステムコンポーネントを含んでいる。スキャニングサブシステムＡＰＩコンポーネントは、データ／コンテンツスキャニング及びシグネチャー更新サービスを提供する。MDoScanOpen()８０２、MDoScanClose()８０４、MDoScanVersion()８０６、MDoScanUpdate()８１０、及びMDoScanData()８０８が含まれている。MDoScanOpen()８０２は、スキャニングサブシステムオブジェクトのインスタンス化に使用される。MDoScanVersion()８０６は、スキャニングサブシステム及びシグネチャーデータベースのバージョン情報を提供する。MDoScanUpdate()８１０は、シグネチャーデータベースの更新を実行する。MDoScanData()８０８は、不当なコード／コンテンツデータのスキャニングを実行する。図１１は、一実施形態に係るスキャニングサブシステムＡＰＩコールシーケンス１１００を示す。
【００６３】
MDoScanOpen
テーブル＃７は、MDoScanOpen()８０２に関する例示的情報を示す。
テーブル＃７
説明
スキャニングサブシステムのインスタンスのハンドルを返す。
プロトタイプ
MDOSCAN_HANDLEMDoScanOpen(MDOLIB_HANDLE hLib);
パラメータ
[入力] MDoLibraryOpen()ファンクションを使用して得たライブラリーのハンドル。
リターン値
成功の場合にはスキャニングサブシステムインスタンスハンドル。
エラーの場合にはINVALID_MDOSCAN_HANDLEが返される。
MDoScanClose()、MDoScanData()、MDoScanUpdate()、MDoLibraryOpen()も参照のこと。
【００６４】
MDoScanClose
テーブル＃８は、MDoScanClose()８０４に関する例示的情報を示す。
テーブル＃８
説明
スキャニングサブシステムのインスタンス及びそれに関連したシステムリソースをリリースする。
プロトタイプ
VoidMDoScanClose(MDOSCAN_HANDLE hScan);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得られたスキャニングサブシステムのハンドル。
リターン値
なし
MDoScanOpen()、MDoScanData()、MDoScanUpdate()も参照のこと。
【００６５】
MDoScanVersion
テーブル＃９は、MDoScanVersion()８０６に関する例示的情報を示す。
テーブル＃９
説明
MDoScanOpen()ファンクションにより返されたスキャナハンドルからスキャニングサブシステム及びシグネチャーのバージョン情報を得る。
プロトタイプ
Int MDoScanVersion(MDOSCAN_HANDLEhScan,
SVerInfo*      pVersion);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを使用して得たスキャニングサブシステムのハンドル。
pVersion
[出力] バージョン情報を含む構造体へのポインタ。
リターン値
成功の場合には０、他の場合には−１。
MDoScanOpen()、MDoScanClose()、MDoScanData()、MDoScanUpdate()も参照のこと
【００６６】
例示的コンピュータコード＃２は、サンプルのバージョン情報の構造体を示す。
コンピュータコード＃２
【表３】
2007525059.tif 000005
【００６７】
MDoScanVersion()８０６によりレポートされた移動通信装置特定ストリングは、AlDevGetInfoにより返される装置特定ストリングを使用してセットされる（添付資料Ａを参照）。
【００６８】
MDoScanData
テーブル＃１０は、MDoScanData()８０８に関する例示的情報を示す。
テーブル＃１０
説明
MDoScanDataは、特定のデータ形式をスキャンするためにアプリケーションプログラムからコールされる。コールするアプリケーションプログラムは、スキャナアクション、スキャンターゲット、データ形式、データにアクセスするためのＩ／Ｏファンクションのセット、及び任意のコールバックファンクションを指定する。データスキャニングの結果は、データ構造体を提供した呼出元に返される。MDoScanDataは、再入可能である。
プロトタイプ
Int MDoScanData(MDOSCAN_HANDLEhScan,
SScanParam*     pParam,
SScanResult*     pResult);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションへのコールで得られたスキャニングサブシステムのハンドル。
pParam
[入力] データスキャンパラメータを含む構造体へのポインタ。
pResult
[出力] データスキャン結果を含む構造体へのポインタ。
リターン値
成功の場合は０、他の場合には−１、エラーコードがセットされる。
MDoScanOpen()、MDoScanClose()、MDoScanVersion()、MDoScanUpdate()も参照のこと。
【００６９】
MDoScanUpdate
テーブル＃１１は、MDoScanUpdate()８１０に関する例示的情報を示す。
テーブル＃１１
説明
不当なコード／コンテンツシグネチャーパターンデータベース（ｍｄｏ．ｓｄｂ）及び検出ロジック（ｍｄｏ．ｐｄ）の更新を実行する。
プロトタイプ
Int MDoScanUpdate(MDOSCAN_HANDLEhScan,
SUpdateParam*   pParam);
パラメータ
hScan
[入力] MDoScanOpen()ファンクションを用いて得たスキャンハンドル。
pParam.
[入力] 更新のキャンセル／中止及び進捗状態更新用のコールバックファンクションのポインタを含む更新パラメータの構造体へのポインタ。
【００７０】
例示的コンピュータコード＃３は、更新パラメータ構造体の定義の態様を示す。
コンピュータコード＃３
【表４】
2007525059.tif 000006
【００７１】
コールするアプリケーションプログラムは、ファンクションをコールするときに、ファンクションポインタと、ファンクションへ渡されるべきデータとをセットすることができる。テーブル＃１２に注目されたい。
テーブル＃１２
【表５】
2007525059.tif 000007
【００７２】
コンフィギュレーションＡＰＩ
アプリケーションプログラムインターフェイス８００は、複数のコンフィギュレーションコンポーネントを含む。スキャニングサブシステムの設定を検索し指定するのに使用されるファンクションのセットが含まれている。これらファンクションの１つの目標は、アプリケーションプログラム及びスキャニングサブシステムに集中化ランタイムコンフィギュレーションアクセスを提供することである。コンフィギュレーションデータは、不揮発性持続データ記憶装置（即ち、フラッシュメモリ、等）に記憶される。
【００７３】
図１２は、一実施形態に基づく一つの例示的コンフィギュレーションＡＰＩコールシーケンス１２００を示す。図示されたように、MDoConfigOpen()８３０は、コンフィギュレーションの検索及び指定ファンクションへ渡すべきハンドルを返す。MDoConfigClose()８１４は、MDoConfigOpen()８１２により返されるコンフィギュレーションハンドルをリリースし、クローズするのに使用される。MDoConfigSet()８１８は、指定のコンフィギュレーション変数を指定値にセットし、MDoConfigGet()８１６は、指定の変数に対するコンフィギュレーション値を返す。MDoConfSet()８１８により変更されたコンフィギュレーション変数（１つ又は複数）の設定は、MDoConfigClose()８１４がコールされるまで永久記憶装置へ必ずしもセーブされない。アプリケーションプログラムは、コンフィギュレーションオープン、ゲット又はセットをコールし、そして変数値にアクセスするか及び／又はそれを指定するときにはクローズファンクションに直ちに従うことができる。
【００７４】
アプリケーションプログラムインターフェイス８００のコンフィギュレーションコンポーネントを使用して指定／検索されたコンフィギュレーション変数及び値は、nullキャラクタ（‘＼０’）で終わる８ビットキャラクタストリングで表すことができる。テーブル＃１３は、使用可能なコンフィギュレーション変数をリストしたものである。
テーブル＃１３
【表６】
2007525059.tif 000008
【００７５】
MDoConfigOpen
テーブル＃１４は、MDoConfigOpen()８１２に関する例示的情報を示す。
テーブル＃１４
説明
その後のコールに渡すべきコンフィギュレーション設定に対するハンドルをMDoConfigGet()及びMDoConfigSet()へ返す。
プロトタイプ
MDOCONFIG_HANDLEMDoConfigOpen(MDOLIB_HANDLE hLib);
パラメータ
hLib
[入力] MDoLibraryOpen()ファンクションを用いて得たライブラリーのハンドル。
リターン値
成功の場合はコンフィギュレーションハンドル。エラーの場合はINVALID_MDOCONFIG_HANDLEが返される。
MDoConfigClose()、MDoConfigSet()、MDoCongigGet()も参照のこと。
【００７６】
MDoConfigClose
テーブル＃１５は、MDoConfigClose()８１４に関する例示的情報を示す。
テーブル＃１５
説明
システムリソースをリリースし、コンフィギュレーションハンドルをクローズする。
プロトタイプ
VoidMDoConfigClose(MDOCONFIG_HANDLE hConfig);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
リターン値
なし
MDoConfigOpen()、MDoConfigSet()、MDoConfigGet()も参照のこと
【００７７】
MDoConfigGet
テーブル＃１６は、MDoConfigGet()８１６に関する例示的情報を示す。
テーブル＃１６
説明
指定のコンフィギュレーション変数に対するコンフィギュレーション値を得る。
プロトタイプ
Int MDoConfigGet(MDCONFIG_HANDLEhConfig
charconst*     pszName,
char*           pBuffer,
unsignedint     uSize);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されたコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pBuffer
[出力] 指定された変数に対するNULL終端のコンフィギュレーション設定／値。
uSize
[入力] pBufferのバイトでの長さ.
リターン値
成功の場合は０、他の場合は−１
MDoConfigOpen()、MDoConfigClose()、MDoConfigSet()も参照のこと。
【００７８】
MDoConfigSet
テーブル＃１７は、MDoConfigSet()８１８に関する例示的情報を示す。
テーブル＃１７
説明
指定のコンフィギュレーション変数の値をセットする。
プロトタイプ
Int MDoConfigGet(MDOCONFIG_HANDLEhConfig
charconst*     pszName
charconst*     pszValue);
パラメータ
hConfig
[入力] MDoConfigOpen()ファンクションによって返されるコンフィギュレーションハンドル。
pszName
[入力] NULL終端のコンフィギュレーション変数の名前。
pszValue
[入力] 指定された変数に対するNULL終端の新たなコンフィギュレーション設定／値
リターン値
成功の場合は０、他の場合は−１。
MDoConfigOpen()、MDoConfigClose()、MDoConfigGet()も参照のこと。
【００７９】
スキャニングを容易にするためのアプリケーションプログラム／スキャニングサブシステム通信
先に述べたように、アプリケーションプログラムは、スキャニングサブシステムによるスキャニングを容易にするためにスキャニングサブシステムへ情報を伝送することができる。この伝送は、上述したＡＰＩを介することによって容易にされている。上述の情報は、スキャニングされるべきデータの形式と、このようなスキャニングに関連したタイミングとに関係しうるものである。上述のＡＰＩがこれを達成する方法に関する説明を次に行う。
【００８０】
スキャンパラメータ（SScanParam）
コールするアプリケーションプログラムは、SScanParam構造体を使用してスキャニングパラメータをスキャニングサブシステムに供給することができる。スキャンパラメータに含まれる情報は、スキャニングサブシステムに、１）スキャニングサブシステムアクション形式（即ち、iAction）、２）スキャンデータ形式（即ち、スキャニングされるべきアプリケーションデータの形式、iDataType）、３）スキャンターゲットに対するデータポインタ（即ち、pPrivate）、４）バイトでのデータサイズを検索するためのファンクション（即ち、pfGetSize）、５）スキャンデータをリサイズするためのファンクション（即ち、pfSetSize）、６）スキャンデータのブロックを検索するためにスキャニングサブシステムにより使用されるファンクション（即ち、pfRead）、６）スキャンデータを書き込むのに使用されるファンクション（即ち、pfWrite）、及び７）スキャニングサブシステム状態／進行レポートのためのコールバックファンクション（即ち、pfCallBack）を提供する。
【００８１】
例示的コンピュータコード＃４は、データスキャンパラメータ構造体を示す。
コンピュータコード＃４
【表７】
2007525059.tif 000009
【００８２】
スキャンアクション（iAction）
スキャンアクションは、供給されたアプリケーションデータに関して実行されるべきスキャニングの形式を指定する。テーブル＃１８は、種々の例示的スキャンアクションを示す。
テーブル＃１８
【表８】
2007525059.tif 000010
【００８３】
スキャンデータ形式（iDataType）
コールするアプリケーションプログラムは、この変数を使用してアプリケーションデータ形式及びフォーマットをスキャニングサブシステムに通知してもよい。
【００８４】
図１３は、アプリケーションプログラムがＡＰＩを介してスキャニングサブシステムへ通信することのできる種々の例示的なアプリケーションデータ形式１３００を示す。ｕｒｌストリングフォーマットは、ユニホームリソースロケータ（ＲＦＣ１７３８）の仕様に合致することができる。Ｅ−メールストリングフォーマットは、インターネットＥ−メールアドレスフォーマット（ＲＦＣ８２２）に合致することができる。デフォールトドメインは、所望のいかなるドメインにセットされていてもよい。更に、電話番号ストリングは、数字キャラクタ‘０’−‘９’及び‘＃’及び‘＊’キャラクタを含んでいてもよい。
【００８５】
スキャンデータポインタ／ハンドル（pPrivate）
アプリケーションスキャンオブジェクトに対するポインタ（又はハンドル）が更に提供される。スキャニングサブシステムは、必ずしも、このデータポインタ／ハンドルを使用して直接メモリＩ／Ｏを実行しない。このデータポインタ／ハンドルは、呼出元指定のＩ／Ｏファンクションを使用して読み取り／書き込みを実行するために呼出元へ返送される。
【００８６】
スキャンデータサイズ
このファンクションは、コールしたアプリケーションプログラムからスキャンターゲットデータサイズ（バイト数）を得るためにスキャニングサブシステムにより使用される。
【００８７】
スキャンデータリサイズ（pfSetSize）
このファンクションは、修復／清浄化されているアプリケーションデータを所与のサイズ（バイト数）にリサイズすることを、コールしたアプリケーションプログラムに要求するためにスキャニングサブシステムにより使用される。このファンクションは、スキャン及び修復／削除オプションにと共に使用されてもよい。
【００８８】
スキャンデータ読み取りファンクション（pfRead）
このファンクションは、コールしたアプリケーションプログラムから指定量のアプリケーションデータを読み取るためにスキャニングサブシステムによって使用されうるものである。
【００８９】
スキャンデータ書き込みファンクション（pfWrite）
これは、オプションのパラメータであって、当該パラメータは、修復プロセスの一部分としてスキャンオブジェクトに指定量のアプリケーションデータを書き込むためにスキャニングサブシステムにより使用される。このファンクションポインタは、修復又は削除用にスキャンアクションがセットされた場合にセットされてもよい。
【００９０】
コールバックファンクション（pfCallBack）
指定された場合に、スキャニングサブシステムは、以下のテーブルに示す情報で指定のファンクションをコールする。コールバックファンクションは、負のリターン値が返された場合には、スキャニングプロセスを中止する。テーブル＃１９は、例示的コールバックコードリストを示す。
テーブル＃１９
【表９】
2007525059.tif 000011
【００９１】
例示的コンピュータコード＃５は、スキャニングサブシステムのコールバック構造体を示す。
コンピュータコード＃５
【表１０】
2007525059.tif 000012
【００９２】
スキャン結果（SScanResult）
オブジェクトスキャニングの結果、即ち検出されたマルウェア情報は、コールしたアプリケーションプログラムにより提供されたSScanResult構造体で、コールしたアプリケーションプログラムへ返される。このSScanResult構造体は、スキャン結果情報を含む構造体に対するポインタと、スキャン結果リソースを削除するのに使用されるファンクションへのポインタとを含む。スキャン結果を保持するのに使用されるメモリは、スキャニングサブシステムにより割り当てられ、そしてpfDeleteResultポインタが指すファンクションをコールすることにより解放される。
【００９３】
例示的なコンピュータコード＃６は、サンプルコーリングシーケンスを示す。
コンピュータコード＃６
【表１１】
2007525059.tif 000013
【００９４】
例示的なコンピュータコード＃７は、検出された不正コード／コンテンツ情報構造体を示す。
コンピュータコード＃７
【表１２】
2007525059.tif 000014
【００９５】
例示的なコンポーネントコード＃８は、スキャン結果構造体を示す。
コンピュータコード＃８
【表１３】
2007525059.tif 000015
【００９６】
重大度及びビヘイビアレベル（uBehavior）
図１４は、一実施形態に係るものであり、SDetect構造体に含まれるマルウェアの重大度及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数１４００を示す。
【００９７】
テーブル＃２０は、例示的なマルウェアの重大度のリストを示す。
テーブル＃２０
【表１４】
2007525059.tif 000016
【００９８】
スキャニングサブシステムは、スキャンされたアプリケーションデータが移動通信装置のユーザにとって有害なマルウェアを含む場合に、MDO_SC_USERフラグをセットする。移動通信装置それ自体にとって有害なものである場合には、MDO_SC_TERMINALフラグがセットされる。ユーザ及び移動通信装置の両方にとって有害である場合には、MDO_SC_USER及びMDO_SC_TERMINALの両フラグがセットされる。
【００９９】
アプリケーションプログラムのビヘイビアレベルは、検出されたマルウェアを含むアプリケーションデータの処置方法を指定する。テーブル＃２１は、ビヘイビアレベル値と、アプリケーションプログラムによる対応アクションとをリストする。
テーブル＃２１
【表１５】
2007525059.tif 000017
【０１００】
スキャンされたアプリケーションデータに多数の不正コードが見つかったときには、コールしたアプリケーションプログラムは、最も高いビヘイビアレベルでアクションすることが期待される。例えば、MDO_BC_LEVEL0及びMDO_BC_LEVEL3の両方がレポートされる場合には、アプリケーションプログラムは、MDO_BC_LEVEL3のアクションをとることができる。
【０１０１】
図１５は、スキャニングサブシステムによるスキャニングのタイミングが、図１３の変数により特定されたデータ形式のファンクションにつれて変化する態様を示すチャート１５００である。
【０１０２】
シグネチャーデータベース更新
先に述べたように、更新プロセスは、移動通信フレームワークに固有の限定帯域巾に適応するようにストリームライン化されてもよい。これを達成する種々の方法に関するより多くの情報を以下に示す。
【０１０３】
更新されたコンポーネント
MDoScanUpdateファンクションは、２つのコンポーネント［即ち、不正コード検出ロジック（ｍｄｏ．ｐｄ）及びシグネチャーデータベース（ｍｄｏ．ｓｄｂ）］に更新サービスを提供する。一つのコンポーネント（即ち、ｍｄｏ．ｐｄ）は、検出ロジックを含んでいて、新たなバージョンが使用できるときに完全に更新されてもよい。別のコンポーネント（即ち、ｍｄｏ．ｓｄｂ）は、ｎ個の以前のバージョンまで増分的に更新されてもよい。第２のコンポーネントに対する完全な更新は、ｎより古いバージョンをもつ移動通信装置において実行することができる。例えば、ｎが５にセットされ、最新バージョンが２０である場合には、１５より古いバージョンをもつ移動通信装置において完全な更新が実行される。
【０１０４】
ユーザインターフェイスを介したアクチベーション
図１６は、一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるかを示す例示的フロー１６００を示す。図示されたように、ウイルスパターンの更新は、移動通信装置のユーザがユーザインターフェイス１６０２を介してメニューエントリーを選択することにより開始できる。ユーザが更新メニューを選択すると、更新アプリケーション１６０４がアクチベートされ、適切な更新インターフェイスファンクション１６０６を介してバックエンドサーバーに接続する。
【０１０５】
通信プロトコル
更新ライブラリーは、ＨＴＴＰプロトコルを介してバックエンドサーバーと通信することができる。
【０１０６】
更新プロセス
図１７は、一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法１７００を示す。一実施形態において、この方法１７００は、図３のアーキテクチャー３００のアプリケーションプログラム、スキャニングサブシステム及びオペレーティングシステム、並びに図１及び２のシステムの状況で実施することができる。しかしながら、この方法１７００は、所望のいかなる状況において実施されてもよいことに注意されたい。
【０１０７】
プロセスを開始するために、更新の要求を少なくとも１つの移動通信装置からバックエンドサーバーへ送信することができる。当然ながら、他の実施形態では、要求を伴わずに更新を送信してもよい。
【０１０８】
一実施形態では、更新は、要求データ構造体を使用して移動通信装置により要求される。任意であるが、このようなデータ構造体は、ユニホームリソースロケータ（ＵＲＬ）変数、移動通信識別子変数、アプリケーションプログラムインターフェイスのバージョン変数、検出ロジック変数、シグネチャーバージョン変数、及び／又は部分番号変数のような変数を含むことができる。
【０１０９】
テーブル＃２２は、このような目的で使用することのできる例示的ＵＲＬを示す。
テーブル＃２２
<BASE-URL>?dev=<DEV-ID>&mdo=<MDO-VER>&eng=<ENG-VER>&sdb=<SDB-VER>&chk=<CHUNK>
上述のＵＲＬ変数を説明するテーブルは、次の通りである。
【表１６】
2007525059.tif 000018
【０１１０】
テーブル＃２３は、上記説明に合致するＵＲＬの特定例である。
テーブル＃２３
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=1
【０１１１】
テーブル＃２３の上記ＵＲＬは、ベースＵＲＬ「http://update.mcafeeacsa.com/504i」、装置識別子として「X504i05」、ＡＰＩのバージョン２、不正コード検出ロジックのバージョン３、及びシグネチャーデータベースのバージョン５６を指定している。「chunk」又は部分、番号は、移動通信装置がバックエンドサーバーに最初にコンタクトするときに１にセットできることに注意されたい。また、ベースＵＲＬは、「UpdateURL」コンフィギュレーション変数を使用し、MDoConfigGetAPIを使用して得ることができる。
【０１１２】
要求を受け取った後に、バックエンドサーバーは、記憶された不正コード検出ロジック及びシグネチャーデータベースのバージョンを、ＵＲＬでエンコードされたバージョン情報と比較することにより、どの更新パッケージをダウンロードする必要があるのかを決定する。
【０１１３】
更新が必要とされない場合には、バックエンドは、コンテンツなし応答を返す。オペレーション１７０１において、移動通信装置は、その応答を第１部分として受け取る。この第１部分が先述のコンテンツなし応答を含むと判断される場合には（判断１７０２を参照）、ダウンロードすべき更新がないので、方法１７００は終了となる。このような特徴は、移動通信フレームワークに固有の限定帯域巾に適応する点で有益である。
【０１１４】
一方、更新パッケージの第１部分がリターンされる場合には、方法１７００は、更新の第１部分の受信に続いて（又はおそらくそれと並列に）更新の付加的な部分を受信することにより続けられる。オペレーション１７０４−１７０８に注意されたい。また、第１部分は、全パッケージサイズ及び部分カウント情報を付随してもよいことに注意されたい。
【０１１５】
残りの更新部分をダウンロードするために、ダウンロードＵＲＬの部分番号を変更することができる。テーブル＃２４は、部分番号「３」を指定するＵＲＬの特定例を示す。
テーブル＃２４
http://update.mcafeeacsa.com/504i?dev=X504i05&mdo=2&eng=3&sdb=56&chk=3
【０１１６】
一実施形態では、更新の完全性が判断されてもよい。従って、更新は、更新の完全性が検証されたかどうかに基づいて、スキャニングサブシステムに条件付きでインストールされてもよい。
【０１１７】
オプションとして、更新の完全性が、シグネチャーを使用して判断されてもよい。このようなシグネチャーは、更新の部分の一つ（即ち、最後の部分）として受け取られてもよい。次いで、シグネチャーは、更新の部分の各々を使用して生成される別のシグネチャーに対して比較されてもよい。オペレーション１７１０に注意されたい。
【０１１８】
一実施形態では、シグネチャーは、ＲＳＡプライベートキーを使用して生成され、次いで、移動通信装置において、更新に含まれている対応のパブリックキーを使用して認証されてもよい。シグネチャーの検証及び生成は、更に、指定の認証ライブラリーを使用して実行されてもよい。
【０１１９】
完全性が検証されたものとすると、スキャニングサブシステムにより実行されるスキャニングが休止又は停止される。オペレーション１７１２に注意されたい。このような休止は任意であることに注意されたい。
【０１２０】
次いで、更新をスキャニングサブシステムにインストールすることができる。オペレーション１７１４に注意されたい。スキャニングが休止される実施形態では、更新がスキャニングサブシステムにインストールされたときに、スキャニングサブシステムを使用して、スキャニングをその後に再開することができる。オペレーション１７１６を参照されたい。
【０１２１】
移動通信フレームワークに固有の限定帯域巾に適応するために、更新の部分のサイズを最小にすることができる。更に、更新の部分を圧縮することもできる。
【０１２２】
更に別の実施形態では、更新の各部分のフォーマットは、移動通信フレームワークに固有の限定帯域巾に適応するように設計することができる。このようなフォーマットに関する更なる情報を以下に示す。
【０１２３】
テーブル＃２５は、更新の部分をダウンロードするための例示的フォーマットを示す。
テーブル＃２５
【表１７】
2007525059.tif 000019
【０１２４】
テーブル＃２５に示す上記部分の各々は、次のテーブル＃２６のように定義される。
テーブル＃２６
【表１８】
2007525059.tif 000020
【０１２５】
各部分は、ヘッダ及びデータで構成されている。このようなヘッダは、更新の関連部分の識別子、更新の関連部分の長さ、等を指示することができる。更に、ヘッダは、含まれているデータ名及びデータ長を指定すると共に、特別のＣＲ＋ＬＦ対をもつ実際のデータから分離することができる。テーブル＃２７は、ヘッダに関連した例示的データ／コンテンツ名を示す。
テーブル＃２７
【表１９】
2007525059.tif 000021
【０１２６】
テーブル＃２８は、例示的な更新パッケージを示す。
テーブル＃２８
【表２０】
2007525059.tif 000022
【０１２７】
抽象ライブラリーＡＰＩ
先に述べたように、移動通信装置に使用するためのプラットホーム独立システム及びそれに関連した方法が提供される。スキャニングの目的で移動通信装置のオペレーティングシステムと通信するプラットホーム独立のスキャニングサブシステムが含まれる。更に、オペレーティングシステム及びスキャニングサブシステムに接続するためのプラットホーム独立のアプリケーションプログラムインターフェイスも設けられる。このプラットホーム独立のアプリケーションプログラムインターフェイスは、プラットホーム独立のスキャニングサブシステムを、移動通信装置及びそれに関連したオペレーティングシステムにポーティングするための抽象ライブラリーを含む。
【０１２８】
この設計により、スキャニングサブシステムは、プラットホーム独立であることができ、従って、いかなる形式のオペレーティングシステム／移動通信装置の組合せにおいても実施することができる。
【０１２９】
一実施形態では、抽象ライブラリーは、システム初期化、ライブラリー初期化、エラーファンクション、メモリ割り当て、入力／出力（Ｉ／Ｏ）、データ認証、同期、ハイパーテキスト転送プロトコル、共有メモリ、システム時間、装置情報、及びデバッグをサポートすることができる。前記アプリケーションプログラムインターフェイスの１つの任意の実施に関連した更なる例示的情報を添付資料Ａに示す。
【０１３０】
以上、種々の実施形態を説明したが、それらは、一例に過ぎず、それらに何ら限定されるものではないことを理解されたい。従って、好ましい実施形態の広さ及び範囲は、上述した実施形態のいずれにも限定されず、特許請求の範囲及びその均等物によってのみ定義されるべきである。
【０１３１】
添付資料Ａ
【０１３２】
このアプリケーションプログラムインターフェイス（ＡＰＩ）は、次のサブシステムを含む。
・システム初期化
・ライブラリー初期化
・エラーファンクション
・ヒープメモリ割り当て
・持続的メモリ／記憶装置Ｉ／Ｏ
・データ認証
・同期オブジェクト（セマフォ）
・ＨＴＴＰ  ＡＰＩ
・共有メモリ
・システム時間
・装置情報
・デバッグ
また、この添付資料には、ＡＰＩライブラリーに使用するための抽象ライブラリー（ＡＬ）レイヤーで定義ざれたＣ言語定義（１つ又は複数）のセットも説明されている。
【０１３３】
システム初期化
プラットホーム／システムに依存するブート初期化は、AlLibrarySysInit()により実行される。このファンクションは、先に述べたMDoSystemInit()ファンクションからコールされるように設計されている。
【０１３４】
AlLibrarySysInit
説明
システムに依存する初期化を実行する。
プロトタイプ
intAlLibrarySysInit(void);
パラメータ
なし
リターン値
成功の場合０、他の場合は−１。
【０１３５】
ライブラリー初期化
このプラットホームの抽象ＡＰＩライブラリーは、AlInitLibrary()ファンクションを使用して初期化される。この抽象ライブラリーは、抽象ＡＰＩファンクションがコールされる前に一度初期化されるべきである。AlInitLibrary()により得られて初期化されるシステムリソースは、AlCleanupLibrary()ファンクションがコールされるときにリリースされる。
【０１３６】
AlInitLibrary
説明
ライブラリー初期化を実行する。このファクションは、MDoLibraryOpen()ファンクションによりコールされる。
プロトタイプ
intAlInitLibrary(void);
パラメータ
なし
リターン値
成功の場合０、他の場合は−１。
【０１３７】
AlCreanupLibrary
説明
AlInitLibrary()ファンクションにより得られたシステムリソースをリリースする。このファンクションは、先に述べたMDoLibraryClose()ファンクションによりコールされる。
プロトタイプ
void AlCleanupLibrary(void);
パラメータ
なし
リターン値
なし
【０１３８】
エラーファンクション
ＡＬライブラリーは、タスク／スレッド特有のエラーコードをセット及び検索するのに使用されるエラーファンクションのセットが含まれている。これは、適当なエラーコード及びコンポーネントコードをセットするのは、抽象レイヤーインプリメンターの役割である。
【０１３９】
AlGetLastError
説明
コーリングタスク／スレッドの最新のエラーコード値を返す。これらファンクションは、AlSetLastError()ファンクションを使用して、返された値をセットする。
AlErrorCodeデータ形式は、３２ビットの非符号化値を使用して内的に表される。
プロトタイプ
AlErrorCodeAlGetLastError(void);
パラメータ
なし
リターン値
AlSetLastError()ファンクションを使用してセットされたコーリングスレッド／タスクの最新のエラー値。
【０１４０】
AlSetLastError
説明
コーリングスレッド／タスクに対する最新のエラーコードをセットする。
プロトタイプ
voidAlSetLastError(AlErrorCode errorCode);
パラメータ
errorCode
[入力] ３２ビットのエラーコード値。
リターン値
なし
【０１４１】
エラー／状態コード
【表２１】
2007525059.tif 000023
【０１４２】
上記テーブルは、ＡＬコンポーネント及びエラーコードのセットをリストする。AlSetLastErrorファンクションを使用してレポートされたエラーは、コンポーネントコードをエラーコードに結合することにより形成された３２ビット値である。ＡＬレベルにセットされたエラーは、エラーが発生したときに適当なアクションを取るためにMDoGetLastErrorファンクションを使用して検索される。
【０１４３】
ヒープメモリ割り当て
抽象レイヤーは、必要なメモリを動的に割り当てるために、コールしたアプリケーションプログラム（即ち「呼出元」）に対するヒープメモリ割り当てを提供する。割り当てられたメモリは、グローバルに共有可能で、多数のアプリケーション／タスクによりアクセスできるものと仮定されている。AlMemAlloc()及びAlMemFree()ＡＰＩファンクションは、ヒープメモリの割り当て及び割り当て解除を提供する。
【表２２】
2007525059.tif 000024
【０１４４】
AlMemAlloc
説明
指定量の動的メモリを割り当て、そのメモリに対するポインタを返す。割り当てられたメモリブロックは、特殊なオペレーション（即ちメモリのロック）を必要とせず、呼出元（即ちコールしたアプリケーションプログラム）による直接のアクセスが可能である。
プロトタイプ
void*AlMemAlloc(unsigned int uSize);
パラメータ
uSize
[入力] 割り当てるメモリのバイトでの量。
リターン値
割り当てられたメモリに対するポインタ。要求が失敗に終わるか又は要求のサイズが０である場合には、ＮＵＬＬ。
AlMemFree()も参照のこと。
【０１４５】
AlMemFree
説明
AlMemAlloc()ファンクションによってリターンされた動的メモリブロックを解放する。
プロトタイプ
void AlMemFree(void*pData);
パラメータ
pData
[入力] 開放すべきメモリブロックへのポインタ。
リターン値
なし
AlMemAlloc()も参照のこと。
【０１４６】
持続記憶装置Ｉ／Ｏ
持続的記憶装置（即ちフラッシュメモリ）へのアクセスは、ファイルＩ／Ｏ  ＡＰＩを使用して実行される。以下を参照されたい。
【表２３】
2007525059.tif 000025
【０１４７】
ファイルハンドル形式AL_FILE_HANDLEは、次のように定義される。
typedef struct AL_FILE_HANDLE_struct
{
} *AL_FILE_HANDLE;
【０１４８】
そして、無効の持続的記憶ハンドルINVALID_AL_FILE_HANDLEを指定するのに使用される定数は、次のように定義される。
#define INVALID_AL_FILE_HANDLE((AL_FILE_HANDLE)0)
【０１４９】
ファイル状態バッファ形式AlStatBufは、次のように定義される。
typedef struct AlStatBuf_struct
{
unsigned long ulSize;
unsigned long ulTime;
} AlStatBuf;
【０１５０】
AlFileOpen
説明
指定のファイルをオープンし、そのハンドルを返す。
プロトタイプ
AL_FILE_HANDLEAlFileOpen(const char* pszFilename,
Int    iMode);
パラメータ
pszFilename
[入力] ファイル名／パスのストリング.
iMode
[入力] ファイルのアクセスモード.
AL_OPEN_READ        読み取りのためのファイルオープン
AL_OPEN_WRITE       読み取り及び書き込みの両方のためのファイルオープン
リターン値
成功の場合はファイルハンドル、他の場合はINVALID_AL_FILE_HANDLE
AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【０１５１】
AlFileClose
説明
指定のファイルハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
VoidAlFileClose(AL_FILE_HANDLE hFile);
パラメータ
hFile
[入力] AlFileOpen()によって返されたファイルハンドル。
リターン値
なし
AlFileOpen()、AlFileRead()、AlFileWrite()も参照のこと。
【０１５２】
AlFileSeek
説明
リード／ライトファイルオフセットを再配置する。
プロトタイプ
longAlFileSeek(AL_FILE_HANDLE hFile,
Long      lOffset,
Int      iWhence);
パラメータ
hFile
[入力] オープンファイルのハンドル。
lOffset
[入力] iWhence directiveに関連するファイルオフセット。
iWhence
[入力] 初期位置。とり得る値は次の通りである。
AL_SEEK_SET      オフセットパラメータは絶対的ファイルオフセットを指定する。
換言すれば、ファイルの開始からのオフセット。
AL_SEEK_CUR      相対的オフセットを指定し、即ちオフセットパラメータは現在ファ                    イルからのファイルオフセットを指定する。
AL_SEEK_END      ファイルの終わりからのファイルオフセットを指定する。
リターン値
成功の場合は得られたファイルオフセット、他の場合は−１Ｌ。
AlFileOpen()、AlFileClose()、AlFileRead()、AlFileWrite()も参照のこと。
【０１５３】
AlFileRead
説明
ファイルからデータのブロックを読み取る。
プロトタイプ
Unsigned int AlFileRead(AL_FILE_HANDLEhFile,
void*     pBuffer,
Unsigned int  uSize);
パラメータ
hFile
[入力] オープンファイルのハンドル。
pBuffer
[出力] データバッファ
uSize
[出力] 読み込むデータ量。
リターン値
成功の場合は読み取ったバイト数、他の場合は−１。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileWrite()も参照のこと。
【０１５４】
AlFileWrite
説明
データのブロックをファイルに書き込む。
プロトタイプ
unsigned intAlFileWrite(AL_FILE_HANDLE hFile,
void const*  pBuffer,
unsigned int uSize );
パラメータ
hFile
[入力] オープンファイルのハンドル
pBuffer
[int] 書き込むデータを保持しているバッファ。
uSize
[出力] 書き込むデータの量。
リターン値
成功の場合は書き込まれたデータの量、他の場合は−１。
AlFileOpen()、AlFileClose()、AlFileSeek()、AlFileRead()も参照のこと。
【０１５５】
AlFileSetSize
説明
オープンファイルをリサイズする。
ネイティブのファイルリサイズのサポートをもたないプラットホームについては、抽象ライブラリーは、AlFileClose()ファンクションがコールされたときに各ファイルの始めに記憶されたサイズ情報を変更することにより、このファンクションを実施する。
プロトタイプ
unsigned intAlFileSetSize(AL_FILE_HANDLE hFile,
unsigned int  uSize );
パラメータ
hFile
[入力] ライトモードでオープンファイルを指すハンドル。
uSize
[出力] バイトでの新たなファイル長。
リターン値
成功の場合は０、他の場合は−１。
AlFileStat()も参照のこと。
【０１５６】
AlFileStat
説明
ファイルサイズの検索及びタイムスタンプの生成。
ネイティブのファイルサイズ及び／又はタイムスタンプ情報の検索方法を備えていないプラットホームについては、抽象ライブラリーは、各ファイルの始めに情報を記憶することによりこのファンクションを実施する。
プロトタイプ
int AlFileStat(charconst* pszFilenames,
AlStatBuf* pStat );
パラメータ
pszFilename
[入力] 情報を検索するファイルの名称。
pStat
[出力] サイズ及びタイムスタンプを返すのに使用される構造体へのポインタ。この構造体は、次のフィールドを含む。
typedef structureAlStatBuf_struct
{
unsigned long ulSize;   /* size in bytes */
unsigned long ulTime;   /* creation time */
} AlStatBuf;
リターン値
成功の場合０、他の場合は−１。
【０１５７】
データ認証
プラットホーム抽象ＡＰＩには、データを認証するためのファンクションのセットが含まれている。データ認証ＡＰＩは、ダウンロードされたマルウェアシグネチャーデータベースを検証するのに使用される。
【０１５８】
呼出元がAlDaOpenファンクションを使用して認証オブジェクトハンドルを得ると、供給されたデータを検証するためにAlDaVerifyへのコールがなされる。
AlDaGetSignerInfo()は、署名者情報を検索するのに使用される。AlDaClose()は、データ認証ハンドル及びそれに関連したシステムリソースをクローズ及びリリースするのに使用される。
例示的なデータ認証ＡＰＩを以下に示す。
【表２４】
2007525059.tif 000026
【０１５９】
AlDaOpen()ファンクションによって返されたデータ認証ハンドルは、次のように定義される。
ALHANDLE(AL_DA_HANDLE);
#defineINVALID_AL_DA_HANDLE ((AL_DA_HANDLE) 0)
【０１６０】
署名者情報構造は、次のように定義される。
#defineMAX_DA_SIGNER_NAME 128
typedef structDaSignerInfo_struct
{
charszSignerName[MAX_DA_SIGNER_NAME];
} DaSignerInfo;
【０１６１】
AlDaOpen
説明
データ認証ハンドルを生成し、返す。
プロトタイプ
AL_DA_HANDLEAlDaOpen(const void* pSig,
unsigned int uSize );
パラメータ
pSig
[入力] シグネチャーデータへのポインタ。
uSigSize
[入力] バイトでのシグネチャーサイズ。
リターン値
成功の場合はデータ認証ハンドル、他の場合はNVALID_AL_DA_HANDLE。
AlDaClose()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【０１６２】
AlDaClose
説明
データ認証ハンドルに対して使用されるシステムリソースをリリースする。
プロトタイプ
voidAlDaClose(AL_DA_HANDLE hDa );
パラメータ
hDa
[入力] AlDaOpenによって返されるデータ認証ハンドル。
リターン値
なし
AlDaOpen()、AlDaUpdata()、AlDaVerify()、AlDaGetSignerInfo()も参照のこと。
【０１６３】
AlDaVerify
説明
データ認証を行う。
プロトタイプ
intAlDaVerify(AL_DA_HANDLE hDa,
int (*pfRead)(void*,void*,int),
int iTotalSize,
void *pPrivate);
パラメータ
hDa
[入力] データ認証ハンドル。
pfRead
[入力] データの読み取り(参照)に使用する呼出元のコールバックファンクション。エラーの場合は、−１とし、読み取るべきデータがそれ以上ない場合は０とし、他の場合は、読み取られてAlDaVerifyファンクションへ返されたデータの量とする。ファンクションは何回もコールされることが予想される。
iTotalSize
[入力] 検証されるべき全データサイズ。
pPrivate
[入力] pfReadのコールバックによって渡されるべき呼出元のプライベートデータ。
リターン値
アプリケーションデータが認証された場合は０、他の場合は−１。
AlDaOpen()、AlDaClose()、AlDaGetSignerInfo()も参照のこと。
【０１６４】
サンプルデータ読み取りコールバックファンクションは、次の通りである。
【表２５】
2007525059.tif 000027
【０１６５】
AlDaGetSignerInfo
説明
データ認証署名者情報を検索する。
プロトタイプ
intAlDaGetSignerInfo(AL_DA_HANDLE hDA,
DaSignerInfo *pDSI);
パラメータ
hDa
[入力] データ認証ハンドル。
pDSI
[出力] 署名者情報を含む構造体へのポインタ。
リターン値
署名者情報の取得が成功した場合には０、他の場合には−１。
AlDaOpen()、AlDaClose()、AlDaVerify()も参照のこと。
【０１６６】
同期オブジェクト
リソースの同期及び制御は、セマフォを使用して行われる。抽象ライブラリーには、セマフォオブジェクトを生成し、オープンし、クローズし、そして変更するためのファンクションのセットが含まれている。例示的なセマフォＡＰＩは次の通りである。
【表２６】
2007525059.tif 000028
【０１６７】
AlSemCreate
説明
命名されたセマフォを生成し、内部カウンターを０にセットしそのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemCreate(char const* pszName );
パラメータ
pszName
[入力] セマフォ名のストリング。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemOpen()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【０１６８】
AlSemOpen
説明
既存のセマフォへのハンドルを返す。
プロトタイプ
AL_SEM_HANDLEAlSemOpen(char const* pszName );
パラメータ
pszName
[入力] セマフォ名。
リターン値
成功の場合はセマフォハンドル、他の場合はINVALID_AL_SEM_HANDLE。
AlSemCreate()、AlSemClose()、AlSemGet()、AlSemRelease()も参照のこと。
【０１６９】
AlSemClose
説明
システムリソース関連の指定のセマフォハンドルをクローズし、リリースする。
セマフォ使用／参照カウントも減少され、参照されたセマフォオブジェクトはカウントが０になった場合に破棄される。
プロトタイプ
voidAlSemClose(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] AlSemCreate() 又は AlSemOpen()を用いて得たセマフォハンドル。
リターン値
なし
AlSemCreate()、AlSemOpen()、AlSemGet()、AlSemRelease()も参照のこと。
【０１７０】
AlSemGet
説明
指定のセマフォを取得する。内部カウンターがエントリーにおいて０より大きい場合には、それを１だけ減少して直ちに返す。内部カウンターがエントリーにおいて０である場合には、他のタスク／スレッドがAlSemRelease()をコールして０より大きくするまで、コールが阻止される。
プロトタイプ
intAlSemGet(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は０、他の場合は−１。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemRelease()も参照のこと。
【０１７１】
AlSemRelease
説明
セマフォをリリースし、内部カウンターを１だけ増加する。
プロトタイプ
intAlSemRelease(AL_SEM_HANDLE hSem);
パラメータ
hSem
[入力] セマフォハンドル。
リターン値
成功の場合は０、他の場合は−１。
AlSemCreate()、AlSemOpen()、AlSemClose()、AlSemGet()も参照のこと。
【０１７２】
HTTP API
抽象ライブラリーには、呼出元が提供したコールバック構造体を使用してＨＴＴＰネットワークＩ／Ｏを提供するファンクションのセットが含まれている。例示的HTTP APIを以下に示す。
【表２７】
2007525059.tif 000029
【０１７３】
AlHttpOpen()ファンクションによりリターンされるＨＴＴＰハンドルは、次のように定義される。
typedef structAL_HTTP_HANDLE_struct
{
} *AL_HTTP_HANDLE;
#defineINVALID_AL_HTTP_HANDLE ((AL_HTTP_HANDLE)0)
【０１７４】
ＨＴＴＰコールバック構造体は、次のように定義される。
typedef structAlHttpCallbacks_struct
{
unsigned int  (* pWrite) (void*       pPrivate,
void const*  pData,
unsigned int uSize);
unsigned int  (* pRead) (void*       pPrivate.
Void*       pData,
unsigned int uSize);
unsigned int  (* pGetSize) (void* pPrivate);
unsigned int  (* pSetSize) (void*       pPrivate,
unsignedint uSize);
} AlHttpCallbacks;
【０１７５】
上記ＨＴＴＰコールバック構造体で与えられるコールバックファンクションは、次の機能を提供する。
pWrite      到来するＨＴＴＰ要求データを記憶するためにシステムＨＴＴＰライブラ
リーによりコールされる。
pRead       ＨＴＴＰ要求の一部として送信されるべきアプリケーションデータを検索
するのに使用される。
pGetSize    アプリケーションのコンテンツデータサイズ「Content-Length」をＨＴＴ
Ｐライブラリーに提供する。
pSetSize    到来するコンテンツデータ長さが得られるときにそれをコーリングアプリ
ケーションに知らせるためにＨＴＴＰライブラリーによりコールされる
【０１７６】
AlHttpOpen
説明
ハンドルを生成して、ＨＴＴＰライブラリーへ返す。
プロトタイプ
AL_HTTP_HANDLE_AlHttpOpen(void);
パラメータ
なし
リターン値
ＨＴＴＰのインスタンス生成に失敗した場合には、INVALID_AL_HTTP_HANDLEが返される。
AlHttpClose()も参照のこと。
【０１７７】
AlHttpClose
説明
ＨＴＴＰハンドルに関連したシステムリソースをクローズし、リリースする。
プロトタイプ
voidAlHttpClose(AL_HTTP_HANDLE hHTTP);
パラメータ
hHTTP
[入力] AlHttpOpen()ファンクションによって返されるHTTPライブラリのハンドル。
リターン値
なし
AlHttpClose()も参照のこと。
【０１７８】
AlHttpExec
説明
指定のＵＲＬにおいて任意のヘッダ情報を用いてＨＴＴＰメソッド（「GET」又は「POST」）を実行する。
プロトタイプ
intAlHttpExec(AL_HTTP_HANDLE  hHTTP,
char const*     pszMethod,
char const*     pszURL,
AlHttpCallbacks*  pHttpCb,
void*        pPrivate );
パラメータ
hHTTP
[入力] AlHttpOpen()関数によって返されるHTTPライブラリのハンドル。
pszMethod
[入力] HTTPメソッドの指定。HTTP “GET” または “POST”。
pszURL
[入力] HTTPリクエストがなされるＵＬＲ。
pHttpCb
[入力] 呼出元指定のHTTP I/Oファンクションのセットへのポインタ。
ＨＴＴＰライブラリーは、データＩ／Ｏに対してAlHttpCallbacksで指定された
ファンクションを使用する
pPrivate
[入力/出力] AlHttpCallbacksにおいて指定されたコールバックファンクションへ返却されるべき呼出元データへのポインタ。
リターン値
成功の場合は０、他の場合は−１。
ALHttpOpen()、AlHttpClose()も参照のこと。
【０１７９】
共有メモリ
ライブラリーの共有オブジェクトが記憶されるシステムメモリの位置は、AlShmAddress()ファンクションを使用して取得される。この共有情報エリアは、装置のブート時に割り当てられ／準備され、ライブラリーの異なるインスタンスにより参照される。
【０１８０】
AlSemAddress
説明
共有メモリアドレスを返す。
プロトタイプ
void*AlSemAddress(void);
パラメータ
なし
リターン値
成功の場合は共有メモリアドレス、他の場合はNULL。
【０１８１】
Time
AlTmGetCurrent()は、呼出元に現在システム時間を秒で与える。
【０１８２】
AlTmGetCurrent
説明
現在システム時間を得る。
プロトタイプ
unsigned longAlTmGetCurrent(void);
パラメータ
なし
リターン値
成功のときは、エポック（１９７０年１月１日の００：００：００）以来の時間（秒で）。エラーのときは、((unsigned long) -1L)を返す。
【０１８３】
装置情報
AlDevGetInfo
説明
装置の特定情報を検索する。このファンクションにより返される装置識別ストリングは、ＡＰＩにより使用される。
プロトタイプ
intAlDevGetInfo(AlDeviceInfo* pDeviceInfo );
パラメータ
pDeviceInfo
[出力] デバイス情報へのポインタ。
AlDeviceInfoは、次のように定義される。
#defineAL_MAX_DEVICE_ID 32
typedef structAlDeviceInfo_struct
{
charszDeviceID[AL_MAX_DEVICE_ID];
} AlDeviceInfo;
識別ストリングszDeviceIDは、特定の移動通信装置を全ての他のものからユニークに特定するのに使用されるユニークなターミナル／装置識別子である。この情報は、移動通信装置に対してマルウェアシグネチャーダウンロードＵＲＬを構成するのに使用される。これは、ＵＲＬで許されないキャラクタ（即ち、ホワイトスペース）を含んではならない。
リターン値
成功の場合は０、失敗の場合は−１。
【０１８４】
デバッグ
AlDbgOutput
説明
デバッグストリングをデバッグコンソールへ出力する。このファンクションは、リリースビルドに対するナルファンクションである。
プロトタイプ
int AlDbgOutput(charconst* pszOutput);
パラメータ
pszOutput
[入力] デバッグコンソールに出力するストリング。
リターン値
成功の場合は０、失敗の場合は−１。
【図面の簡単な説明】
【０１８５】
【図１】一実施形態に係る移動通信フレームワークを示す図である。
【図２】別の実施形態に係る移動通信フレームワークを示す図である。
【図３】一実施形態に係る移動通信装置に関連するアーキテクチャーを示す図である。
【図４】一実施形態に係るものであり、動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのシステムを示す図である。
【図５】図４のシステムのアプリケーションサーバーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図６】図４のシステムの再入可能ライブラリーの実施形態に係るものであり、移動通信装置を使用してセキュリティ又はコンテンツ分析機能にアクセスするためのフレームワークを示す図である。
【図７】図４のシステムの状況において実施されたオンデマンドのスキャニングシステムを示す図である。
【図８】一実施形態に係るものであり、移動アプリケーションプログラム及びスキャニングサブシステムをインターフェイスするのに使用できるアプリケーションプログラムインターフェイス（ＡＰＩ）の種々のコンポーネントの階層を示す図である。
【図９】ライブラリーインターフェイス初期化を例示する図である。
【図１０】一実施形態に係るエラーコードファンクションのフォーマットを例示する図である。
【図１１】一実施形態に係るスキャニングサブシステムＡＰＩコールシーケンスを示す図である。
【図１２】一実施形態に係るコンフィギュレーションＡＰＩコールシーケンスの一例を示す図である。
【図１３】アプリケーションプログラムがＡＰＩを介してスキャニングサブシステムに通信することのできる種々のスキャンデータ形式を例示する図である。
【図１４】一実施形態に係るものであり、マルウェア重大度フラグ及びアプリケーションプログラムのビヘイビアレベルを含むビットフィールド変数を示す図である。
【図１５】スキャニングサブシステムによるスキャニングのタイミングが、図１３の変数によって特定されるデータ形式のファンクションにつれてどのように変化するか示すチャートである。
【図１６】一実施形態に係るものであり、ユーザインターフェイスにより更新がどのように開始されるか示すフローを例示する図である。
【図１７】一実施形態に係るものであり、移動通信装置のスキャニングサブシステムを効率的に更新するための方法を示す図である。
【図１】
2007525059.tif 000030
【図２】
2007525059.tif 000031
【図３】
2007525059.tif 000032
【図４】
2007525059.tif 000033
【図５】
2007525059.tif 000034
【図６】
2007525059.tif 000035
【図７】
2007525059.tif 000036
【図８】
2007525059.tif 000037
【図９】
2007525059.tif 000038
【図１０】
2007525059.tif 000039
【図１１】
2007525059.tif 000040
【図１２】
2007525059.tif 000041
【図１３】
2007525059.tif 000042
【図１４】
2007525059.tif 000043
【図１５】
2007525059.tif 000044
【図１６】
2007525059.tif 000045
【図１７】
2007525059.tif 000046