正在检测C#中的SqlServr.exe WriteFile操作
本文关键字:exe WriteFile 操作 SqlServr 中的 检测 | 更新日期: 2023-09-27 17:48:48
我们需要支持在本地SQL Server数据库更新时查询新数据。由于这些是外部SQL Server数据库,我们可能无法使用SQL Server Notification Services,也无法对数据库进行任何更改。
我的基本想法是观察写入数据库的数据以触发查询(而不是按设置的间隔轮询)。然而,我很难弄清楚如何从SqlServr.exe进程中获得WriteFile调用(可以在Sysinternals的进程监视器等工具中进行监控)。有人能告诉我哪些Win32函数可以帮助我吗?
您可能无法拦截SQL Server进程正在进行的FileWrite()调用——如果有,那将是一个巨大的安全漏洞。
幸运的是,您不需要这样做,因为文件系统正好为您提供了所需的内容。
System.IO.FileSystemWatcher类允许监视文件或目录的活动,并在发生更改时触发事件。你应该能够很快建立并运行原型,以证明你的方法的可行性。
但是,我认为您会发现这种方法不如简单的轮询有效,因为我怀疑您最终会频繁地触发自己的更新过程。
我认为浏览文件系统不是最好的选择。即使您可以访问文件系统活动,我认为也很难区分是什么文件操作添加了数据,而不是任何其他类型的文件活动,如维护、索引碎片整理等。
一个可能的替代方案是将Microsoft.SqlServer.Management.Trace命名空间作为挂接SQL Server的机制,并查找要响应的特定事件。不过,我要注意这可能会对性能造成影响。
正如其他答案所提到的,SQL还执行一些内部内务管理,这可能会触发WriteFile或其他低级监控过程。
是否可以编写一个包装数据库,连接到该数据库,存储所有更改或最新更改的时间戳。并将它们发送到真正的存储器。我想你可以用观点做这样的事情。性能不会是最佳的。