Код: Выделить всё
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