如何使用C#检测本地网络上的文件复制?

时间:2015-06-27 23:42:34

标签: c# .net winforms winapi io

我将使用.NET Framework创建一个简单的应用程序,该应用程序检测远程用户何时从运行该应用程序的计算机复制某个文件。

EG。

  • Machine1 (应用程序将在此处运行)
  • 计算机2

Machine2 上的用户访问 Machine1 上的共享目录,并将部分文件复制到 Machine2 目录。

我需要记录复制的文件名和请求复制的IP / DNS。

是否有一些Windows消息可以执行此操作?

甚至是任何IO类?

  

要求是我必须通过自定义应用程序执行此操作。

1 个答案:

答案 0 :(得分:1)

如果文件已被访问,您无法从C#程序中检测到,没有消息或公开的API会告诉您何时发生这种情况。您需要在操作系统中更低级别。执行此操作的常规方法是设置窗口本身以通过Computer Configuration\Windows Settings\Security Settings\Advanced Audit Policy Configuration\Audit Policies\下的组策略进行监控,然后启用Object Access: File Share

这将创建一个审核日志条目,如下所示

Log Name:      Security 
Source:        Microsoft-Windows-Security-Auditing 
Date:          8/14/2013 2:08:25 AM 
Event ID:      5145 
Task Category: Detailed File Share 
Level:         Information 
Keywords:      Audit Success 
User:          N/A 
Computer:      RootMS01.Reskit.com 
Description: 
A network share object was checked to see whether client can be granted desired access. 
Subject: 
        Security ID:           RESKIT\Administrator 
        Account Name:          Administrator 
        Account Domain:               RESKIT 
        Logon ID:              0x49199 
Network Information:    
        Object Type:           File 
        Source Address:               10.10.10.11 
        Source Port:           61361 
Share Information: 
        Share Name:            \\*\Shares 
        Share Path:            \??\C:\Shares 
        Relative Target Name:  UserHomeFolder\LSkywalker\Projects.txt 
Access Request Information: 
        Access Mask:           0x120089 
        Accesses:              READ_CONTROL 
                              SYNCHRONIZE 
                              ReadData (or ListDirectory) 
                              ReadEA 
                              ReadAttributes 
Access Check Results: 
        READ_CONTROL:  Granted by Ownership 
                              SYNCHRONIZE:   Granted by        D:(A;;FA;;;WD) 
                              ReadData (or ListDirectory):  Granted by        D:(A;;FA;;;WD) 
                              ReadEA: Granted by     D:(A;;FA;;;WD)

您可以看到访问过的文件以及访问它的计算机的IP位于日志中,您只需编写一个reads the log的C#程序并提取所需的信息。

Here is a detailed technet article解释如何设置它。