Ошибка `LoadUserProfileW` с кодами ошибок E_ACCESSDENIED / 0x80070020C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка `LoadUserProfileW` с кодами ошибок E_ACCESSDENIED / 0x80070020

Сообщение Anonymous »

Я пытаюсь выяснить, почему функция LoadUserProfileW не работает. Вот коды ошибок, которые я вижу:

Код: Выделить всё

E_ACCESSDENIED (29 times)
0x80070020 (6 times)
Точный общедоступный исходный код, в котором время от времени происходит сбой.
Мне интересно, в чем может быть основная причина, потому что, как вы можете видеть в LoadUserProfileW
code> в случае сбоя либо CreateUserTokenWithSid, либо LogonUser завершились успешно. Итак, судя по кодам ошибок, что препятствует загрузке профиля загрузки (он же C:\Users\).
Я ценю любую помощь/подсказку. Спасибо.
публичный исходный код:

Код: Выделить всё

    wstring const & accountName,
wstring const & domain,
wstring const & password,
DWORD logonType,
DWORD logonProvider,
bool loadProfile,
PSID const & sid,
__out TokenHandleSPtr & tokenHandle,
__out ProfileHandleSPtr & profileHandle) {
ASSERT_IF(accountName.empty(), "AccountName must not be empty.");
ASSERT_IF(password.empty(), "Password must not be empty.");

HANDLE token;
if (sid)
{
auto error = AccessToken::CreateUserTokenWithSid(accountName, domain, password, logonType, logonProvider, sid, tokenHandle);
if (!error.IsSuccess())
{
return error;
}
}
else
{
if (!::LogonUser(accountName.c_str(), domain.c_str(), password.c_str(), logonType, logonProvider, &token))
{
auto error = ErrorCode::FromWin32Error();
TraceWarning(
TraceTaskCodes::Common,
TraceType_AccessToken,
"LogonUser failed for {0}. ErrorCode={1}",
accountName,
error);
return error;
}
tokenHandle = TokenHandle::CreateSPtr(token);
}

if (loadProfile)
{
PROFILEINFO profileInfo = { 0 };
profileInfo.dwSize = sizeof(profileInfo);
profileInfo.lpUserName = (LPWSTR)&accountName[0];

if (!::LoadUserProfileW(tokenHandle->Value, &profileInfo))
{
auto error = ErrorCode::FromWin32Error();
TraceWarning(
TraceTaskCodes::Common,
TraceType_AccessToken,
"LoadUserProfileW failed for {0}. ErrorCode={1}",
accountName,
error);
return error;
}
profileHandle = ProfileHandle::CreateSPtr(tokenHandle, profileInfo.hProfile);

TraceInfo(
TraceTaskCodes::Common,
TraceType_AccessToken,
"LoadUserProfileW succeeded for {0}.",
accountName);
}

return ErrorCode(ErrorCodeValue::Success); } ```


Подробнее здесь: https://stackoverflow.com/questions/793 ... 0x80070020
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка `LoadUserProfileW` с кодами ошибок E_ACCESSDENIED / 0x80070020
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Ошибка `LoadUserProfileW` с кодами ошибок, где найти список кодов ошибок
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • `LoadUserProfileW` не работает с кодами ошибок, где найти список кодов ошибок [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Ошибки в Visual Studio 2022 с кодами ошибок MSB3027 и MSB30221.
    Anonymous » » в форуме C#
    0 Ответы
    88 Просмотры
    Последнее сообщение Anonymous
  • Ошибки в Visual Studio 2022 с кодами ошибок MSB3027 и MSB3021 [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»