← 回總覽

如何使用 ReadDirectoryChangesW 来获知有人正在从目录中复制文件?

📅 2026-04-04 02:57 Raymond Chen 软件编程 1 分鐘 1247 字 評分: 88
Windows API ReadDirectoryChangesW 文件系统 系统编程 数据安全
📌 一句话摘要 本文阐明了 ReadDirectoryChangesW API 旨在监控目录列表的变更,而非检测用户层面的文件复制操作,并解释了为什么文件系统层面的监控无法可靠地推断用户意图。 📝 详细摘要 Raymond Chen 解释了为什么开发人员经常错误地尝试使用 ReadDirectoryChangesW API 来检测文件复制。他澄清说,该 API 以及 FindFirstChangeNotification 都是在文件系统层面运行,用于跟踪目录列表的变更,而非用户的意图。文件系统只能观察到底层的读写操作,无法区分用户是打开文件进行编辑还是将其复制。此外,他强调了使用文件哈希来

📌 一句话摘要

本文阐明了 ReadDirectoryChangesW API 旨在监控目录列表的变更,而非检测用户层面的文件复制操作,并解释了为什么文件系统层面的监控无法可靠地推断用户意图。

📝 详细摘要

Raymond Chen 解释了为什么开发人员经常错误地尝试使用 ReadDirectoryChangesW API 来检测文件复制。他澄清说,该 API 以及 FindFirstChangeNotification 都是在文件系统层面运行,用于跟踪目录列表的变更,而非用户的意图。文件系统只能观察到底层的读写操作,无法区分用户是打开文件进行编辑还是将其复制。此外,他强调了使用文件哈希来检测副本是徒劳的,因为“另存为”等操作通常会导致文件在功能上相同,但在字节层面却不完全匹配。他总结道,对于数据安全或分类需求,开发人员应该利用专门的数据分类技术,而不是试图拦截文件系统事件。

💡 主要观点

- ReadDirectoryChangesW 用于目录元数据,而非文件操作意图。 该 API 旨在当目录列表发生变化(例如文件创建、删除、重命名)时通知应用程序,而不是跟踪文件被访问的原因。

文件系统缺乏定义“复制”的上下文。 在文件系统层面,不存在“复制”操作;只有读取和写入。系统无法区分合法访问和未经授权的复制。
哈希是一种检测副本的不可靠方法。 用户经常使用“另存为”来复制文件,这可能会改变元数据或内容,使得逐字节的哈希比较无法有效检测重复文件。
使用专门的技术进行数据保护。 开发人员不应试图破解文件系统事件,而应实施旨在执行安全策略和跟踪数据使用情况的数据分类技术。

💬 文章金句

- 像 ReadDirectoryChangesW 和 FindFirstChangeNotification 这样的函数是在文件系统层面运行的,因此它们看到的基本操作是“读取”和“写入”之类的东西。它们不知道某人为什么要读取或写入。

  • 如果你允许人们读取文件,那么他们就可以复制它。
  • 如果你的目标是检测文件是否被“复制”(无论你如何定义它),你必须在另一个层面进行操作。

📊 文章信息

AI 评分:88

来源:The Old New Thing

作者:Raymond Chen

分类:软件编程

语言:英文

阅读时间:3 分钟

字数:679

标签: Windows API, ReadDirectoryChangesW, 文件系统, 系统编程, 数据安全

阅读完整文章

查看原文 → 發佈: 2026-04-04 02:57:11 收錄: 2026-04-04 06:00:39

🤖 問 AI

針對這篇文章提問,AI 會根據文章內容回答。按 Ctrl+Enter 送出。