Вылетает api-ка CreateProcessAsUser()
От: Druidoff  
Дата: 21.01.08 08:48
Оценка:
Народ помогти а то чет парюсь уже назаю скоко вот есть код

boost::shared_ptr<PROCESS_INFORMATION> pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.lpDesktop =_T("winsta0\\default");
si.dwFlags=STARTF_USEPOSITION|STARTF_USESIZE|STARTF_USESHOWWINDOW;
si.dwX=100;
si.dwY=100;
si.dwXSize=200;
si.dwYSize=200;
si.wShowWindow=SW_SHOW;

if (0 == CreateProcessAsUser( spNewToken.get(),
NULL,
L"notepad.exe",// по моему ошибка тут!!!!
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
pi.get()
))
{ATLTRACE("Failed to CreateProcessAsUser\n");
Запускаю его на сборку ошибок нет ни одной даже варнингов.а как пробую запустить на выполнение то сразу вылетат пишет шото типа
ошибка доступа памяти. И на етом все заканчивается. На скоко я понял то вроде бы ошибка где-то сдесь L"notepad.exe", что ета функция CreateProcessAsUser() причитывает 3 параметр (имя запускаемого приложения) потом не останавлтвается и читеат всю подряд память все шо попадется. И как эт исправить я не знаю. Пытался в VS 2005 менять MultiByte string на Unicode и наоборот без разницы одна эта ошибка на все случаи жизни!!! Но эт так пальцем в небо.
P.S. Заранее всем кто напишет пасиба!!!!
Re: Вылетает api-ка CreateProcessAsUser()
От: Sergey Chadov Россия  
Дата: 21.01.08 20:46
Оценка:
Здравствуйте, Druidoff, Вы писали:


D>if (0 == CreateProcessAsUser( spNewToken.get(),

D> NULL,
D> L"notepad.exe",// по моему ошибка тут!!!!
D> NULL,
D> NULL,
D> FALSE,
D> NORMAL_PRIORITY_CLASS,
D> NULL,
D> NULL,
D> &si,
D> pi.get()
D> ))
D> {ATLTRACE("Failed to CreateProcessAsUser\n");
D>Запускаю его на сборку ошибок нет ни одной даже варнингов.а как пробую запустить на выполнение то сразу вылетат пишет шото типа
D>ошибка доступа памяти. И на етом все заканчивается.

Так делать нельзя. Параметр lpCommandLine не просто так объявлен неконстантным. Функция может реально туда писать, что в твоем случае скорее всего происходит.
В MSDN явно написано:The Unicode version of this function, CreateProcessAsUserW, will fail if this parameter is a const string.
--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: Вылетает api-ка CreateProcessAsUser()
От: Patalog Россия  
Дата: 23.01.08 12:46
Оценка:
Здравствуйте, Druidoff, Вы писали:

[]

Замени
boost::shared_ptr<PROCESS_INFORMATION> pi;

на
PROCESS_INFORMATION pi;
//...
CreateProcessAsUser(/*...*/, &pi)

а то ерунда какая-то.
Либо таки уж выдели память для shared_ptr.
... << RSDN@Home 1.2.0 alpha rev. 772>>
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.