CreateProcessAsUser
От: enola  
Дата: 26.08.05 07:40
Оценка:
Добрый день!
Народ помогите решить проблему:
Выдает ошибку: 1314, короче ему привилегий не хватает. Как это можно решить. Поиском искал, много чего нашел, а вот толкового ответа не нашел.


HANDLE hToken;
if( !LogonUser( "user",
                "domen",
                "pass",
                LOGON32_LOGON_SERVICE,
                LOGON32_PROVIDER_DEFAULT,
                &hToken)){
  LPVOID lpMsgBuf;
  FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                 NULL,
                 GetLastError(),
                 MAKELANGID(LANG_NEUTRAL, 
                 SUBLANG_DEFAULT),
                 (LPTSTR) &lpMsgBuf,
                 0,
                 NULL);
  ShowMessage( StrPas( ( LPSTR)lpMsgBuf));
  LocalFree( lpMsgBuf );
}
STARTUPINFO si;
ZeroMemory( &si, sizeof( si));
si.cb = sizeof( si);
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
if( !CreateProcessAsUser( hToken,
    "notepad.exe",
    "notepad.exe", // 10 ??????
    NULL,
    NULL,
    false,
    CREATE_NEW_CONSOLE | HIGH_PRIORITY_CLASS,
    NULL,
    NULL,
    &si,
    &pi)){
    LPVOID lpMsgBuf;
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
    (LPTSTR) &lpMsgBuf,
    0,
    NULL);
    ShowMessage( StrPas( ( LPSTR)lpMsgBuf));
    LocalFree( lpMsgBuf );
}
Re: CreateProcessAsUser
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.08.05 08:20
Оценка:
Здравствуйте, enola, Вы писали:

E>Народ помогите решить проблему:

E>Выдает ошибку: 1314, короче ему привилегий не хватает. Как это можно решить. Поиском искал, много чего нашел, а вот толкового ответа не нашел.

Порождающий процесс должен иметь привилегию SE_TCB_NAME. Как проверить наличие привилегий смотри здесь
Автор(ы): Александр Федотов
Дата: 07.03.2002
В статье рассказывается, как определить, имеет ли текущий
пользователь некоторую привилегию. Приводится исходный код функций
для проверки как наличия, так и текущего состояния (включенное или
выключенное) привилегии.
.

Можно еще использовать CreateProcessWithLogonW.
Распознавание изображений на Delphi http://dfreader.sourceforge.net
Re[2]: CreateProcessAsUser
От: enola  
Дата: 26.08.05 08:33
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Порождающий процесс должен иметь привилегию SE_TCB_NAME. Как проверить наличие привилегий смотри здесь
Автор(ы): Александр Федотов
Дата: 07.03.2002
В статье рассказывается, как определить, имеет ли текущий
пользователь некоторую привилегию. Приводится исходный код функций
для проверки как наличия, так и текущего состояния (включенное или
выключенное) привилегии.
.


K>Можно еще использовать CreateProcessWithLogonW.


мда, привилегии у него такой нет, а как ее получить? CreateProcessWithLogonW не нужна данная привилегия?
Re[3]: CreateProcessAsUser
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.08.05 08:47
Оценка:
Здравствуйте, enola, Вы писали:

E>Здравствуйте, kavlad, Вы писали:


K>>Порождающий процесс должен иметь привилегию SE_TCB_NAME. Как проверить наличие привилегий смотри здесь
Автор(ы): Александр Федотов
Дата: 07.03.2002
В статье рассказывается, как определить, имеет ли текущий
пользователь некоторую привилегию. Приводится исходный код функций
для проверки как наличия, так и текущего состояния (включенное или
выключенное) привилегии.
.


K>>Можно еще использовать CreateProcessWithLogonW.


E>мда, привилегии у него такой нет, а как ее получить?


Запустить его под LocalSistem, например, сделать сервис, который будет создавать по требованию вашего приложения процесс.

E>CreateProcessWithLogonW не нужна данная привилегия?


Не нужна. Но на Win98/Me ее нет.
Распознавание изображений на Delphi http://dfreader.sourceforge.net
Re[4]: CreateProcessAsUser
От: Аноним  
Дата: 26.08.05 09:31
Оценка:
Здравствуйте, kavlad, Вы писали:

E>>CreateProcessWithLogonW не нужна данная привилегия?


K>Не нужна. Но на Win98/Me ее нет.


вот так вот пишу:



PROCESS_INFORMATION pi;
STARTUPINFOW si;


ZeroMemory( &si, sizeof( STARTUPINFOW ) );
si.cb= sizeof( STARTUPINFOW );
si.lpDesktop = L"winsta0\\default";

bool ret = CreateProcessWithLogonW( L"user", L"domen", L"pass", LOGON_WITH_PROFILE, 
  NULL, L"notepad.exe",
  CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi );


и не работает!
Re[5]: CreateProcessAsUser
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.08.05 10:12
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>
А>si.lpDesktop = 0;
А>
Распознавание изображений на Delphi http://dfreader.sourceforge.net
Re[6]: CreateProcessAsUser
От: enola  
Дата: 26.08.05 10:33
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Здравствуйте, <Аноним>, Вы писали:


А>>
А>>si.lpDesktop = 0;
А>>


Спасибо тебе большое! Получилось!
Re[7]: CreateProcessAsUser
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.08.05 10:41
Оценка:
Здравствуйте, enola, Вы писали:

E>Спасибо тебе большое! Получилось!


Советую почитать Рихтера, чтобы понять почему
Рихтер берется здесь.
Распознавание изображений на Delphi http://dfreader.sourceforge.net
Re[5]: CreateProcessAsUser
От: enola  
Дата: 26.08.05 10:41
Оценка:
А>bool ret = CreateProcessWithLogonW( L"user", L"domen", L"pass", LOGON_WITH_PROFILE,
А> NULL, L"notepad.exe",
А> CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi );

а что такое L перед User перед domen?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.