(57)【要約】【課題】インターネットに接続されたコンピューターに他のインターネットに接続されたコンピューターから不正侵入した者が不正侵入の痕跡を消し去ってしまう為、犯人逮捕につながらずコンピューターの動作記録のＬｏｇファイルがあまり効果的に使用されていないという問題がある。【解決手段】コンピューターの動作記録のＬｏｇファイルは、コンピューターの動作を全て記録しています。当然、何らの問題も無い場合でも記録し続けています。Ｌｏｇファイルが書き換えられた時にそのファイルの内容を確認して問題が有った場合には速やかに画面に表示してカメラなどによる撮影を行う事が出来る状態にするコンピューターソフトウェアを開発する事でＬｏｇファイルの効果的利用を可能にします。【選択図】    図２
2009043109.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターの動作を記録しているファイルに書き込みがあった時に書き込まれる前の内容と書き込みがあった時の内容とを比較して内容が違った場合には、操作画面に書き込みがあった後のファイルの内容と書き込みされる前の内容を表示するコンピューターソフトウェア
【請求項２】
コンピューターの動作を記録しているファイルに書き込みがあった時に書き込まれる前の内容と書き込みがあった時の内容とを比較して内容が違った場合には、操作画面に書き込みがあった後のファイルの内容と書き込みされる前の内容を表示するコンピューターソフトウェアプログラムを含むコンピューターソフトウェア製品
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インターネットのセキュリティ上、Ｌｏｇファイルが作成されているがそのＬｏｇファイルを書き換えられた場合のコンピューターの動作に関する
【背景技術】
【０００２】
Ｌｏｇファイル書き換え技術に関する文献としては、（非特許文献１）があります。
【非特許文献１】ＩＰＵＳＩＲＯＮ著  ハッカーの教科書  完全版  発行所  株式会社  データハウス  2006/06/10 初版第六刷発行  Ｐ２８６
【発明の開示】
【発明が解決しようとする課題】
【０００３】
インターネットに接続されたコンピューターに他のインターネットに接続されたコンピューターから不正侵入した者が不正侵入の痕跡を消し去ってしまう問題
【課題を解決するための手段】
【０００４】
図１と図３と図４は、実際とは、大きく異なります。また、本発明のＬＯＧ監視コンピューターソフトウェアの事をＬＯＧ監視ソフトウェアと、呼ぶ事があります。
【０００５】
今までは、Ｌｏｇファイルのコピーを別の場所に作成したり、暗号化処理したりしていたが、残念ながら暗号化では、暗号を解読されてしまうという問題がありました。また、別の場所にコピーを保存していてもその在り処を探り当てられてしまうという問題がありました。この問題を無くすには、ファイルが書き換えられた時にそのファイルの内容を確認して問題が有った場合には速やかに画面に表示してカメラなどによる撮影を行う事が出来る状態にする事で対応するしか無いと思っています。そこで、本発明のＬＯＧ監視コンピューターソフトウェアを作成しました。この様なソフトウェアは、今まで無かったと思っています。実施例では、マイクロソフト株式会社のfileSystemWatcherを使用しましたが、ＴＳＳシステムでファイルを開いて内容を比較するという方式も考えられます。
【発明の効果】
【０００６】
インターネットに接続されたコンピューターに他のインターネットに接続されたコンューターから不正侵入する犯罪者の検挙率が上がり、結果的にこの様な犯罪が少なくなると思われます。現在の日本の法律では、無料のホームページ用のスペースを貸し出しているサーバーの管理者は、その無料のホームページを利用している利用者の個人情報を管理しなくて良いという状態です。その為、ＵＲＬでは、残念ながら、犯人逮捕まではできません。ＵＲＬでは、そのホームページがあるサーバーが何処にあるのか程度しか解らないからです。しかしながら、このＵＲＬから犯人に繋がる情報をサイト管理者が責任を持って管理しなければならないという法律が作られ施行されるようになれば、確実にインターネット犯罪を減少させる事ができるコンピューターソフトウェアになると確信しています。
【発明を実施するための最良の形態】
【０００７】
Ｌｏｇファイルを暗号化したり特殊なフォーマットで作成したり、いろいろ難解な状態にした上で本発明のＬＯＧ監視ソフトウェアを動作させるのが良いと思っております。なぜなら、メモリーに直接アクセスされて侵入の痕跡を無くすという行為がまだ残っているからです。
【０００８】
また、異常が発生した後、画面に書き換えられる前のＬｏｇファイルと書き換えられた後のＬｏｇファイルを表示する様になっていますが、この両方のファイルを印刷できる機能を付ける事が良い形態のソフトウェアだと思っています。
【実施例】
【０００９】
図１の＜実施例に於ける使用機材の説明図＞のように、図符号２のコンピューター本体と図符号３のキーボードと図符号４のマウスと図符号１のモニターで構成され、図符号２のコンピューター本体に全ての機材がケーブルで接続されたコンピューターシステムを使用して実施しました。
【００１０】
以下にソフトウェアのコードを記述します。開発コンパイラは、マイクロソフト株式会社の（登録商標）Microsoft Visual Studio２００５を使用してコーディングしました。図符号２のコンピューターは、ＤＯＳ／Ｖ汎用機を使用しました。ＯＳは、（登録商標）Windows XP Professionalを使用しました。Ｌｏｇファイルは、適当にテキストファイルを作成しました。そのテキストファイルをエディターで書き換えて期待通りの動作をするかどうかを確認しました。ＬｏｇＢｕｐ１［ｃｆ］をＬｏｇＢｕｐ１［ｅｇ］に書き換えた後の動作が図４の＜本発明のＬＯＧ監視コンピューターソフトウェアが異常を検知した時の操作画面＞です。
【００１１】
以下に、本発明のＬＯＧ監視コンピューターソフトウェアのプログラムコードを記載し、次に、図を使って、順次本発明のＬＯＧ監視コンピューターソフトウェアの動作を説明してあります。
【００１２】
Ｆｏｒｍ１．Ｄｅｓｉｇｎｅｒ．ｃｓファイル
【００１３】
namespace LogKansi
{
partial class Form1
{
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
/// <param name="disposing">マネージ
リソースが破棄される場合 true、破棄されない場合は false です。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.fileSystemWatcher1 = new System.IO.FileSystemWatcher();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.textBox2 = new System.Windows.Forms.TextBox();
this.richTextBox2 = new System.Windows.Forms.RichTextBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.textBox4 = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit();
this.SuspendLayout();
// 
// label1
// 
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(138, 12);
this.label1.TabIndex = 0;
this.label1.Text = "監視するLOGファイルの指定";
// 
// textBox1
// 
this.textBox1.Location = new System.Drawing.Point(12, 24);
this.textBox1.Name = "textBox1";
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal;
this.textBox1.Size = new System.Drawing.Size(776, 19);
this.textBox1.TabIndex = 1;
// 
// openFileDialog1
// 
this.openFileDialog1.FileName = "openFileDialog1";
// 
// fileSystemWatcher1
// 
this.fileSystemWatcher1.EnableRaisingEvents = true;
this.fileSystemWatcher1.SynchronizingObject = this;
this.fileSystemWatcher1.Deleted += new
System.IO.FileSystemEventHandler(this.fileSystemWatcher1_Deleted);
this.fileSystemWatcher1.Renamed += new
System.IO.RenamedEventHandler(this.fileSystemWatcher1_Renamed);
this.fileSystemWatcher1.Changed += new
System.IO.FileSystemEventHandler(this.fileSystemWatcher1_Changed);
// 
// button1
// 
this.button1.Location = new System.Drawing.Point(794, 23);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(64, 19);
this.button1.TabIndex = 2;
this.button1.Text = "参照";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
// 
// button2
// 
this.button2.Location = new System.Drawing.Point(787, 454);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(71, 21);
this.button2.TabIndex = 3;
this.button2.Text = "終了";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
// 
// button3
// 
this.button3.Location = new System.Drawing.Point(14, 49);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(110, 22);
this.button3.TabIndex = 4;
this.button3.Text = "監視の実行";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
// 
// textBox2
// 
this.textBox2.Location = new System.Drawing.Point(156, 2);
this.textBox2.Name = "textBox2";
this.textBox2.ReadOnly = true;
this.textBox2.Size = new System.Drawing.Size(32, 19);
this.textBox2.TabIndex = 5;
this.textBox2.Text = "0";
this.textBox2.Visible = false;
// 
// richTextBox2
// 
this.richTextBox2.BackColor = System.Drawing.SystemColors.Control;
this.richTextBox2.Location = new System.Drawing.Point(438, 96);
this.richTextBox2.Name = "richTextBox2";
this.richTextBox2.ReadOnly = true;
this.richTextBox2.ScrollBars =
System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
this.richTextBox2.Size = new System.Drawing.Size(420, 352);
this.richTextBox2.TabIndex = 7;
this.richTextBox2.Text = "";
this.richTextBox2.Visible = false;
// 
// richTextBox1
// 
this.richTextBox1.BackColor = System.Drawing.SystemColors.Control;
this.richTextBox1.Location = new System.Drawing.Point(12, 96);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ReadOnly = true;
this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
this.richTextBox1.Size = new System.Drawing.Size(420, 352);
this.richTextBox1.TabIndex = 8;
this.richTextBox1.Text = "";
this.richTextBox1.Visible = false;
// 
// label2
// 
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 81);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(183, 12);
this.label2.TabIndex
= 10;
this.label2.Text = "書き換えられる前のLogファイルの内容";
this.label2.Visible = false;
// 
// label3
// 
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(436, 81);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(183, 12);
this.label3.TabIndex = 11;
this.label3.Text = "書き換えられた後のLogファイルの内容";
this.label3.Visible = false;
// 
// textBox4
// 
this.textBox4.Location = new System.Drawing.Point(232, 2);
this.textBox4.Name = "textBox4";
this.textBox4.ReadOnly = true;
this.textBox4.Size = new System.Drawing.Size(32, 19);
this.textBox4.TabIndex = 12;
this.textBox4.Text = "0";
this.textBox4.Visible = false;
// 
// Form1
// 
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Control;
this.ClientSize = new System.Drawing.Size(866, 480);
this.Controls.Add(this.textBox4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.richTextBox2);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Log監視ソフトウェア";
this.FormClosing += new
System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.IO.FileSystemWatcher fileSystemWatcher1;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.RichTextBox richTextBox2;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox4;
}
}
【００１４】
Ｆｏｒｍ１．ｃｓファイル
【００１５】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace LogKansi
{
public partial class
Form1 : Form
{
//カレントディレクトリーの取得
string PathName = Application.StartupPath;
Boolean AnsTest = false;
string[] LogBup;
string[] LogBup1;
private StreamWriter StrmWriter;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//参照ボタン
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
}
private void button2_Click(object sender, EventArgs e)
{
//終了ボタン
Application.Exit();
}
private void button3_Click(object sender, EventArgs e)
{
//監視の実行ボタン
//LOGファイルのフルパスの保存
//ファイルを空白にして書き込む
StrmWriter = new StreamWriter(PathName + "\\LogPas.dat", false,
System.Text.Encoding.GetEncoding("Shift-JIS"));
StrmWriter.WriteLine(textBox1.Text);
//後処理
StrmWriter.Flush();
StrmWriter.Close();
//ファイル存在確認
AnsTest = File.Exists(PathName + "\\Logbackup.dat");
if (AnsTest == true)
{
File.Delete(PathName + "\\Logbackup.dat");
}
//ファイルの行数の確認
string LineData = "";
int a = 0;
StreamReader StrmReader = new StreamReader(textBox1.Text,
System.Text.Encoding.GetEncoding("Shift-JIS"));
while (StrmReader.Peek() != -1)
{
LineData = StrmReader.ReadLine();
a += 1;
}
StrmReader.Close();
textBox2.Text = a.ToString();
int Line = a;
LogBup = new string[Line];
//ファイルを読み込む
StrmReader = new StreamReader(textBox1.Text,
System.Text.Encoding.GetEncoding("Shift-JIS"));
for (int i = 0; i < Line; i++)
{
LogBup[i] = StrmReader.ReadLine();
}
//後処理
StrmReader.Close();
//ファイルの末尾に書き込む
StrmWriter = new StreamWriter(PathName + "\\Logbackup.dat", true,
System.Text.Encoding.GetEncoding("Shift-JIS"));
for (int i = 0; i < Line; i++)
{
StrmWriter.WriteLine(LogBup[i]);
}
//Logbackup.datを書き換えられる可能性があるので後処理はしない。
StrmWriter.Flush();
StrmWriter.Close();
Kansi();
}
private void Kansi()
{
//ここから監視を始める
string PasN = textBox1.Text;
string[] FileNData;
FileNData = PasN.Split('\\');
int b = 0;
b = FileNData.Length;
int c = 0;
c = FileNData[b - 1].Length;
int d = 0;
d = PasN.Length;
int f = 0;
f = c + 1;
d = d - f;
PasN = PasN.Remove(d);
fileSystemWatcher1.Path = PasN;
fileSystemWatcher1.Filter = FileNData[b - 1];
fileSystemWatcher1.NotifyFilter = NotifyFilters.LastWrite |
NotifyFilters.FileName;
fileSystemWatcher1.EnableRaisingEvents = true;
fileSystemWatcher1.SynchronizingObject = this;
}
private void Form1_Load(object sender, EventArgs e)
{
//ファイル存在確認
AnsTest = File.Exists(PathName + "\\LogPas.dat");
if(AnsTest == true)
{
//ファイルを読み込む
StreamReader StrmReader = new StreamReader(PathName + "\\LogPas.dat",
System.Text.Encoding.GetEncoding("Shift-JIS"));
textBox1.Text = StrmReader.ReadLine();
//後処理
StrmReader.Close();
}
}
private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
{
//書き込みされた場合
fileSystemWatcher1.SynchronizingObject = this;
KakikaeIbent();
}
private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
{
//ファイルが削除された場合
fileSystemWatcher1.EnableRaisingEvents = false;
fileSystemWatcher1.SynchronizingObject
= this;
LogView();
//MsgBoxを常に特定のフォームの前面に表示
MessageBox.Show(this,
"ファイルが削除されました。\n画面をカメラなどで撮影して警察に通報する事をお勧めします。",
"警告",MessageBoxButtons.OK,
MessageBoxIcon.Warning);
fileSystemWatcher1.Dispose();
}
private void fileSystemWatcher1_Renamed(object sender, RenamedEventArgs e)
{
//ファイル名が書き換えられた場合
fileSystemWatcher1.EnableRaisingEvents = false;
fileSystemWatcher1.SynchronizingObject = this;
LogView();
//MsgBoxを常に特定のフォームの前面に表示
MessageBox.Show(this,
"ファイルの名前が書き換えられました。\n画面をカメラなどで撮影して警察に通報する事をお勧めします。",
"警告",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
fileSystemWatcher1.Dispose();
}
private void KakikaeIbent()
{
fileSystemWatcher1.SynchronizingObject = this;
//ファイルの行数の確認
string LineData = "";
int a = 0;
StreamReader StrmReader = new StreamReader(textBox1.Text,
System.Text.Encoding.GetEncoding("Shift-JIS"));
while (StrmReader.Peek() != -1)
{
LineData = StrmReader.ReadLine();
a += 1;
}
StrmReader.Close();
int Line1 = a;
textBox4.Text = a.ToString();
LogBup1 = new string[Line1];
//ファイルを読み込む
StrmReader = new StreamReader(textBox1.Text,
System.Text.Encoding.GetEncoding("Shift-JIS"));
for (int i = 0; i < Line1; i++)
{
LogBup1[i] = StrmReader.ReadLine();
}
//後処理
StrmReader.Close();
int b = 0;
int c = 0;
b = int.Parse(textBox2.Text);
if (b < Line1) //行が増えているならば
{
for (int i = 0; i < b; i++)
{
if (LogBup[i] == LogBup1[i])
{
//LogBupとLogBup1を比較して全て同じであるならば、記録する
c++;
}
}
if (b == c)
{
//記録すると同時にLogBup1をLogBupに代入する
LogBup = new string[Line1];
//ファイルを空白にして書き込む
StrmWriter = new StreamWriter(PathName + "\\Logbackup.dat", false,
System.Text.Encoding.GetEncoding("Shift-JIS"));
for (int i = 0; i < Line1; i++)
{
StrmWriter.WriteLine(LogBup1[i]);
}
//Logbackup.datを書き換えられる可能性があるので後処理はしない。
StrmWriter.Flush();
StrmWriter.Close();
for (int i = 0; i < Line1; i++)
{
LogBup[i] = LogBup1[i];
}
textBox2.Text = a.ToString();
}
else
{
Higai();
return;
}
}
else
{
//行が増えていない場合
Higai();
return;
}
}
private void Higai()
{
fileSystemWatcher1.SynchronizingObject = this;
fileSystemWatcher1.EnableRaisingEvents = false;
LogView();
//MsgBoxを常に特定のフォームの前面に表示
MessageBox.Show(this,
"ファイルに書き込まれた情報が書き換えらました。\n画面をカメラなどで撮影して警察に通報する事をお勧めします。",
"警告", MessageBoxButtons.OK,
MessageBoxIcon.Warning);
fileSystemWatcher1.Dispose();
}
private void LogView()
{
fileSystemWatcher1.SynchronizingObject = this;
//フォームにLogBupとLogBup1の内容を表示する
label2.Visible = true;
label3.Visible = true;
richTextBox1.Visible = true;
richTextBox2.Visible = true;
int b = int.Parse(textBox2.Text);
int Line1 = int.Parse(textBox4.Text);
for (int i = 0; i < b; i++)
{
richTextBox1.AppendText(LogBup[i] + ("\n"));
}
if (Line1 != 0)
{
for (int i = 0; i < Line1; i++)
{
richTextBox2.AppendText(LogBup1[i] + ("\n"));
}
}
else
{
label3.Visible = false;
richTextBox2.Visible = false;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
fileSystemWatcher1.EnableRaisingEvents = false;
fileSystemWatcher1.Dispose();
}
}
}
【００１６】
Ｐｒｏｇｒａｍ.ｃｓファイル
【００１７】
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace LogKansi
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ
ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
【００１８】
上記、ファイルをビルドしてexeファイル(本発明のＬＯＧ監視コンピューターソフトウェア)を作成しました。図符号２のコンピューター本体の内蔵ハードディスクにこの作成したコンピューターソフトウェアをインストールして起動させました。次ぎからは、図２の＜本発明のＬＯＧ監視コンピューターソフトウェアの簡単なフローチャート説明図＞をご覧下さい。このソフトウェアを起動するとまず、ステップ１００が実行されます。データーベースに監視するファイルの絶対パスが保存されている場合は、これを読み込んで図３の操作画面のＬＯＧファイルの指定テキストボックスに表示するように指定します。次に、ステップ１０１で図３の操作画面を表示します。ステップ１０２では、人為的行為による処理と入力を行います。表示された操作画面のＬＯＧファイルの指定テキストボックスに表示された絶対パスを確認して良ければ、監視の実行ボタンを図符号４マウスで左クリックして、監視を開始させます。また、ＬＯＧファイルの指定テキストボックスに何も表示されていない場合や指定されたファイルではない別のファイルを指定したい場合は、参照ボタンを図符号４のマウスで左クリックして指定したいファイルを探して指定します。ステップ１０３に進みます。監視を始める前に監視するＬｏｇファイルを開いてその内容を配列に代入します。次に、Ｌｏｇファイルのコピーを作成します。この後、FileSystemWatcherを使用してファイルを監視します。ファイルに書き込みが有った場合にイベントを発生させます。ステップ１０４では、そのイベントを捕らえてＬｏｇファイルを開いて、最初に作成した配列とは、別に配列を作成して、その配列に書き込みがあった後のＬｏｇファイルの内容を代入します。次に、最初の配列の内容と書き込みがあった後に作成した配列の内容を比較して問題がなければ、Ｌｏｇファイルのコピーファイルに内容を保存します。保存し終わったら、書き込みがあった後に作成した配列の内容を最初に作成した配列にコピーして次の監視に使用できる状態にします。そうして、異常が無い場合は、監視を続行します。何らの異常も無いままに、ソフトウェアを終了したい場合は、図３の終了ボタンを図符号４のマウスで左クリックする事で終了できます。ステップ１０５からは、異常があった場合の動作です。異常が有った場合は、MessageBoxで警告をはっして、次に、書き込みの内容に異常が無かった内容と異常があった内容を表示するボックスを表示して、そのボックスにそれぞれの配列に代入されている内容を表示します。つまり、図４の＜本発明のＬＯＧ監視コンピューターソフトウェアが異常を検知した時の操作画面＞の様に表示させます。ステップ１０６に進みます。この画面をカメラなどで撮影した後、終了させたい場合は、図４の終了ボタンを図符号４のマウスで左クリックして終了させます。最後に、ステップ１０７に進みます。ここでは、次回起動させたときの為にデーターベースに監視するファイルの所在を示したフルパスを記録して終了します。
【００１９】
結果は、思った通りに動作しました。
【図面の簡単な説明】
【００２０】
【図１】実施例に於ける使用機材の説明図です。
【図２】本発明のＬＯＧ監視コンピューターソフトウェアの簡単なフローチャート説明図です。
【図３】本発明のＬＯＧ監視コンピューターソフトウェアを起動時の操作画面です。
【図４】本発明のＬＯＧ監視コンピューターソフトウェアが異常を検知した時の操作画面です。
【符号の説明】
【００２１】
１：モニター
２：コンピューター本体
３：キーボード
４：マウス
５：テキストファイル形式のデーターベース
６：コンピューターソフトウェアプログラム処理
７：人為的な手動による入力
【図１】
2009043109.tif 000003
【図２】
2009043109.tif 000004
【図３】
2009043109.tif 000005
【図４】
2009043109.tif 000006