Мое приложение работает как служба, и в какой-то момент ему нужно пройтись по всем существующим учетным записям пользователей в системе (я полагал, что это можно сделать с помощью NetUserEnum()
) и попытаться получить доступ к определенному файлу по пути %APPDATA% каждого из найденных пользователей. Проблема в том, что я понятия не имею, как получить этот пользовательский путь (% APPDATA%).
Поскольку приложение работает как служба (SYSTEM), я не могу использовать среду или SHGetFolderPath()
. Первоначально я думал, что могу использовать LogonUser()
, но он всегда выдает мне ошибку 1326, независимо от того, запускаю ли я тестовый код приложения под пользователем, администратором или СИСТЕМОЙ. (winxp в качестве тестовой платформы). Если есть способ получить дескриптор входа пользователя, я могу использовать его в SHGetFolderPath()
или ExpandEnvironmentStringsForUser()
API, это правильно?
Итак, код, который я пробовал до сих пор с LogonUser(), примерно следующий (да, имя пользователя правильное):
LogonUser(
pw->usri1_name,
L".",
NULL,
LOGON32_LOGON_BATCH,
LOGON32_PROVIDER_DEFAULT,
&authtoken
)
Вероятно, ему нужен мой пароль, но я никак не могу узнать его на клиентской машине. Все API, которые я нашел с помощью быстрого поиска, полагаются на HANDLE из LogonUser(), которого у меня, по-видимому, нет...
Любые не хитрые и каверзные идеи приветствуются!
ERROR_LOGON_FAILURE
(ошибка входа в систему: неизвестное имя пользователя или неверный пароль). Например, вы не указываете никакого пароля. - person Remy Lebeau   schedule 09.10.2013