Я работаю над проектом System Service с привилегией SYSTEM (утилита очистки) ... Он не взаимодействует ни с каким пользовательским интерфейсом.
Моя цель - проверить файлы вПапки «Рабочий стол» и «AppData» для любого пользователя, который существует на ПК.
Я использую NetUserEnum()
, чтобы получить список пользователей на ПК.Затем я хочу получить путь к рабочему столу каждого пользователя и AppData с помощью SHGetKnownFolderPath()
, но не могу найти способ получить маркер доступа каждого пользователя для SHGetKnownFolderPath()
.Без токена, определенного в SHGetKnownFolderPath()
, он возвращает путь для SYSTEM, а не для конкретных пользователей.
Q1.Как я могу получить токен каждого пользователя для SHGetKnownFolderPath()
?
Q2.Если нет ответа на вопрос Q1, есть ли документированный способ , чтобы получить путь к рабочему столу и appdata каждого пользователя на ПК?
Я понимаю, что это может быть достигнуто грязным путем --->Ключ реестра с некоторой заменой строки.Однако метод ключа реестра недокументирован, что может привести к поломке будущих обновлений для Windows.
Изменить обновление: @RaymondChen Спасибо за то, что указали, что некоторые профили пользователей могут не существовать,Кроме того,
О Q1 : @Remy Lebeau предлагает решение с LogonUser/Ex()
, вход в систему для каждого пользователя с его учетными данными, может быть единственным ответом, который соответствует требованию Q1.
О Q2 : Возможно, нет документированного способа для достижения этой цели.Единственный метод, возможно, придется придерживаться реестра Windows (Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
), как сказали @Remy Lebeau и @Olaf Hess.Я попытался выкопать больше информации на форуме сообщества Microsoft и получил, что Microsoft никогда не разрешит доступ к профилю других пользователей с их собственным API по соображениям безопасности.Они не предоставляют API, которые могут нарушать правила безопасности.Каждый пользовательский профиль может получить доступ только по своим учетным данным.
Кстати, я полностью понимаю, что «Утилита очистки» или «Средство взлома Windows», особенно когда инструмент плохо кодируется (например, проблема совместимости).Чтобы не превратить его в полностью разрушителя Windows, я старался использовать как можно больше документированных API.