前言:
- 以前写过一个文件监视:【新】用SHChangeNotifyRegister实现文件监控 - 注释清晰,易拓展封装
- 今天写的文件监视则是调用的一个较为底层的函数:NtNotifyChangeDirectoryFile
正文:
- NtNotifyChangeDirectoryFile是非文档化,非公开函数,使用起来非常的麻烦,因为涉及NtNotifyChangeDirectoryFile,NtOpenFile,NtWaitForSingleObject等毫无资料的函数的调用,所以本程序写起来还是花了不少时间的。
- 我的调用过程大致如下:使用NtOpenFile打开目录,NtNotifyChangeDirectoryFile监听目录变化,NtWaitForSingleObject进行等待,最后使用IOCP通知UI线程变化:
- 由于采用完全通知异步的方式,在NtNotifyChangeDirectoryFile结束监听时即可开启下一次监听,漏数据的可能性下降:
- 测试效果:
PS:
- 文件名开头的“\??\”代表是内核路径,请在所以测试文件夹开头都要加上“\??\”标志!程序默认监听路径是运行目录下的“IMG”,请在测试前换成其他路径!
- 文件名开头的“\??\”代表是内核路径,请在所以测试文件夹开头都要加上“\??\”标志!程序默认监听路径是运行目录下的“IMG”,请在测试前换成其他路径!
- 文件名开头的“\??\”代表是内核路径,请在所以测试文件夹开头都要加上“\??\”标志!程序默认监听路径是运行目录下的“IMG”,请在测试前换成其他路径!