Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateProcessAsUser, Как сделать? 
:(
    Опции темы
azesmcar
Дата 16.6.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Здравствуйте...нужно запустить программу под другим юзером. Т.е. виндоуз работает под user-ом а программу мою нужно запустить под администратором. runas не помогает. Так как через коммандную строку параметр password не принимает...требует обьязательного ввода пароля run-time. придеться писать свою программку типа runas. Тут написал кое что. Не работает...кто чем поможет???

Код

void main()
{
    HANDLE hToken = NULL;
    if ( LogonUser("Admin", NULL, "123", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken ) )
    {
        printf("Logon successfull\n");
        STARTUPINFO si = {0};
        PROCESS_INFORMATION pi = {0};
        si.cb = sizeof( STARTUPINFO );
        ImpersonateLoggedOnUser( hToken );
        if (CreateProcessAsUser( hToken, "C:\\WINDOWS\\SYSTEM32\\notepad.exe", NULL, NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi ))
        {
            printf("Create successfull\n");
        } else
        {
            printf("Error occured, error code %d\n", GetLastError());
        }
    }
}

PM   Вверх
En_t_end
Дата 16.6.2005, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Попробуй находить диалог ввода пароля для использования чужой учетной записи... как только диалог - найден. Программно посылаешь сообщение ему, точнее его эдиту, в котором и пишешь пароль... далее жмешь батон(также через сообщения). ИМХО может поможет smile
Чтобы узнать имена всех нужных тебе вещей заюзай стандартный спай из поставки студии.
PM MAIL ICQ Skype GTalk Jabber   Вверх
chaos
Дата 16.6.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 1
Всего: 44



PM WWW   Вверх
azesmcar
Дата 16.6.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата
Попробуй находить диалог ввода пароля для использования чужой учетной записи... как только диалог - найден. Программно посылаешь сообщение ему, точнее его эдиту, в котором и пишешь пароль... далее жмешь батон(также через сообщения). ИМХО может поможет
Чтобы узнать имена всех нужных тебе вещей заюзай стандартный спай из поставки студии.


Подобное извращение у меня тоже в мыслях прошло...но как то не хотелось...

Цитата
глянь здесь
http://www.codeguru.com/code/legacy/misc/CmdAsUserSource.zip


скачал...спасибо большое..но выдаеться таже ошибка что и у меня...

An error occurred: 1314 - CreateProcessAsUser. A required privilege is not held by the client.
PM   Вверх
_hunter
Дата 16.6.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



может у тебя просто Secondary Logon отключена?
виндовый runas работает?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
En_t_end
Дата 16.6.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



_hunter
Да кстати... ил же у того юзверя(скорее всего гостя) просто нет прав пользоваться этим сервисом.

___Подобное извращение у меня тоже в мыслях прошло...но как то не хотелось...____
Всегда пожалуйста... через попу smile
PM MAIL ICQ Skype GTalk Jabber   Вверх
azesmcar
Дата 16.6.2005, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Цитата
может у тебя просто Secondary Logon отключена?
виндовый runas работает?


Включен...runas нормально запускает...проблема в том что в runas нельзя передать параметром пароль...нужно обязательно вводить run-time...

Есть какой нибудь другой способ запустить программу???
пробую так (извините за оффтопик)

runas /user:admin notepad.exe | echo 123
runas /user:admin notepad.exe | type C:\1.txt
в файле 1.txt написан пароль (132)

runas /user:admin notepad.exe < C:\1.txt

Никак не работает...если можно будет так сойдет и так...главное чтоб работало..
PM   Вверх
_vlad
Дата 16.6.2005, 18:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











 сейчас не буду разбираться.. просто помню, что у меня без проблем работал код (правда в Win2000 под админом, с запуском Win32-приложения, а другие варианты не пробовал)
Код
token := LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE,
  LOGON32_PROVIDER_DEFAULT);
FillChar(si, SizeOf(si), 0);
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := CmdShow;
pi := CreateProcessAsUser(token, '', CmdLine, nil, nil, False, 0, nil, '', si);
где LogonUser и CreateProcessAsUser - методы объекта-обертки, вызывающие API-функции LogonUserA, CreateProcessAsUserA   

Это сообщение отредактировал(а) Fixin - 25.7.2006, 18:30
  Вверх
azesmcar
Дата 17.6.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 5
Всего: 211



Код

void main()
{
    HANDLE hToken = NULL;
    if ( LogonUser("Admin", NULL, "123", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken ) )
    {
        printf("Logon successfull\n");
        STARTUPINFO si = {0};
        PROCESS_INFORMATION pi = {0};
        si.cb = sizeof( STARTUPINFO );
        ImpersonateLoggedOnUser( hToken );
        if (CreateProcessAsUser( hToken, "C:\\WINDOWS\\SYSTEM32\\notepad.exe", NULL, NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi ))
        {
            printf("Create successfull\n");
        } else
        {
            printf("Error occured, error code %d\n", GetLastError());
        }
    }
}


А у меня что написано??? То же самое только на С++
GetLastError() выдает ошибку 1314

PM   Вверх
En_t_end
Дата 8.7.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Кстати порылся сейчас в МСДН. Попробуй CreateProcessWithLogonW
Может у тебя со студией что-то и дефайниться не та функция.

PM MAIL ICQ Skype GTalk Jabber   Вверх
p0s0l
Дата 9.7.2005, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 3
Всего: 112



Цитата(azesmcar @ 16.6.2005, 14:28)
An error occurred: 1314 - CreateProcessAsUser. A required privilege is not held by the client.

Попробуй проверь привилегии и выстави их, если нет:
Цитата(MSDN)
Typically, the process that calls the CreateProcessAsUser function must have the SE_ASSIGNPRIMARYTOKEN_NAME and SE_INCREASE_QUOTA_NAME privileges. However, if hToken is a restricted version of the caller's primary token, the SE_ASSIGNPRIMARYTOKEN_NAME privilege is not required.


Добавлено @ 00:19
В проге из ссылки chaosа сказано про необходимые привилегии:
Код
    ::_tprintf(_T("   The calling process needs to either have administrative privileges (ie in\n"));
    ::_tprintf(_T("   the local adminstrators group) or at LEAST the following privileges:\n"));        
    ::_tprintf(_T("      \"Act as part of the operating system\" (SeTcbPrivilege),\n"));    
    ::_tprintf(_T("      \"Bypass traverse checking\" (SeChangeNotifyPrivilege),\n"));
    ::_tprintf(_T("      \"Increase quotas\" (SeIncreaseQuotaPrivilege),\n"));
    ::_tprintf(_T("      \"Replace a process level token\" (SeAssignPrimaryTokenPrivilege).\n"));     



--------------------
С уважением, г-н Посол.
PM   Вверх
DoZENT
Дата 20.7.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Цитата

Попробуй проверь привилегии и выстави их, если нет

А как это сделать? 


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
Doc_d0s
Дата 21.7.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: нет
Всего: 3



А у меня проблема с LogonUserW выдает сообщение 1326, чего это значет не могу найтиsmile 
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
_hunter
Дата 21.7.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



Logon failure: unknown user name or bad password.  


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
586
Дата 21.7.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Doc_d0s @  21.7.2006,  11:28 Найти цитируемый пост)
выдает сообщение 1326

Вход в систему не произведен: имя пользователя или пароль не опознаны.  

Это сообщение отредактировал(а) 586 - 21.7.2006, 11:02
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.