C# 记录 SMB 文件访问

Posted

技术标签:

【中文标题】C# 记录 SMB 文件访问【英文标题】:C# Log SMB file access 【发布时间】:2018-01-03 13:43:15 【问题描述】:

我正在尝试创建一个通过 SMB 传输的文件的简单日志。

这适用于 Windows 8 或更高版本:

var scope = new ManagementScope(@"\\.\root\Microsoft\Windows\SMB");

var query = new WqlEventQuery(

@"SELECT * 
  FROM 
      __InstanceOperationEvent WITHIN 1 
  WHERE 
      TargetInstance ISA 'MSFT_SmbOpenFile'"

);

ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);

watcher.Start();

....

But it does not work for windows 7 or lower. (Run-time requirements)

是否有至少与 Windows 7 兼容的类似解决方案?

1º 编辑

看起来可行,因为此 Windows 7 模块执行此任务:

计算机管理(我在 Windows 7 上看到此信息)

2º 编辑

明确目的。我正在建立一个DLP application (Data Loss Prevention)。我需要监视和记录通过 Windows 共享(用户、文件名)访问的文件,并最终在用户请求文件时阻止此访问。

【问题讨论】:

您可以查看 NET 系列命令 - net files - 给出了 list of open files。 net session 给the list of sessions。 Great Subbu,我现在正在查看文档,寻找基于事件的内容,因此可以通知我而不是连续运行命令。 【参考方案1】:

诚然,这是部分答案。虽然它可能很有用,但它不适合评论。

看来你可以试试Win32_ConnectionShareWin32_ServerConnection。 例如使用here。

不过,我不确定您是否可以使用它来捕获事件。 结合您的所有要求是一项挑战(这就是您设置赏金的原因!)

相关信息:

https://www.codeproject.com/Articles/17803/A-PC-Audit-Application-in-C

Detect File Read in C#

Is it possible to programatically log access to a windows share (SMB share) using the .Net framework?

https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx

SACL on Services using C# || get a handle to a service that has the ACCESS_SYSTEM_SECURITY rights using C#

https://www.netfort.com/blog/auditing-file-access-on-file-servers/

https://blogs.technet.microsoft.com/mspfe/2013/08/26/auditing-file-access-on-file-servers/

https://superuser.com/questions/783950/how-to-display-currently-connected-users-workstations-to-a-windows-smb-share

https://***.com/a/154758/2707864

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365433(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/bb726966.aspx

【讨论】:

嗨@sancho.s,谢谢回复。我在发帖之前已经看到了这个功能。这是列表中的第一个相关问题。虽然它接近我需要的东西,但它不是事件驱动的,并且不允许我取消读取请求。可以发个例子吗? @ViniciusGonçalves - 你是对的。请查看更新的答案。

以上是关于C# 记录 SMB 文件访问的主要内容,如果未能解决你的问题,请参考以下文章

.NET C# - 文本文件中的随机访问 - 没有简单的方法?

linux系统smb安装,windows访问smb共享文件夹和虚拟机vm与真机的互ping

java访问windows远端共享文件的方法

linux无法访问windows samba 提示: Firefox 不知道如何打开此地址,因为协议 (smb) 未和任何程序关联。

Samba匿名访问和身份验证及账户映射

centos7 搭建 samba,win10访问centos7共享的文件路径