(57)【特許請求の範囲】
【請求項１】
システムの状態を検出し、
システム状態がアイドルの時に、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、取得されたスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録することを含み、
前記システムの状態を検出するステップは、
前記システムが入力状態またはフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出し、
前記システムが入力状態またはフルスクリーン状態である場合、検出されたシステムの状態がビジーであると判定し、
前記システムが入力状態またはフルスクリーン状態でない場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい時、検出されたシステムの状態がビジーであると判定し、
前記システムが入力状態またはフルスクリーン状態でない場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率より大きくない時、検出されたシステムの状態がアイドルであると判定することを含むことを特徴とする
ウイルススキャン方法。
【請求項２】
すべてのハードディスクのパーティションを列挙し、ツリー構造の各ノードの属性にそれがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる、前記ツリー構造へハードディスクのパーティションを追加し、
ハードディスクのパーティションごとのディレクトリ又はファイルのすべてを列挙し、ハードディスクのパーティションにおけるディレクトリ又はファイルをノードとしてツリー構造に追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューに前記ファイルを追加し、
システムの状態を検出し、
システム状態がアイドルの時に、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、取得されたスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録することを含み、
ディレクトリ又はファイルが位置するノードの属性を設定するステップは、
１つのディレクトリが列挙される時、列挙が終了した場合、ディレクトリが位置するノードの属性をENUMERATION FINISHED（列挙終了）に設定し、前記列挙が未完成の場合、ディレクトリが位置するノードの属性をENUMERATION UNFINISHED(列挙未完成)に設定し、
１つのディレクトリの下におけるファイル又はディレクトリをスキャンする時、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了した場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成の場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、
１つのファイルをスキャンする時、前記ファイルのスキャンが終了した場合、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）に設定し、前記ファイルのスキャンが未完成の場合、前記ファイルが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定することを含み、
前記スキャン進行状況に応じて現在のウイルススキャンを開始するステップは、
前記ツリー構造において深さ優先探索を行い、前記ツリー構造において前記スキャン進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックし、
ノードがスキャンされなかった場合、前記ノードはファイルが位置するノードであるかを判定し、肯定の場合に前記ノードを前記スキャンキューに追加し、それ以外の場合に前記ノードのすべてのサブノードの深さ優先探索を続け、
ノードがまだ列挙されていない場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、その後、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識し、
スキャン進行状況に応じてスキャンキューにおけるファイルをスキャンし、
１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、前記ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定することを含むことを特徴とする
ウイルススキャン方法。
【請求項３】
現在のウイルススキャンのスキャン進行状況を記録するステップは、
現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びディレクトリがスキャンされたかを、現在のウイルススキャンの終了時にツリー構造によって記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びファイルがスキャンされたかを、記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録することを含むことを特徴とする
請求項２に記載のウイルススキャン方法。
【請求項４】
前記スキャン進行状況に応じて現在のウイルススキャンを開始するステップの後に、さらに、
SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除することを含むことを特徴とする
請求項２に記載のウイルススキャン方法。
【請求項５】
システムの状態を検出するように構成される検出モジュールと、
前記システムの状態がアイドルであることを前記検出モジュールが検出した時、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、前記スキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録するように構成される第１のスキャンモジュールと、を含み、
前記検出モジュールは、
前記システムが入力状態またはフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出するように構成される検出ユニットと、
前記システムが入力状態またはフルスクリーン状態にあることを前記検出ユニットが検出した場合、検出されたシステムの状態がビジーであると判定するように構成される第１の判定ユニットと、
前記システムが入力状態またはフルスクリーン状態でないことを前記検出ユニットが検出した場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい時、検出されたシステムの状態がビジーであると判定するように構成される第２の判定ユニットと、
前記システムが入力状態またはフルスクリーン状態でないことを前記検出ユニットが検出した場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率より大きくない時、検出されたシステムの状態がアイドルであると判定するように構成される第３の判定ユニットとを含むことを特徴とする
ウイルススキャン装置。
【請求項６】
すべてのハードディスクのパーティションを列挙し、ツリー構造の各ノードの属性にそれがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる、前記ツリー構造へハードディスクのパーティションを追加するように構成される第１の列挙モジュールと、
ハードディスクのパーティションごとのディレクトリ又はファイルのすべてを列挙し、ハードディスクのパーティションにおけるディレクトリ又はファイルをノードとしてツリー構造に追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューに前記ファイルを追加するように構成される第２の列挙モジュールと、を含み、
システムの状態を検出するように構成される検出モジュールと、
前記システムの状態がアイドルであることを前記検出モジュールが検出した時、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、前記スキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録するように構成される第１のスキャンモジュールと、を含み、
前記第２の列挙モジュールは、さらに、
１つのディレクトリが列挙される時、列挙が終了した場合、ディレクトリが位置するノードの属性をENUMERATION FINISHED（列挙終了）に設定し、前記列挙が未完成の場合、ディレクトリが位置するノードの属性をENUMERATION UNFINISHED(列挙未完成)に設定し、
１つのディレクトリの下におけるファイル又はサブディレクトリをスキャンする時、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了した場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成の場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、
１つのファイルをスキャンする時、前記ファイルのスキャンが終了した場合、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）に設定し、前記ファイルのスキャンが未完成の場合、前記ファイルが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定するように構成され、
前記第１のスキャンモジュールは、
前記ツリー構造において深さ優先探索を行い、前記ツリー構造において前記スキャン進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックするように構成されるトラバースユニットと、
ノードがスキャンされなかったことを前記トラバースユニットが検知する場合、前記ノードはファイルが位置するノードであるかを判定し、肯定の場合に前記ノードを前記スキャンキューに追加し、それ以外の場合にノードのすべてのサブノードの深さ優先探索を続けるように構成される第１のトラバースサブユニットと、
ノードがまだ列挙されていないことを前記トラバースユニットが検知する場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、その後、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識するように構成される第２のトラバースサブユニットと、
スキャン進行状況に応じてスキャンキューにおけるファイルをスキャンし、１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、前記ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定するように構成されるスキャンユニットとを含む、ことを特徴とする
ウイルススキャン装置。
【請求項７】
前記第１のスキャンモジュールは、さらに、
現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びディレクトリがスキャンされたかを、現在のウイルススキャンの終了時に、ツリー構造によって記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びファイルがスキャンされたかを記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録するように構成される記録ユニットを含むことを特徴とする
請求項６に記載のウイルススキャン装置。
【請求項８】
前記第１のスキャンモジュールは、さらに、
SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除するように構成される削除ユニットを含むことを特徴とする
請求項６に記載のウイルススキャン装置。
【請求項９】
システムの状態を検出し、
システム状態がアイドルの時に、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、取得されたスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録することを含むウイルススキャン方法を、一つ以上のプロセッサによって実行される時に装置に実行させるための命令を格納し、
前記システムの状態を検出するステップは、
前記システムが入力状態またはフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出し、
前記システムが入力状態またはフルスクリーン状態である場合、検出されたシステムの状態がビジーであると判定し、
前記システムが入力状態またはフルスクリーン状態でない場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい時、検出されたシステムの状態がビジーであると判定し、
前記システムが入力状態またはフルスクリーン状態でない場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率より大きくない時、検出されたシステムの状態がアイドルであると判定することを含むことを特徴とする
非一時的コンピュータ読み取り可能な媒体。
【請求項１０】
システムの状態を検出し、
システム状態がアイドルの時に、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、取得されたスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録することを含むウイルススキャン方法を、一つ以上のプロセッサによって実行される時に装置に実行させるための命令を格納し、
前記方法は、
すべてのハードディスクのパーティションを列挙し、ツリー構造の各ノードの属性にそれがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる、前記ツリー構造へハードディスクのパーティションを追加し、
ハードディスクのパーティションごとのディレクトリ又はファイルのすべてを列挙し、ハードディスクのパーティションにおけるディレクトリ又はファイルをノードとしてツリー構造に追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューに前記ファイルを追加することを含み、
ディレクトリ又はファイルが位置するノードの属性を設定するステップは、
１つのディレクトリが列挙される時、列挙が終了した場合、ディレクトリが位置するノードの属性をENUMERATION FINISHED（列挙終了）に設定し、前記列挙が未完成の場合、ディレクトリが位置するノードの属性をENUMERATION UNFINISHED(列挙未完成)に設定し、
１つのディレクトリの下におけるファイル又はディレクトリをスキャンする時、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了した場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成の場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、
１つのファイルをスキャンする時、前記ファイルのスキャンが終了した場合、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）に設定し、前記ファイルのスキャンが未完成の場合、前記ファイルが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、
前記スキャン進行状況に応じて現在のウイルススキャンを開始するステップは、
前記ツリー構造において深さ優先探索を行い、前記ツリー構造において前記スキャン進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックし、
ノードがスキャンされなかった場合、前記ノードはファイルが位置するノードであるかを判定し、肯定の場合に前記ノードを前記スキャンキューに追加し、それ以外の場合に前記ノードのすべてのサブノードの深さ優先探索を続け、
ノードがまだ列挙されていない場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、その後、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識し、
スキャン進行状況に応じてスキャンキューにおけるファイルをスキャンし、
１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、前記ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定することを含むことを特徴とする
非一時的コンピュータ読み取り可能な媒体。
【請求項１１】
現在のウイルススキャンのスキャン進行状況を記録するステップは、
現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びディレクトリがスキャンされたかを、現在のウイルススキャンの終了時にツリー構造によって記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びファイルがスキャンされたかを、記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録することを含むことを特徴とする
請求項１０に記載の非一時的コンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【関連出願の参照】
【０００１】
本願発明は、２０１２年９月２０日に中国の国家知的財産権局に出願された中国特許出願第201210351773.5号に対する優先権主張に基づくものであり、当該出願の全記載内容が引用をもって本書に組み込み記載されるものとする。
【技術分野】
【０００２】
本発明は、コンピュータ技術分野に関し、特に、ウイルススキャンのための方法と装置、及びウイルススキャンを実行させる命令を格納したコンピュータ読み取り可能な非一時的媒体に関する。
【背景技術】
【０００３】
コンピュータウイルスは、コンピュータープログラムに挿入された指示またはプログラムコードのセットに関し、コンピュータの機能やデータを破壊し、コンピュータの使用に影響を与えるとともに、自己複製することができる。コンピュータウイルスは、寄生的、感染的、隠蔽的、破壊的であり、多様化しており、コンピュータのリソースに大きな損害と破壊を引き起こす。
【０００４】
効果的にウイルスを検出するために、慣例的に、ウイルススキャンと殺害方法が、ハードディスク全体のトラバーサルとウイルススキャン毎にハードディスクにおける各々のファイルへのスキャンを必要とする。利用者が現在のウイルススキャンを中断した場合、ハードディスク全体のウイルススキャンのトラバーサルを、次のウイルススキャンでもう一度行う必要がある。
【０００５】
したがって、今までまだ解決されていない需要が上記の欠陥や不備に対処するための技術に存在する。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的の一つとして、ウイルススキャンのための方法と装置、及びウイルススキャンを実行させる命令を格納したコンピュータ読み取り可能な非一時的媒体を提供する。
【課題を解決するための手段】
【０００７】
本発明の一態様では、ウイルススキャン方法は、システムの状態を検出し、システム状態がアイドルの時に、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、前記スキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録することを含む。
【０００８】
一実施形態では、前記システムの状態を検出するステップは、
入力状態またはフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出し、
入力状態またはフルスクリーン状態である場合、検出されたシステムの状態がビジーであると判定し、
入力状態またはフルスクリーン状態でない場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい時、検出されたシステムの状態がビジーであると判定し、
入力状態またはフルスクリーン状態でない場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率より大きくない時、検出されたシステムの状態がアイドルであると判定することを含む。
【０００９】
さらに、前記方法は、前記システムの状態を検出するステップの前に、
すべてのハードディスクのパーティションを列挙し、各ノードの属性にそれがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる、ツリー構造へハードディスクのパーティションを追加し、
ハードディスクのパーティションごとのディレクトリ又はファイルのすべてを列挙し、ハードディスクのパーティションにおけるディレクトリ又はファイルをノードとしてツリー構造に追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューに前記ファイルを追加する。
【００１０】
一実施形態では、ディレクトリ又はファイルが位置するノードの属性を設定するステップは、
１つのディレクトリが列挙される時、列挙が終了した場合、ディレクトリが位置するノードの属性をENUMERATION FINISHED（列挙終了）に設定し、前記列挙が未完成の場合、ディレクトリが位置するノードの属性をENUMERATION UNFINISHED(列挙未完成)に設定し、
１つのディレクトリの下におけるファイル又はディレクトリをスキャンする時、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了した場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成の場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、
１つのファイルをスキャンする時、前記ファイルのスキャンが終了した場合、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）に設定し、前記ファイルのスキャンが未完成の場合、前記ファイルが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定することを含む。
【００１１】
一実施形態では、前記スキャン進行状況に応じて現在のウイルススキャンを開始するステップは、
前記ツリー構造において深さ優先探索を行い、前記ツリー構造において前記スキャン進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックし、
ノードがスキャンされなかった場合、前記ノードはファイルが位置するノードであるかを判定し、肯定の場合に前記ノードを前記スキャンキューに追加し、それ以外の場合に前記ノードのすべてのサブノードの深さ優先探索を続け、
ノードがまだ列挙されていない場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、その後、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識し、
スキャン進行状況に応じてスキャンキューにおけるファイルをスキャンし、
１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、前記ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定することを含む。
【００１２】
一実施形態では、現在のウイルススキャンのスキャン進行状況を記録するステップは、
現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びディレクトリがスキャンされたかを、現在のウイルススキャンの終了時にツリー構造によって記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びファイルがスキャンされたかを、記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録することを含む。
【００１３】
さらに、前記方法は、前記スキャン進行状況に応じて現在のウイルススキャンを開始するステップの後に、
SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除することを含む。
【００１４】
また、前記方法は、前記システムの状態を検出するステップの後に、
システム状態がビジーの時、現在のウイルススキャンが開始していない場合に、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合に、現在のウイルススキャンの速度を減らし、また、第１の所定時間内に検出されたシステム状態がすべてビジーの時、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録することを含む。
【００１５】
本発明の別の態様では、ウイルススキャン装置は、システムの状態を検出するように構成される検出モジュールと、前記システムの状態がアイドルであることを前記検出モジュールが検出した時、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得し、前記スキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録するように構成される第１のスキャンモジュールと、を含む。
【００１６】
一実施形態では、前記検出モジュールは、入力状態またはフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出するように構成される検出ユニットと、入力状態またはフルスクリーン状態にあることを前記検出ユニットが検出した場合、検出されたシステムの状態がビジーであると判定するように構成される第１の判定ユニットと、入力状態またはフルスクリーン状態でないことを前記検出ユニットが検出した場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい時、検出されたシステムの状態がビジーであると判定するように構成される第２の判定ユニットと、入力状態またはフルスクリーン状態でないことを前記検出ユニットが検出した場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率より大きくない時、検出されたシステムの状態がアイドルであると判定するように構成される第３の判定ユニットとを含む。
【００１７】
さらに、その装置は、すべてのハードディスクのパーティションを列挙し、各ノードの属性にそれがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる、ツリー構造へハードディスクのパーティションを追加するように構成される第１の列挙モジュールと、ハードディスクのパーティションごとのディレクトリ又はファイルのすべてを列挙し、ハードディスクのパーティションにおけるディレクトリ又はファイルをノードとしてツリー構造に追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューに前記ファイルを追加するように構成される第２の列挙モジュールとをさらに、含む。
【００１８】
さらに、前記第２の列挙モジュールは、１つのディレクトリが列挙される時、列挙が終了した場合、ディレクトリが位置するノードの属性をENUMERATION FINISHED（列挙終了）に設定し、前記列挙が未完成の場合、ディレクトリが位置するノードの属性をENUMERATION UNFINISHED(列挙未完成)に設定し、１つのディレクトリの下におけるファイル又はディレクトリをスキャンする時、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了した場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、前記ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成の場合、前記ディレクトリが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定し、１つのファイルをスキャンする時、前記ファイルのスキャンが終了した場合、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）に設定し、前記ファイルのスキャンが未完成の場合、前記ファイルが位置するノードの属性をSCANNING UNFINISHED（スキャン未完成）に設定するように構成される。
【００１９】
一実施形態では、前記第１のスキャンモジュールは、
前記ツリー構造において深さ優先探索を行い、前記ツリー構造において前記スキャン進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックするように構成されるトラバースユニットと、
ノードがスキャンされなかったことを前記トラバースユニットが検知する場合、前記ノードはファイルが位置するノードであるかを判定し、肯定の場合に前記ノードを前記スキャンキューに追加し、それ以外の場合にノードのすべてのサブノードの深さ優先探索を続けるように構成される第１のトラバースサブユニットと、
ノードがまだ列挙されていないことを前記トラバースユニットが検知する場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、その後、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識するように構成される第２のトラバースサブユニットと、
スキャン進行状況に応じてスキャンキューにおけるファイルをスキャンし、１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、前記ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、前記ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定するように構成されるスキャンユニットとを含む。
【００２０】
他の実施形態では、前記第１のスキャンモジュールは、さらに、現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びディレクトリがスキャンされたかを、現在のウイルススキャンの終了時に、ツリー構造によって記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びファイルがスキャンされたかを記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録するように構成される記録ユニットを含む。
【００２１】
さらに別の実施形態では、前記第１のスキャンモジュールは、また、SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除するように構成される削除ユニットを含む。
【００２２】
さらに、その装置は、また、システムの状態がビジーであることを前記検出モジュールが検出した時、現在のウイルススキャンが開始していない場合に、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合に、現在のウイルススキャンの速度を減らし、また、第１の所定時間内に検出されたシステム状態がすべてビジーの時、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録するように構成される第２のスキャンモジュールを含む。
【００２３】
本発明のさらに別の態様では、非一時的コンピュータ読み取り可能な媒体は、一つ以上のプロセッサによって実行される時に、上記に開示されたウイルススキャン方法を、上記に開示された装置に実行させるための命令を格納する。
【００２４】
以下、本発明の実施形態に係る技術的解決策によって生じた有益な効果は次のとおりである。システムの状態を検出することにより、走査速度を低減するか、又はシステムの状態がビジーである場合にスキャンを停止することができ、システムの状態がアイドルのときにウィルススキャンを実行することにより、ウィルススキャンによるシステムの占有率を調整することができ、ユーザ体験を改善でき、また、不必要なスキャン時間を大幅に削減するように、ウィルススキャン中に前回のスキャンの進行状況に応じてスキャンを継続することができる。
【００２５】
本発明の新規な概念の精神および範囲から逸脱することなく、変形及び変更が影響を受けているが、本発明のこれら及び他の態様は、以下の図面と併せて以下の好ましい実施形態の説明から明らかになるであろう。
【図面の簡単な説明】
【００２６】
【図１】本発明の第一の実施例に係るウイルススキャンのための方法のフローチャートである。
【図２】本発明の第二の実施例に係るウイルススキャンのための方法のフローチャートである。
【図３】本発明の第二の実施例に係るツリー構造の概略図である。
【図４】本発明の第三の実施例に係るウイルススキャン装置の概略構成図である。
【図５】本発明の第四の実施例に係るウイルススキャン装置の概略構成図である。
【発明を実施するための形態】
【００２７】
添付された図面は、本発明の一つ以上の実施例を説明するためであり、明細書と共に、本発明の原理を解釈することに役立つ。可能な場合、同一又は類似の実施例の要素を参照するために、同一の符号は図面を通して使用される。図面は、本発明をここで開示され記述された具体的な実施形態に限定するものではない。図面は、本発明の原理をスケールし強調するものではなく、その代わりに本発明の原理を明確に説明するためである。
【００２８】
以下の説明は、実質的に例示的なものに過ぎず、その開示、アプリケーション及び使用を限定することを目的としない。その開示の広範な教示をさまざまな形で実施することができる。したがって、その開示が特定の例を含みながら、図面、明細書、及び以下の特許請求の範囲についての研究によって他の変形が明確になるため、その開示の本当の範囲がこのように限定されていない。明瞭のために、同一の符号は、類似した要素を識別するために図面において使用される。
【００２９】
この明細書における用語が、開示された文脈、また、各々の用語が使用される文脈において、一般的に技術上通常の意味で使用される。その開示を記述することに用いられる特定の用語は、開示の記述について実施者にさらなるガイダンスを提供するために、以下で又は明細書において説明する。ここで議論される如何なる用語の例を含む、明細書の如何なる箇所で使用される例は、あくまでも一例であり、如何なる例示的用語又は開示の意味と範囲を限定するものではない。同様に、その開示はこの明細書における各種の実施例に限定されていない。
【００３０】
ここでの明細書及び以下の特許請求の範囲を通して使われるように、コンテキストが明確に指示しない限り、単数のみならず複数の参照を含む。また、ここでの明細書及び以下の特許請求の範囲を通して使われるように、コンテキストが明確に指示しない限り、「内」の意味が「の中」、「の上」を含む。
【００３１】
ここで使われるように、「備える」、「含む」、「有する」、「包含する」、「含有する」などが開放的に含むと理解され、即ち、含むことを意味しながら限定されていないとする。
【００３２】
ここで使われるように、「A, B, 及びCのうちの少なくとも一つ」が非排他的論理和を用いた論理的(A又はB又はC)という意味に解釈される。本開示の原則を変えることなく、一つの方法における一つ以上のステップが異なる順序で（又は並行に）実行されると理解されるべきである。
【００３３】
ここで使われるように、用語「モジュール」は、特定用途向け集積回路（ASIC）、電子回路、組合せ論理回路、フィールドプログラマブルゲートアレイ（FPGA）、コードを実行する（共有、専用またはグループ）プロセッサ、記述された機能を提供する他の適当なハードウェアコンポーネント、または例えば、システムオンチップにおける上記のいくつかまたは全ての組み合わせ、の一部を指すか、または含むことを指す。用語「モジュール」は、プロセッサが実行するコードを格納するメモリ（共有、専用、またはグループ）を含む。
【００３４】
ここで使われるように、用語「コード」は、ソフトウェア、ファームウェア、及び／又はマイクロコードを含み、プログラム、ルーチン、関数、クラス、及び／又はオブジェクトを指す。用語「共有」は、ここで使われるように、複数のモジュールからのいくつかまたはすべてのコードがシングル（共有）プロセッサを使用して実行されることを意味する。また、複数のモジュールからのいくつかまたはすべてのコードがシングル（共有）メモリに記憶される。用語「グループ」として、ここで使われるように、単一のモジュールからのいくつかまたはすべてのコードがプロセッサ群を用いて実行されることを意味する。また、単一のモジュールからのいくつかまたはすべてのコードがメモリ群を用いて格納される。
【００３５】
ここで記述されるシステム及び方法は、一つ以上のプロセッサが実行する一つ以上のコンピュータプログラムによって実現される。コンピュータプログラムは、非一時的な具体的なコンピュータ読み取り可能な媒体に格納されるプロセッサ実行可能な命令を含む。コンピュータプログラムは、また、格納されたデータを含む。非一時的な具体的なコンピュータ読み取り可能な記録媒体の非制限的な例として、不揮発性メモリ、磁気記憶装置、及び光記憶装置である。
【００３６】
添付の図面１〜５と関連付けて本発明の実施例を説明する。ここで記述される具体的な実施例は、本発明を説明することのみを目的とし、本発明を限定することを目的としないと理解されるべきものである。本発明の目的に従って、ここで具体化し広く説明するように、本発明は、１つのアスペクトにおいて、ウイルススキャンのための方法と装置、一つ以上のプロセッサにより実行されるときに、ウイルススキャン実行のための方法を装置に実行させる命令を格納する非一時的なコンピュータ読み取り可能な媒体に関する。
【００３７】
第１の実施例
図１を参照し、本発明の第１実施例によるウイルススキャン方法を概略的に示す。その方法は、以下のステップを含む。
【００３８】
ステップ101において、システムの状態を検出する。
【００３９】
ここでは、システムとは、端末（携帯電話やコンピュータなど）におけるハードウェアおよびソフトウェアリソースのすべてに対して管理や制御を行うためのプログラムモジュールのセットを指すものとする。これに対応して、システムの状態とは、システムにおけるプログラムモジュールの動作時に発生する種々の状況を指すものとする。
【００４０】
一般的には、システムの状態は、システムにおけるプログラムモジュールの動作中のシステムリソースへの占有によるビジー状態とアイドル状態を含む。例えば、システムリソースの現在の占有率が所定の占有率よりも大きい場合、当時のシステムの状態はビジー状態として定義することができ、システムリソースの現在の占有率が所定の占有率よりも少ない場合には、当時のシステムの状態をアイドル状態として定義することができる。
【００４１】
ステップ１０２において、システム状態が忙しい時には、現在のウイルススキャンが開始していない場合に、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合に、現在のウイルススキャンの速度を減らし、第１の所定時間内に検出されたシステム状態がすべて忙しい時には、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録する。
【００４２】
ステップ１０３において、システム状態がアイドル状態の時には、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンを開始しない場合に、前回のウイルススキャンのスキャン進行状況を取得し、そのスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録する。
【００４３】
要するに、本発明の第１実施例によるウイルススキャンのための方法は、システム状態に応じてスキャン進行状況を調整することができ、前回のスキャン進行状況からウイルススキャンを続けることができることにより、ユーザー体験を改善しながら、ウイルススキャンの時間を大幅に減らす。
【００４４】
第２の実施例
図２を参照し、本発明の第２実施例によるウイルススキャン方法を概略的に示す。その方法は、以下のステップを含む。
【００４５】
ステップ２０１において、すべてのハードディスクのパーティションを列挙し、ツリー構造へハードディスクのパーティションを追加する。そのツリー構造の各ノードの属性には、それがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる。
【００４６】
順次にウイルススキャンし、中断時に継続的なウイルススキャンを確実にするために、ウイルススキャンの前にスキャンキューを取得する必要がある。また、スキャンキューを取得するために、最初にパーティションにおけるファイルとディレクトリを列挙する必要がある。この実施例では、スキャン時間を短縮するために、ウイルススキャンは、ウイルススキャン中にスキャンと列挙を同時に行うことによって実行される。
【００４７】
この実施例では、スキャンの進行状況を保存するためにツリー構造を提供する。このように、ウイルススキャンの前に、最初にすべてのハードディスクのパーティションを列挙し、ツリー構造にハードディスクのパーティションを追加する必要がある。列挙の進行状況とスキャンの進行状況の確定を容易にするために、ツリー構造における各ノードの属性を定義する。スキャンの進行状況と各ノードの列挙の進行状況を記録するために、その属性として、それがファイルなのか、列挙が終了したか、スキャンが終了したかのように定義する。
【００４８】
ハードディスクのパーティションが位置するノードの属性として、例えば、ファイルではなく、列挙がまだ未完成、スキャンがまだ未完成のように、定義する。
【００４９】
ステップ２０２において、ハードディスクのパーティションごとのディレクトリやファイルのすべてを列挙し、ツリー構造にハードディスクのパーティションにおけるディレクトリやファイルをノードとして追加し、ディレクトリやファイルが位置するノードの属性をセットし、スキャンキューにファイルを追加する。
【００５０】
一般的に、それぞれのパーティションが多くのディレクトリとファイルを含むため、パーティションに対応するノードの下のサブノードにディレクトリとファイルを１つずつ追加する必要がある。例えば、パーティションAがファイルA1とディレクトリA2を含み、ディレクトリA2がファイルA21とディレクトリA22を含む。ファイルA1とディレクトリA2を、パーティションAが位置するノードの2つのサブノードとしてツリー構造に加える必要があり、ファイルA21、ファイルA22を、ディレクトリA2が位置するノードの２つのサブノードとしてツリー構造に加える必要がある。
【００５１】
ディレクトリとファイルがノードとしてツリー構造に追加された場合、ディレクトリとファイルが位置するノードの属性を別々にセットする必要がある。
【００５２】
一般的に、一つのディレクトリが列挙される場合、列挙が終了していれば、ディレクトリが位置するノードの属性がENUMERATION FINISHED（列挙終了）に設定され、列挙が未完成であれば、ディレクトリが位置するノードの属性がENUMERATION UNFINISHED(列挙未完成)に設定される。１つのディレクトリの下におけるファイルやディレクトリがスキャンされる場合、ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが終了していれば、ディレクトリが位置するノードの属性がSCANNING UNFINISHED(列挙未完成)に設定され、ディレクトリの下におけるすべてのファイルとサブディレクトリのスキャンが未完成であれば、ディレクトリが位置するノードの属性がSCANNING UNFINISHED(列挙未完成)に設定される。１つのファイルをスキャンする場合に、ファイルのスキャンが終了していれば、そのファイルが位置するノードの属性がSCANNING FINISHED（スキャン終了）に設定され、ファイルのスキャンが未完成であれば、そのファイルが位置するノードの属性がSCANNING UNFINISHED（スキャン未完成）に設定される。例えば、ファイルがまだスキャンされていないノードの属性が、ファイルであり、列挙が完成し、スキャンが未完成のように設定される。別の例では、ファイルがスキャンされたノードの属性が、ファイルであり、列挙が完成し、スキャンが完成のように設定される。更なる例では、列挙が完成しスキャンがまだ未完成のディレクトリが位置するノードの属性が、ファイルではなく、列挙が完成し、スキャンがまだ未完成のように設定される。さらにもう一つの例では、列挙がまだ未完成のディレクトリが位置するノードの属性が、ファイルではなく、列挙がまだ未完成であり、スキャンが未完成のように設定される。当然、実際のアプリケーションでは、各ノードの属性が、そのノードが実際にファイルなのか、列挙が終了したか、スキャンが終了したかによって設定される。
【００５３】
確かに、ファイルスキャンを行うためには、スキャキューに列挙されたファイルを常に追加する必要がある。
【００５４】
実際のアプリケーションでは、ウイルスが最初にスキャンされるか、又はスキャンの中断がまだ発生しなかった場合、一般的には、まず、列挙によってスキャンキューを取得するためにステップ２０１およびステップ２０２を実行する必要があり、そして、システムは、スキャンキューによってウイルススキャンを行うことができる。スキャン時間を減少させるために、この実施例では、列挙とスキャンを同時に実行する方法を提供する。このように、次のスキャンの間、絶えずスキャンの進行状況に応じてツリー構造をリフレッシュする必要がある。具体的なスキャンプロセスは、ステップ２０３からステップ２１１までを参照することができる。
【００５５】
ステップ２０３において、システムの状態を検出する。
【００５６】
ここでは、システムとは、端末（携帯電話やコンピュータなど）におけるハードウェアおよびソフトウェアリソースのすべてに対して管理と制御を行うためのプログラムモジュールのセットを指すものとする。これに対応して、システムの状態とは、システムにおけるプログラムモジュールの動作時に発生する種々の状況を指すものとする。
【００５７】
一般的には、システムの状態は、システムにおけるプログラムモジュールの動作中のシステムリソースへの占有によるビジー状態とアイドル状態を含む。例えば、システムリソースの現在の占有率が所定の占有率よりも大きい場合、当時のシステムの状態はビジー状態として定義することができ、システムリソースの現在の占有率が所定の占有率よりも少ない場合には、当時のシステムの状態をアイドル状態として定義することができる。
【００５８】
一般的には、システム資源の占有率は、複数のパラメータによって決定される。ここでは、パラメータは、CPU使用状態、メモリ使用状況、ディスク入力/出力の伝送速度は、端末がフルスクリーン状態にあるか、ユーザの入力があるか、を含む。
【００５９】
従って、端末が入力状態またはフルスクリーン状態にあるかを検出することができ、システムリソースの現在の占有率を検出することができる（例えば、CPU使用状態、メモリ使用状況、およびディスク入力/出力の伝送速度を検出することができる）。端末が入力状態またはフルスクリーン状態であれば、検出されたシステムの状態がビジーであると判断される。端末が入力状態またはフルスクリーン状態でなければ、検出されたシステムリソースの現在の占有率（例えば、CPU使用状況、メモリ使用状況によって、ディスク入力/出力の伝送速度によって検出されたシステムリソースの占有率）が所定の占有率よりも大きい場合、検出されたシステムの状態がビジーであると判断される。端末が入力状態またはフルスクリーン状態でなければ、第２の所定時間内に検出されたシステムリソースの現在の占有率（例えば、CPU使用状況、メモリ使用状況によって、ディスク入力/出力の伝送速度によって検出されたシステムリソースの占有率）が所定の占有率より大きくない場合、検出されたシステムの状態がアイドルであると判断される。
【００６０】
当然、パラメータに加えて、いくつかの他の判定条件をシステムリソースの占有率の測定に用いることができる。例えば、システムリソースの現在の占有率は、日の異なる時間によって決定でき、ユーザのコンピュータは昼の時間にアイドルの可能性が高いと考えられる。システムリソースの現在の占有率は、また、多くのシステムリソースを占有する、いくつかのプログラム、いくつかの大規模なプロジェクト、設計プロセス、大規模なゲームなどの統計を取ることによって決定されることができ、これらのプログラムがシステムで実行する時、システムがビジーであると判断される。当然、ユーザが電池を使うことを検出された場合、電池の使用を節約するためにスキャンを休止し、ユーザが３Ｇネットワークを利用する場合に、ユーザのデータトラフィックを節約するためにスキャンを実行しないものとする。
【００６１】
ステップ２０４において、システム状態が忙しい時には、現在のウイルススキャンが開始していない場合に、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合に、現在のウイルススキャンの速度を減らし、第１の所定時間内に検出されたシステム状態がすべて忙しい時には、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録する。
【００６２】
現在のウイルススキャンを行う前に、システム状態がビジーであることを検出した場合、現在のウイルススキャンを待ち続ける必要があり、すなわち、現在のウイルススキャンは、この時点で始まらない。
【００６３】
ローカルのウイルススキャンが既に進行中である時、システム状態がこの時点で忙しいことを検出した場合、ローカルのウイルススキャンの速度を低減することができ、これにより、現在のウイルススキャンによるシステムの占有を減少させる。そして、システムの状態が連続して検出され、システムの状態が第１所定時間内にすべて忙しい場合、システムにおける他のプログラムがシステムを使っており、高いシステム占有率が必要となり、この時にウイルススキャンを停止させることができ、これにより、ユーザ体験への影響を避ける。
【００６４】
具体的な実施では、第１の所定時間は、端末のいくつかの要因によって決定されることができる。例えば、第１の所定時間が、端末システムにおけるリソースの現在の占有率及びウイルススキャンによるリソースの現在の占有率などの要因によって決定されることができる。
【００６５】
毎回のウイルススキャンの間に又はスキャンの終了後に、ウイルススキャンの進行状況を記録する必要がある。すなわち、スキャンが毎回に終わった後、スキャンの進行状況のツリー構造における各ノード及び各ノードの属性に対応する状態を蓄積し保存する必要がある。
【００６６】
ステップ２０５において、システム状態がアイドル状態の時には、現在のウイルススキャンが開始した場合に、現在のウイルススキャンを続け、現在のウイルススキャンが開始していない場合に、前回のウイルススキャンのスキャン進行状況を取得する。
【００６７】
システム状態がアイドルであることが検出される時、また、同時に現在のウイルススキャンが実行されている場合、現在のウイルススキャンを続ける。
【００６８】
システム状態がアイドルであることが検出される時、現在のウイルススキャンが開始していない場合、現在のウイルススキャンで使用するために前のウイルススキャンの進行状況を最初に取得する必要がある。
【００６９】
上記のツリー構造によれば、毎回のスキャンの間にスキャン進行状況で列挙やスキャンしたファイルとディレクトリの全ての属性が記録され、このように、スキャン進行状況（例えば、そこに記録されたスキャンしたファイル）がスキャンが終了する時にスキャンキューにおいて最終にスキャンしたファイルの位置として理解される。
【００７０】
ステップ２０６において、ツリー構造において深さ優先探索を行い、ノードが、ツリー構造におけるスキャン進行状況に対応するノードに追従し、スキャンまたは列挙されなかったかをチェックする。
【００７１】
毎回のスキャンの終了後にスキャン状態とスキャン進行状況が記録され、すなわち、毎回のスキャンの終了時にツリー構造を保存するため、次のスキャンの開始時にツリー構造の内容を最初に読む必要がある。
【００７２】
読んだ後に、ツリー構造における深さ優先探索を行い、前回のスキャンにおける終了位置に対応するファイルに従ってツリー構造におけるファイルに対応するノードを見つけ、ツリー構造におけるノードに追従しスキャンまたは列挙がまだ未完成のノードがあるかをチェックする。ここでは、ノードのスキャンまたは列挙が終了したについてノードの属性によって決定される。
【００７３】
図３を参照し、図３におけるノードAとノードBは、パーティションA及びパーティションBをそれぞれ表す。そのうち、パーティションAはファイルA１とディレクトリA２を含み、ディレクトリA２はファイルA21とディレクトリA22を含む。パーティションBはディレクトリB１とファイルB２を含み、ディレクトリB1 はファイルB11とディレクトリB12を含む。前回のスキャンの終了位置がファイルA21である場合、この時点でのノードA2の属性によって、ディレクトリA2にはまだスキャンされなかったファイルやディレクトリがまたあることを判定することができ、当然、ノードB1とノードB2の属性によってその列挙が完成したかについて判定することができる。
【００７４】
深さ優先探索について、当業者が理解し実行することができるため、ここで説明を繰り返さない。
【００７５】
ステップ２０７において、ノードがスキャンされなかった場合、そのノードはファイルが位置するノードであるかを判定する。Ｙesの場合、ノードをスキャンキューに加え、それ以外の場合、ノードのすべてのサブノードへの深さ優先探索を続ける。
【００７６】
スキャンキューが、前回のスキャンが終了した後に記録されたスキャンキューで、スキャンの間に絶え間ない列挙とスキャンによって、新たに列挙されたファイルがスキャンキューに常に追加される。
【００７７】
また、図３を参照し、この時点でのスキャンキューが順次に配置されたファイルA1とファイルA21だけを含む場合、スキャンキューにおいてファイルA21の後にファイルA22を追加する必要がある。その後のチェックと列挙の間、スキャンキューにおいてファイルA21の後にファイルB11、ファイルB12、ファイルB2を順次に追加する可能性もある。
【００７８】
ステップ２０８において、ノードがまだ列挙されていない場合、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、そして、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識する。
【００７９】
即ち、ノードが列挙されなかった場合、それは、そのノードがディレクトリが位置するノードであることを示し、この時点でディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下のファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、サブディレクトリの列挙を続け、ディレクトリが位置するノードが処理されるようにサブディレクトリの処理を続ける必要がある。ディレクトリが位置するノードの再帰的トラバースを通じて、ディレクトリが位置するノードの列挙が終了した後にディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識する。
【００８０】
ここでの再帰的トラバースは以下の通りである。具体的な実施においては、以下のように実行できるファンクションは、ディレクトリのために最初に定義される。スキャンキューにディレクトリの下のファイルを追加し、ディレクトリが位置するノードの下に列挙したサブディレクトリをツリー構造に追加し、そして、ディレクトリの下の全てのサブディレクトリは、ディレクトリのための列挙を実行するようにファンクションを呼び出す。
【００８１】
再帰的トラバースについては、当業者が理解し実行することができ、また、本発明の発明のポイントとしないため、ここでその説明を繰り返さない。
【００８２】
ステップ２０９において、スキャンの進行状況に応じてスキャンキュー内のファイルをスキャンする。
【００８３】
実際のアプリケーションでは、ファイルをスキャンする間、最低のスキャン速度を確保するために、一つのファイルは複数のユニットに分割できる。各ユニットをスキャンする時、最初にシステム状態を判定し、システムがアイドルの場合にユニットをスキャンし、ユニットのスキャンの終了時に次のユニットに対してスキャンを行う。システム状態がビジーの場合、一定の時間を待ってから、システムの状態への判定を続け、システムがビジーであれば、待ち続け、システムが第１の所定時間を待機した後システムがまだ忙しい場合、ユニットのスキャンを終了し、次のユニットのスキャンを実行する。
【００８４】
スキャンの間、ファイルやディレクトリの属性を常に設定する必要がある。例えば、１つのファイルのスキャンが終了した後、ツリー構造においてファイルが位置するノードを検索し、ファイルが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定し、１つのディレクトリの下のすべてのファイルとサブディレクトリのスキャンが終了した後、ディレクトリが位置するノードの属性をSCANNING FINISHED（スキャン終了）として設定する。
【００８５】
ステップ210では、現在のウイルススキャンのスキャン進行状況を記録する。
【００８６】
スキャンと列挙のプロセスでツリー構造における各ノードの属性を設定し標識するため、現在のウイルススキャン中に列挙又はトラバースされる各ディレクトリの属性、及びそのディレクトリがスキャンされたかは、スキャンの終了時にツリー構造によって記録することができる。現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びそのファイルがスキャンされたかを、記録することができる。スキャンしたファイルがリスクファイルなのかを記録することができる。また、ファイルがリスクファイルの場合、リスクの名前とファイルのハッシュ値を記録する。
【００８７】
実際のアプリケーションでは、より多くのファイルやディレクトリを列挙し、ツリー構造もより大きくなり、より大きなメモリを占有する。これにより、メモリの占有率を低減するために、一般的に、SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除する。
【００８８】
結論として、本発明の第２の実施形態に係るウイルススキャン方法は、システムの状態に応じてスキャンの進行状況を調整することができ、前回のスキャンの進行状況からウイルススキャンを続けることができるため、ウイルススキャン時間を大幅に減少しながら、ユーザ体験を改善することができる。
【００８９】
第３の実施例
図４を参照し、本発明の第３の実施形態に係るウイルススキャン装置を概略的に示す。ウイルススキャン装置は、上記のシステムにおけるプログラムモジュールや、上記に定義されたシステム状態を検出し、ウイルススキャンを実行し、その状態に応じて端末ハードディスク内のファイルやディレクトリを削除することができる装置である。その装置は検出モジュール４１０と、第１のスキャンモジュール４２０と、第２のスキャンモジュール４３０とを含む。
【００９０】
検出モジュール４１０は、システムの状態を検出するように構成される。
【００９１】
第１のスキャンモジュール４２０は、検出モジュールによりシステム状態がアイドルであることが検出されたとき、現在のウイルススキャンが開始した場合、現在のウイルススキャンを続け、また、現在のウイルススキャンが開始していない場合、前回のウイルススキャンのスキャン進行状況を取得し、そのスキャン進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録するように構成される。
【００９２】
第２のスキャンモジュール４３０は、検出モジュールによりシステムの状態がビジーであることが検出された場合、現在のウイルススキャンが開始していない場合、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合、現在のウイルススキャンの速度を減らし、また、第１所定時間内に検出されたシステムの状態がすべて忙しい時、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録する。
【００９３】
なお、本実施例によるウイルススキャン装置については、ウイルスキャンにおいて、機能モジュールの上記の分割の例で説明するだけに過ぎない。実際のアプリケーションでは、機能の割り当ては、必要とする異なる機能モジュールで行うことができ、即ち、装置の内部構成は、異なる機能モジュールに分割されることによって、上述の機能の全部又は一部を実現する。また、この実施例によるウイルススキャン装置は、第１の実施例に係るウイルススキャン方法に対応する。具体的な実施については、その方法の実施例を参照できるため、ここで説明を繰り返さないこととする。
【００９４】
要するに、本発明の第３実施例に係るウイルススキャン装置は、システムの状態に応じてスキャン進行状況を調整することができ、前回のスキャン進行状況からウイルススキャンを続けることができるため、ウイルススキャンの時間を大幅に減少しながら、ユーザ体験を改善することができる。
【００９５】
第４の実施例
図５を参照し、本発明の第４の実施形態に係るウイルススキャン装置を概略的に示す。ウイルススキャン装置は、上記のシステムにおけるプログラムモジュールや、上記に定義されたシステム状態を検出し、ウイルススキャンを実行し、その状態に応じて端末ハードディスク内のファイルやディレクトリを削除することができる装置である。その装置は第１の列挙モジュール５１０と、第２の列挙モジュール５２０と、検出モジュール５３０と、第１のスキャンモジュール５４０と、第２のスキャンモジュール５５０とを含む。
【００９６】
第１の列挙モジュール５１０は、すべてのハードディスクのパーティションを列挙し、ツリー構造にハードディスクのパーティションを追加するように構成される。ツリー構造の各ノードの属性には、それがファイルなのか、列挙が終了したか、スキャンが終了したかが含まれる。
【００９７】
第２の列挙モジュール５２０は、それぞれのハードディスクパーティションにおけるすべてのディレクトリ又はファイルを列挙し、パーティションにおけるディレクトリやファイルをツリー構造にノードとして追加し、ディレクトリ又はファイルが位置するノードの属性を設定し、スキャンキューにそのファイルを追加するように構成される。
【００９８】
検出モジュール５３０は、システムの状態を検出するように構成される。
【００９９】
検出モジュール５３０は、検出ユニット５３１と、第１の判定ユニット５３２と、第２の判定ユニット５３３と、第３の判定ユニット５３４とを含む。
【０１００】
検出ユニット５３１は、入力状態又はフルスクリーン状態にあるかを検出し、システムリソースの現在の占有率を検出するように構成される。
【０１０１】
第１の判定ユニット５３２は、上記検出ユニットにより入力状態又はフルスクリーン状態にあることが検出された場合、検出されたシステムの状態がビジーであると判定するように構成される。
【０１０２】
第２の判定ユニット５３３は、上記検出ユニットにより入力状態やフルスクリーン状態ではないことが検出された場合、検出されたシステムリソースの現在の占有率が所定の占有率よりも大きい場合、検出されたシステムの状態がビジーであると判定するように構成される。
【０１０３】
第３の判定ユニット５３４は、上記検出ユニットにより入力状態やフルスクリーン状態ではないことが検出された場合、第２の所定時間内に検出されたシステムリソースの現在の占有率が所定の占有率よりも大きくない場合、検出されたシステムの状態がアイドルであると判定するように構成される。
【０１０４】
第１のスキャンモジュール５４０は、検出モジュール５３０によりシステム状態がアイドルであることが検出された時、現在のウイルススキャンが開始した場合、現在のウイルススキャンを続け、また、現在のウイルススキャンが開始していない場合、前回のウイルススキャンのスキャン進行状況を取得し、そのスキャンの進行状況に応じて現在のウイルススキャンを開始し、現在のウイルススキャンのスキャン進行状況を記録するように構成される。
【０１０５】
第１のスキャンモジュール５４０は、トラバースユニット５４１と、第１のトラバースサブユニット５４２と、第２のトラバースサブユニット５４３と、スキャンユニット５４４とを含む。
【０１０６】
トラバースユニット５４１は、ツリー構造において深さ優先探索を実行し、ツリー構造においてスキャンの進行状況に対応するノードに追従し、ノードがスキャンまたは列挙されなかったかをチェックするように構成される。
【０１０７】
第１のトラバースサブユニット５４２は、ノードがスキャンされなかったことをトラバースユニットが検知した時、そのノードがファイルの位置するノードであるかを判定し、肯定の場合にそのノードをスキャンキューに加えて、それ以外の場合にそのノードのすべてのサブノードに対して深さ優先探索を続けるように構成される。
【０１０８】
第２のトラバースサブユニット５４３は、ノードがまだ列挙されていないことをトラバースユニットが検知した時、ディレクトリが位置するノードを列挙し、ディレクトリが位置するノードの下に列挙されたファイルをスキャンキューに追加し、ディレクトリが位置するノードの下に列挙されたサブディレクトリをツリー構造に追加し、そして、ディレクトリが位置するノードを再帰的にトラバースし、ディレクトリが位置するノードの列挙が終了した後に、ディレクトリが位置するノードをENUMERATION FINISHED（列挙終了）として標識するように構成される。
【０１０９】
スキャンユニット５４４は、スキャンの進行状況に応じてスキャンキュー内のファイルをスキャンするように構成される。
【０１１０】
また、第１のスキャンモジュール５４０は、記録ユニット５４５と削除ユニット５４６を更に含む。
【０１１１】
記録ユニット５４５は、現在のウイルススキャン中に列挙又はトラバースされた各ディレクトリの属性、及びそのディレクトリがスキャンされたかを、現在のウイルススキャンの終了時に、ツリー構造に対応し記録し、現在のウイルススキャン中に列挙又はトラバースされる各ファイルの属性、及びそのファイルがスキャンされたかを記録し、スキャンしたファイルがリスクファイルなのかを記録し、また、ファイルがリスクファイルの場合にリスクの名前とファイルのハッシュ値を記録するように構成される。
【０１１２】
削除ユニット５４６は、SCANNING FINISHED（スキャン終了）として標識する、ディレクトリが位置するノードの下のすべてのファイルとサブディレクトリを削除するように構成される。
【０１１３】
第２のスキャンモジュール５５０は、システム状態が忙しいことを検出モジュール５３０が検知した時に、現在のウイルススキャンが開始していない場合に、現在のウイルススキャンのために待機し、現在のウイルススキャンが開始した場合に、現在のウイルススキャンの速度を減らし、第１の所定時間内に検出されたシステム状態がすべて忙しい時に、現在のウイルススキャンを停止し、現在のウイルススキャンのスキャン進行状況を記録するように構成される。
【０１１４】
なお、本実施例によるウイルススキャン装置については、ウイルスキャンにおいて、機能モジュールの上記の分割の例で説明するだけに過ぎない。実際のアプリケーションでは、機能の割り当ては、必要とする異なる機能モジュールで行うことができ、即ち、装置の内部構成は、異なる機能モジュールに分割されることによって、上述の機能の全部又は一部を実現する。また、この実施例によるウイルススキャン装置は、第２の実施例に係るウイルススキャン方法に対応する。具体的な実施については、その方法の実施例を参照できるため、ここで説明を繰り返さないこととする。
【０１１５】
要するに、本発明の第４実施例に係るウイルススキャン装置は、システムの状態に応じてスキャン進行状況を調整することができ、前回のスキャン進行状況からウイルススキャンを続けることができるため、ウイルススキャンの時間を大幅に減少しながら、ユーザ体験を改善することができる。
【０１１６】
本発明の上記実施例のシーケンス番号が説明の利便性のみのためであり、実施例に対する好みを暗示しないとする。
【０１１７】
なお、本発明の実施例によるすべてまたは一部のステップは、、ハードウェアまたは関連したハードウェアを指示するプログラムによって実行される。本発明の更に別の態様は、コンピュータ実行可能な命令またはプログラムコードを記憶する非一時的なコンピュータ読み込み可能な記憶媒体を提供する。コンピュータ実行可能な命令またはプログラムコードが、コンピュータまたは類似したコンピューティング装置をウイルススキャン方法での各種の操作を完了するのを可能にする。記憶媒体は、磁気ディスク、光ディスク、読み出し専用メモリ（ROM）、ランダムアクセスメモリ（RAM）、ランダムメモリ（RAM）、フラッシュ・ダイブなどを含むが、これらに限らない。
【０１１８】
以上、本発明の典型的な実施例に対する上記の説明は、図示および説明の目的だけのために提示されるとし、本発明を正確な形に制限又は徹底することを意図していないものである。上記の教示に応じて多くの変更および改善が可能である。
【０１１９】
上記の実施形態は、意図する特定の用途に適するように、他の当業者をアクティブし、種々の変形とともに本発明及び様々な実施形態を利用するするように、本発明およびその実際の適用の原理を説明するために、選択され説明された。代替的な実施形態は、本発明がその精神および範囲から逸脱することなく属する分野の当業者にとって明らかになるであろう。従って、本発明の範囲は、前述の説明およびそこに記載された例示的な実施形態ではなく、添付の特許請求の範囲によって定義される。
【図３】
0005797855.tif 000002
【図１】
0005797855.tif 000003
【図２】
0005797855.tif 000004
【図４】
0005797855.tif 000005
【図５】
0005797855.tif 000006