Новичок
Профиль
Группа: Участник
Сообщений: 19
Регистрация: 26.6.2006
Репутация: нет Всего: нет
|
Добрый день. Есть задача: есть некое средство развертывания приложений, которое доставляет пакет на конечную машину и запускает его из-под учетки localsystem. В этом пакете(в коде) нужно залогиниться под учеткой сетевого админа и запустить на установку патч. Пытаюсь залогиниться следующим образом: | Код | #include <Windows.h> #include <Userenv.h> #include <tchar.h> #include <string>
FILE *fp = NULL;
int main(int argc, TCHAR *argv[]) { HANDLE hToken; PROFILEINFO prInfo;
DWORD dwSize; WCHAR szUserProfile[256] = L"";
LPVOID lpvEnv;
STARTUPINFO si_setup; PROCESS_INFORMATION pi_setup;
//Кодировка по умолчанию _tsetlocale(LC_ALL, L"");
//Создание и открытите файла лога _tfopen_s(&fp, L"C:\\Logon.log", L"w");
if(!::LogonUser(L"user", L"domain", L"pass", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken)) { _ftprintf(fp, L"LogonUser() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"LogonUser() successful!\n"); _ftprintf(fp, L"LogonUser() SUCCESS with error code: %d\n", ::GetLastError()); }
::ZeroMemory(&prInfo, sizeof(PROFILEINFO)); prInfo.dwSize = sizeof(PROFILEINFO); prInfo.lpUserName = L"test"; prInfo.dwFlags = PI_NOUI;
if(!::LoadUserProfile(hToken, &prInfo)) { _ftprintf(fp, L"LoadUserProfile() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"LoadUserProfile() successful!\n"); _ftprintf(fp, L"LoadUserProfile() SUCCESS with error code: %d\n", ::GetLastError()); }
if(!::ImpersonateLoggedOnUser(hToken)) { _ftprintf(fp, L"ImpersonateLoggedOnUser() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"ImpersonateLoggedOnUser() successful!\n"); _ftprintf(fp, L"ImpersonateLoggedOnUser() SUCCESS with error code: %d\n", ::GetLastError()); }
dwSize = sizeof(szUserProfile)/sizeof(WCHAR);
if(!::GetUserProfileDirectory(hToken, szUserProfile, &dwSize)) { _ftprintf(fp, L"GetUserProfileDirectory() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"GetUserProfileDirectory() successful!\n"); _ftprintf(fp, L"GetUserProfileDirectory() SUCCESS with error code: %d\n", ::GetLastError()); }
if(!::CreateEnvironmentBlock(&lpvEnv, hToken, TRUE)) { _ftprintf(fp, L"CreateEnvironmentBlock() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"CreateEnvironmentBlock() successful!\n"); _ftprintf(fp, L"CreateEnvironmentBlock() SUCCESS with error code: %d\n", ::GetLastError()); }
::ZeroMemory(&si_setup, sizeof(STARTUPINFO)); si_setup.cb = sizeof(STARTUPINFO); si_setup.lpDesktop = L"Winsta0\Default"; ::ZeroMemory(&pi_setup, sizeof(PROCESS_INFORMATION));
if(!::CreateProcessAsUser(hToken, L"Setup.exe", NULL, NULL, NULL, NULL, CREATE_DEFAULT_ERROR_MODE | CREATE_UNICODE_ENVIRONMENT, lpvEnv, szUserProfile, &si_setup, &pi_setup)) { _ftprintf(fp, L"CreateProcessAsUser() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"CreateProcessAsUser() successful!\n"); _ftprintf(fp, L"CreateProcessAsUser() SUCCESS with error code: %d\n", ::GetLastError()); }
if(!DestroyEnvironmentBlock(lpvEnv)) { _ftprintf(fp, L"DestroyEnvironmentBlock() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"DestroyEnvironmentBlock() successful!\n"); _ftprintf(fp, L"DestroyEnvironmentBlock() SUCCESS with error code: %d\n", ::GetLastError()); }
if(!::UnloadUserProfile(hToken, prInfo.hProfile)) { _ftprintf(fp, L"UnloadUserProfile() FAILED with error code: %d\n", ::GetLastError()); fclose(fp); ::CloseHandle(hToken); return 0; } else { _tprintf_s(L"UnloadUserProfile() successful!\n"); _ftprintf(fp, L"UnloadUserProfile() SUCCESS with error code: %d\n", ::GetLastError()); }
fclose(fp);
::CloseHandle(hToken); ::CloseHandle(pi_setup.hProcess); ::CloseHandle(pi_setup.hThread);
return 1; }
|
Получаю ошибки: LogonUser() SUCCESS with error code: 0 LoadUserProfile() SUCCESS with error code: 1008 ImpersonateLoggedOnUser() SUCCESS with error code: 1008 GetUserProfileDirectory() SUCCESS with error code: 0 CreateEnvironmentBlock() SUCCESS with error code: 203 CreateProcessAsUser() FAILED with error code: 5 Возможно, что-то не так в корне делаю. Буду признателен за помощь/советы.
|