GetDiskFreeSpaceEx Windows API дает неправильные значения даже после выполнения олицетворения

Мне нужно найти свободное место в папке в сетевом хранилище (NAS), где только один конкретный пользователь имеет полные права доступа.

Используя GetDiskFreeSpaceEx API в C++, я получаю неправильные значения (мусор), когда пытаюсь получить доступ к этой папке от обычного пользователя домена без прав. Перед API я олицетворяюсь под пользователем, у которого есть полные права доступа и при олицетворении нет сбоев. Я упомянул значение мусора по той причине, что когда я пытаюсь получить доступ к другой папке на другом диске одного и того же хранилища, я получаю одни и те же значения.

Если я изменю права доступа к этой папке на «Все» и использую API без олицетворения, он вернет правильные значения.

Для олицетворения я пытался войти в систему как с LOGON32_LOGON_INTERACTIVE, так и с LOGON32_LOGON_NETWORK.

Я что-то упустил здесь? Какие-то дополнительные права разрешения должны быть предоставлены?

Любая помощь будет оценена по достоинству.


person OzWin    schedule 17.11.2016    source источник


Ответы (1)


Соответствующее право в соответствии с документацией MSDN GetDiskFreeSpaceEx: «Вызывающее приложение должно иметь права доступа FILE_LIST_DIRECTORY для этого каталога».

Что меня немного беспокоит, так это первая часть, "вызывающее приложение...". Олицетворение работает с потоками, но MSDN не говорит: «Вызывающий поток должен...».

Другая проблема связана с тем, как вы назовете диск NAS. Если вы используете сопоставление букв дисков, это сопоставление букв дисков может быть недоступно при выдаче себя за другого пользователя.

person MSalters    schedule 17.11.2016