我将使用.NET Framework创建一个简单的应用程序,该应用程序检测远程用户何时从运行该应用程序的计算机复制某个文件。
EG。
Machine2 上的用户访问 Machine1 上的共享目录,并将部分文件复制到 Machine2 目录。
我需要记录复制的文件名和请求复制的IP / DNS。
是否有一些Windows消息可以执行此操作?
甚至是任何IO类?
要求是我必须通过自定义应用程序执行此操作。
答案 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#程序并提取所需的信息。