2015-05-28 193 views
2

我已经实现了一个用户模式程序和一个Windows文件系统微型过滤器,它为远程文件存储系统创建用户文件的骨架视图。它将远程文件映射到本地驱动器。用户模式程序为远程系统上的每个文件创建一个重新分析标记。当检测到创建请求(例如,用于读取的CreateFile)时,微过滤器要求用户模式程序下载文件。这只能在程序想要打开文件进行查看或编辑时才会发生。Windows资源管理器和重新分析点文件:保持资源管理器不打开我的文件

但是,我发现Windows资源管理器正在触发我的文件下载。我想阻止从 触发下载的资源管理器文件窗口和文件打开/保存对话框。而且,我还希望显示文件缩略图和文件大小 。

[更新:我发现我可以使用Windows稀疏文件显示在资源管理器中我的远程 文件大小。 ]

因此,我还实现了一个Shell Extension,IThumbnailProvider,用于下载文件的呈现。这提供了文件缩略图。

对于我的测试,我已经为所有文件(*)和.jpg文件注册了IThumbnailProvider。

我看到两个有趣的行为,使用进程监视器和DebugView(都来自SysInternals): 1.如果我让我的微过滤器拒绝请求从资源管理器打开文件,那么我的IThumbnailProvider被调用。 2.如果我允许来自资源管理器的打开请求,我会在调用堆栈中看到thumbcache.dll尝试打开该文件,而我的IThumbnailProvider未被调用。看起来,默认缩略图提供程序读取下载的文件并创建缩略图。

我必须失去了一些东西。

更新:如果我使用InitializeWithStream而不是InitializeWithFile,则看起来我的处理程序被调用。但是,这也会触发文件的下载。

+2

设置FILE_ATTRIBUTE_OFFLINE文件属性。这表明[该文件将在访问时触发下载](http://blogs.msdn.com/b/oldnewthing/archive/2005/11/28/497442.aspx)。 Explorer尊重此属性并尽力避免自动触发下载。其他外壳扩展也期望尊重该属性。 –

+0

@RaymondChen - 我正在试验Windows Server 2012上的FILE_ATTRIBUTE_OFFLINE。我已经注销了我的Shell Extensions并重新启动了资源管理器。资源管理器在“属性”窗格中将文件显示为脱机(可用性:仅限联机)。但是,我仍然可以看到我的微过滤器PostCreateCallback用于从Explorer.exe以STATUS_REPARSE调用IRP_CREATE,并具有期望的访问权限0x00120089。从ProcMon看来,它正在被thumbcache.dll打开。 – alshamma

回答

0

有很多shell扩展类型可以访问您的文件。图标处理程序可以读取文件来创建图标,Info tip handler可以读取文件来创建文本提示,Data object handler可以读取文件来创建剪贴板数据等等。

来自开发人员的问题来自同一问题:firstsecond。解决方案是创建命名空间外壳扩展。 NSE可以控制对你的文件的所有访问。

相关问题