У меня есть приложение, которое должно контролировать основной диск для изменения файла через ReadDirectoryChangesW
. Однако, когда UAC включен, он не работает.Как я могу обойти UAC при использовании ReadDirectoryChanges?
Все вызовы Windows API успешно завершены, но я не уведомлен о каких-либо изменениях.
Я могу обойти это, индивидуально контролируя каждый каталог в корне, но это проблема, потому что это может привести к синему экрану, если слишком много каталогов.
Есть ли приемлемый способ обойти UAC и получать уведомления об изменении файла на всем основном диске?
Ниже приведены соответствующие и 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);
Интересно, что .NET System.IO.FileSystemWatcher
делает работу правильно, и она использует те же функции и параметры, как я использую, но он ведет себя правильно.
Он работает, если приложение поднято? –
Нет, это не сработает, когда я запускаю его как администратор, а также не могу дать мне (как администратору) возможность записывать файлы в корень основного тома. –
Как вы можете использовать BlueScreen компьютер из режима неавторизованного пользователя? Вы можете сделать лицо пользователя синим, если вы потребляете достаточное количество ресурсов, хотя ... – ixe013