- - PR -
ファイル監視について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-08 14:26
ファイル監視についてですが、現在C#でSystemFileWatcherで利用してイベントを取得
しているのですが、ファイルを開いたイベントやコピーが行われた際のイベントが 得られず困っております。具体的には最終更新日を張っているのですが分解能が1日 の為1日一回しかイベントが受け取れず対処に困っております。 又、過去ログでGetFileSecurityを利用する事で誰がアクセスしたのかが取れる様な 記述を見付けましたが、アクセス者の情報まで取得出来るのでしょうか? 現在、GetFileSecurityが動作せず{戻り(aaa)が偽}検証出来ずにおります。 ファイルを開いた、コピーした際のイベントの受け取り方、GetFileSecurityに ついてご存知の方おられましたらご教授願います。 環境 Windows XP 言語 C# // ACL の定義 [StructLayout(LayoutKind.Sequential)] public struct ACL { public byte AclRevision; public byte Sbz1; public int AclSize; public int AceCount; public int Sbz2; } // SECURITY_DESCRIPTOR の定義 [StructLayout(LayoutKind.Sequential)] public struct SECURITY_DESCRIPTOR { public byte Revision; public byte Sbz1; public int Control; public int Owner; public int Group; public ACL Sacl; public ACL Dacl; } // InitializeSecurityDescriptor の宣言 [DllImport("advapi32.dll", SetLastError = true)] public static extern bool InitializeSecurityDescriptor(ref SECURITY_DESCRIPTOR pSecurityDescriptor, uint dwRevision); // GetFileSecurity の宣言 [DllImport("advapi32.dll")] public static extern int GetFileSecurity(string lpFileName, int RequestedInformation, [MarshalAs(UnmanagedType.Struct)] ref SECURITY_DESCRIPTOR pSecurityDescriptor, int nLength, int lpnLengthNeeded); #使用箇所 SECURITY_DESCRIPTOR psd = new SECURITY_DESCRIPTOR(); bool binitSD = InitializeSecurityDescriptor(ref psd, 1); aaa = GetFileSecurity(e.FullPath, 1, ref psd, 1000, sdsize); | ||||||||
|
投稿日時: 2005-12-09 00:31
FileSystemWatcher ではないのですか?
こちらの意味が判りませんでした。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-12-09 15:17
仰る通りFileSystemWatcherの記述ミスです。
分解能が1日の為とは以下のMSのサイトを見て貰うと判るのですが、処理の最小単位 が1日の為、ファイルを開いた際のイベント(最終アクセス日)を取得しようとすると、 同日内で2回目以降のアクセスは日付が変わらない為イベントが発生しない。という 事です。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpsysinf/html/_win32_getfiletime.asp | ||||||||
|
投稿日時: 2005-12-09 17:23
takeさん、こんばんは。
FAT なんですか? リンク先のドキュメントには
とありますので、NTFS に CONVERT してみる、というのはダメでしょうか。 | ||||||||
|
投稿日時: 2005-12-09 17:28
ですね。 それで不足なら、自分でポーリングをするとか、システム監査機能を使ってどうにかするとか、そういう感じになると思います。 | ||||||||
|
投稿日時: 2005-12-09 17:44
いや、私の環境はNTFSですから厳密には1時間ですが、分解能が1日(1時間)
の為最終アクセスから1時間以上経過しないと最終アクセスのChangeイベント が取得出来ません。 実際にファイルを開いて頂ければ判ると思いますが、1時間以上アクセスして いないファイルを開くと最終アクセス(アクセス日時)が更新されます。 この際はChangeイベントが走りますが、その後1時間経過しない状態でファイル を開いても最終アクセスが更新されません。この為イベントが走りません。 ポーリングを掛けるにしても最終アクセスが更新されていないので同様です。 渋木宏明(ひどり)様 システム監査に関してはXPでも可能なのでしょうか? ローカルセキュリティポリシーにてオブジェクトへの成功/失敗を監視する設定 にしたのですが、監視対象のディレクトリでプロパティを開いても監査系のタブ が存在しないのですが、何か設定等あるのでしょうか? | ||||||||
|
投稿日時: 2005-12-09 18:10
できるはずです。
エクスプローラの「フォルダオプション」で「簡易ファイル共有」か何かのオプションを外せば「セキュリティ」タブが表示されるようになるはずです。 | ||||||||
|
投稿日時: 2005-12-09 18:12
ああ、1日が1時間でもダメなわけですね。失礼しました。 |