我有一个应用程序需要通过ReadDirectoryChangesW
. 但是,当 UAC 启用时,它不起作用。
所有 Windows API 调用都成功,但我没有收到任何更改的通知。
我可以通过单独监视根目录中的每个目录来解决此问题,但这是一个问题,因为如果目录太多,它可能会导致蓝屏。
是否有一种可接受的方法来绕过 UAC 并在整个主驱动器上接收文件更改通知?
相关的CreateFile
和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
确实可以正常工作,它使用与我使用的完全相同的函数和参数,但它的行为正确。