Winapi 如何在本地和网络驱动器上检测Windows文件关闭

Winapi 如何在本地和网络驱动器上检测Windows文件关闭,winapi,document-management,Winapi,Document Management,我正在开发一个基于Win32的文档管理系统,该系统采用自动签入/签出模型。它目前用于跟踪正在使用的文档(监控打开文档的应用程序的流程)的模型不是特别健壮,所以我正在研究替代方案 签出很容易,因为DocMgt应用程序负责启动其他应用程序(Word、Adobe、Notepad等)并将文档传递给它 更困难的是自动值机要求。当用户在Word/Adobe/Notepad中关闭文档时,DocMgt系统会自动收到通知,以便能够自动签入更新的文档 更为复杂的是,文档可能存储在网络驱动器而不是本地驱动器上 有人知

我正在开发一个基于Win32的文档管理系统,该系统采用自动签入/签出模型。它目前用于跟踪正在使用的文档(监控打开文档的应用程序的流程)的模型不是特别健壮,所以我正在研究替代方案

签出很容易,因为DocMgt应用程序负责启动其他应用程序(Word、Adobe、Notepad等)并将文档传递给它

更困难的是自动值机要求。当用户在Word/Adobe/Notepad中关闭文档时,DocMgt系统会自动收到通知,以便能够自动签入更新的文档

更为复杂的是,文档可能存储在网络驱动器而不是本地驱动器上

有人知道支持这类功能的API调用、技术或体系结构的技巧吗


我并不期待一个神奇的三线解决方案,我到目前为止所做的研究让我相信这绝不是一个小问题,需要一些重要的工作来实现。我对所有的建议都感兴趣,无论是针对完整解决方案还是部分解决方案。

您所描述的是一项常见任务。这是完全可行的,尽管并非没有麻烦。在这里,我假设这些文件在代码可以运行的计算机上关闭(即使这些文件存储在挂载的网络共享上)

在使用文件时,有两种方法可以控制它们:过滤器和虚拟文件系统

过滤器位于中间,在进程和文件系统之间(任何文件系统,无论是本地的、网络的还是完全虚拟的),并拦截到这个文件系统的文件请求。这里要求在计算机上运行筛选代码,通过该代码传递请求(在您的场景中,这一要求似乎得到了满足)

虚拟文件系统是来自应用程序的请求的端点。当您实现虚拟文件系统时,您将处理所有请求,因此您始终完全控制文件的生命周期。由于文件系统是虚拟的,所以您可以自由地将文件保存在任何地方,包括真实磁盘(本地或网络)甚至云中

过滤方法的好处是,您可以控制驻留在真实磁盘上的单个文件,而虚拟文件系统只能装载到新的驱动器号或NTFS驱动器上的空目录中,而这并不总是可行的。同时,坐在中间,过滤器在某种程度上更受限于它能做什么,并且当过滤器不运行时,文件可以被修改。最后,过滤器更复杂,并且可能容易出错,因为它们位于中间,并且必须与其他滤波器和端点一起播放。

我没有具体的建议,但是如果单独的驱动器号是一个选项,我建议使用虚拟文件系统


我们公司开发了(并继续为新所有者维护)两个产品CBFS Filter和CBFS Connect,这两个产品允许您分别在用户模式下创建过滤器和虚拟文件系统。这些产品在许多软件标题中使用,包括一些文档管理系统(与您所做的非常接近)。您会发现这两个产品都已打开。

没有可靠的通用方法。由于DocMgt应用程序正在启动编辑器应用程序,因此它可以监视编辑器进程何时终止,然后检入文档文件。@RemyLebeau如果编辑器应用程序已打开,并且启动它只会使其打开一个新选项卡怎么办?Remy和Jonathon,在你们两人之间,您已经描述了当前的体系结构及其主要缺陷。请注意,许多应用程序(如记事本、绘画)在加载完文件后会立即关闭该文件。当你保存时,他们会再次打开它。防病毒程序和此类过滤器/虚拟文件系统是否存在问题?@LachlanG该软件中的漏洞通常会导致一些问题,但我不记得近年来出现过任何严重问题。请避免宣传你的公司