我有一个应用程序需要通过以下方式监视主驱动器的文件更改ReadDirectoryChangesW
。但是,当UAC启用时,它不起作用。
所有 Windows API 调用均成功,但我没有收到任何更改通知。
我可以通过单独监视根目录中的每个目录来解决此问题,但这是一个问题,因为如果目录太多,可能会导致蓝屏。
是否有一种可接受的方法来绕过 UAC 并在整个主驱动器上接收文件更改通知?
相关的CreateFile
and ReadDirectoryChangesW
在下面。在不起作用的情况下,directory
是C:\。如果我监控任何辅助驱动器(即 E:\、F:\、G:\),它会按预期工作。所有调用均不会返回错误。
HANDLE fileHandle = CreateFileW(directory.c_str(), FILE_LIST_DIRECTORY,
FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);
BOOL success = ReadDirectoryChangesW(fileHandle, watched.buffer.data(),
watched.buffer.size(), TRUE,
FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE,
NULL, &watched.overlapped, NULL);
有趣的是,.NETSystem.IO.FileSystemWatcher
does工作正常,并且它使用与我正在使用的完全相同的函数和参数,但它的行为正确。