Вот что происходит: чтобы DPAPI работал, ему нужен ключевой материал пользователя, который частично получен из учетных данных пользователя. Эти данные хранятся в профиле пользователя. Вот почему процесс не работает, так как пользователь должен загрузить профиль пользователя.
Вы должны вызвать UnloadUserProfile (), используя данные, возвращенные из LoadUserProfile ()
вот что вам нужно сделать:
LogonUser ()
Олицетворение ()
LoadUserProfile ()
Шифрование () * * +1010
UnloadUserProfile ()
RevertImpersonation () (Отменить () в .NET)
Вы должны проверять ошибки, используя GetLastError (), на каждом этапе пути.
Обратите внимание, что для всех этих вещей в основном требуется, чтобы процесс был учетной записью администратора. Для загрузки профиля пользователя вам необходимы права на резервное копирование и восстановление. Если при вызове LoadUserProfile вы получаете привилегию не удерживается ошибка, то вам необходимо:
a) убедитесь, что в учетной записи приложения есть резервное копирование и восстановление privs
б) привилегии включены, по умолчанию они не включены.
Вы можете включить привилегии с помощью AdjustTokenPrivileges () http://msdn.microsoft.com/en-us/library/aa375202(VS.85).aspx