代码之家  ›  专栏  ›  技术社区  ›  HyLian

通过Windows文件系统属性发送自定义信息

  •  0
  • HyLian  · 技术社区  · 16 年前

    在讨论这一点之前,我将向您概述一下我想做什么。因为我不知道使用Windows文件系统属性是否是正确的选择。

    系统中有两个组件。 其中一个是ShellExtension 在满足某些条件时放置一个覆盖图标,以及 另一个组件是文件系统驱动程序 它向Windows(因此也向ShellExtension)提供信息

    文件系统使用文件名向远程服务器发出网络请求,并 根据此请求的结果,是否应显示覆盖图标。

    简单的解决方案是从覆盖图标端重复请求,但这是不可取的。在文件系统方面,我有请求结果,但我需要将其发送到覆盖层。

    我想到的第一个解决方案是使用Windows文件系统属性。我的意思是,在文件系统驱动程序中,我将放置一个不使用的attrubute(例如 0x100000 根据msdn,它似乎不可用),并在套印格式图标中恢复此信息,前提是资源管理器将文件属性作为参数发送给shell扩展名。” 等分 “。也就是说, 使用Windows文件属性对信息进行编码 从文件系统端到shellextension端。

    此解决方案不起作用,在流的某些部分中,此属性似乎已被删除。这是有意义的,因为该属性似乎无效。如果我将属性值替换为像hidden这样的值,它将工作得很好。

    显而易见的解决办法(但它还有更多的工作要做)是使用一些IPC机制。

    但是,正如我在游戏的两面一样,如果我可以使用Windows文件系统信息,情况会更好。

    你有什么建议?

    谢谢您!

    2 回复  |  直到 16 年前
        1
  •  3
  •   MSalters    16 年前

    为什么这么复杂?这有一个合适的接口。呼叫 GetFileInformationByHandleEx(FileRemoteProtocolInfo) 获取文件\远程协议\信息。将特定于协议的数据放入ProtocolSpecificReserved。这是64字节大。

    与你目前的想法最接近的选择可能是使用 FILE_ATTRIBUTE_REPARSE_POINT . 如果你用这个,你可以在 WIN32_FIND_DATA::dwReserved0 . 这不会与其他标记冲突,因为这些标记是由Microsoft分配的。

    http://msdn.microsoft.com/en-us/library/aa365511(VS.85).aspx

    还有更多的地方可以存放你的数据。您可以考虑使用创建文件时间的最低位。你真的需要100纳秒的分辨率,还是200纳秒足够好?你能把它存进去吗 BY_HANDLE_FILE_INFORMATION::nFileIndexHigh 不知何故?

        2
  •  1
  •   Carlos Gutiérrez    16 年前

    你可以把信息存储在 NTFS Alternate Data Streams