Возникла необходимость олицетворения потоком произвольной учетной записи, в т.ч. и системной. Пользуюсь LogonUser. С учетками, созданными вручную, проблем нет, зато со встроенным учетными записями (в частности, NT AUTHORITY\NETWORK SERVICE и NT AUTHORITY\LOCAL SERVICE) ничего не получается.
ОС: WinXP SP2, в домене. Пользователь, под которым запускается приложение имеет права локального администратора. Пробовал разные комбинации Username / Domain (напр., Username = "NT AUTHORITY\NETWORK SERVICE", Domain = Null или Username = "NETWORK SERVICE", Domain = "NT AUTHORITY" или "."), разные типа логона (LOGON32_LOGON_NETWORK, LOGON32_LOGON_SERVICE).
При одних комбинациях сообщает "Ошибка операционной системы. Код: 5. Отказано в доступе", при других — "Ошибка операционной системы. Код: 1326. Вход в систему не произведен: имя пользователя или пароль не опознаны".
То ли я всё-таки что-то путаю с параметрами, то ли привилегий не хватает, то ли изначально что-то не так, может кто-то сможет подсказать?
P.S. Насчёт привилегий: учитывая примечание в статье MSDN про
LogonUser, попробовал сначала проверить наличие у процесса привилегий SE_TCB_NAME и SE_CHANGE_NOTIFY_NAME (хотя для моей ОС, согласно той же статьи, они не нужны). Первой привилегии у token'а процесса нет вообще (и, соотв., включить её нет возможности), вторая есть и уже enabled.
врядли при помощи LogonUser можно создать токен этих юзеров
эти токены создаются операционкой при помощи NtCreateToken задолго до того как появляется lsass, который собственно заведует всякими там логинами и паролями