ファイルへのアクセスを記録するには?


ギビリロ  2009-11-01 22:08:31  No: 142725  IP: [192.*.*.*]

こんにちわ。質問があります。

ファイルへのアクセスを記録し、簡単なアクセスログを作ろうと思っています。

具体的には、いつどのファイルを開いたかを記録しTXTファイルなどに記録していくことを考えています。

「あるファイルを開いた」ことを取得する関数はありますか?

よろしくお願いいたします。

編集 削除
オショウ  2009-11-01 22:29:48  No: 142726  IP: [192.*.*.*]

前提条件や環境の提示がないので・・・

まず一般アプリでは無理です。
尚、そういう関数も多分ありません。

技術的に可能か?
といえば可能です。
1. API HOOKを使ってみる。
2. フィルタードライバーを作ってファイルのオープンを
   監視する。

でしょうか・・・

フィルタドライバー関連書籍として
WindowsXPフィルタドライバプログラミング
入門と実践  技術評論社  ISBN4-7741-1666-1 \3250
(残念ながら絶版みたい・・・)

何にせよ、すごく高速なレスポンスが要求されますので
C言語系でないと無理かと。

ただし、ファイルの変更を監視する機能はありますが、
高速に読み書き読み書きされれば、取りこぼしはありま
す。尚、監視するドライブ・フォルダを指定しないとい
けないので、どこでも・・・と言うわけにはいきません。

http://dobon.net/vb/dotnet/file/filesystemwatcher.html

以上。参考まで

編集 削除
YuO  2009-11-02 00:54:53  No: 142727  IP: [192.*.*.*]

ファイルの監査機能では不足ですか?
http://itpro.nikkeibp.co.jp/article/COLUMN/20061127/254976/

Vistaだと,例えば
==== ここから ====
オブジェクトに対するハンドルが要求されました。

サブジェクト:
  セキュリティ ID:    (machine)\(user)
  アカウント名:    (user)
  アカウント ドメイン:    (machine)
  ログオン ID:    (id)

オブジェクト:
  オブジェクト サーバー:    Security
  オブジェクトの種類:    File
  オブジェクト名:    (file)
  ハンドル ID:    0x2e0

プロセス情報:
  プロセス ID:    0x1c04
  プロセス名:    C:\Program Files\Windows Media Player\wmplayer.exe

アクセス要求情報:
  トランザクション ID:    {00000000-0000-0000-0000-000000000000}
  アクセス:    READ_CONTROL
      SYNCHRONIZE
      ReadData (または ListDirectory)
      ReadEA
      ReadAttributes
      
  アクセス マスク:    0x120089
  アクセスの確認に使用した特権:  -
  制限された SID 数:  0
==== ここまで ====
のようなものが,セキュリティログに書き出されます。
あとは,この情報を収集してやればログはできあがると思いますが。

編集 削除
ギビリロ  2009-11-03 01:17:22  No: 142728  IP: [192.*.*.*]

お返事ありがとうございます。

非常に難しい技術だということ、ファイルの監査機能を使ったやり方もあるということ、わかりました。

PCはXPを使っています。

ファイルの監査機能ではファイルにアクセスした日時を記録することは可能ですか?

VBと逸脱して恐縮ですが、何とぞよろしくお願いいたします。

編集 削除