CreateProcess
От: getInfo  
Дата: 21.09.04 08:10
Оценка:
Hi all.

Есть сервис, в сервисе нужно порадить процесс

CreateProcess не возвращает ошибок, но ничего и не пораждает.

Каким тогда образом это сделать?

Заранее спасибо.
Re: CreateProcess
От: Demon Россия  
Дата: 21.09.04 08:30
Оценка:
Здравствуйте, getInfo, Вы писали:

I>Есть сервис, в сервисе нужно порадить процесс

I>CreateProcess не возвращает ошибок, но ничего и не пораждает.
Скорее всего он на другом десктопе. Посмотри таскменеджером.

I>Каким тогда образом это сделать?

в lpStartupInfo задай lpDesktop "Default", а лучше "WinSta0\\Default".
Re[2]: CreateProcess
От: getInfo  
Дата: 21.09.04 08:43
Оценка:
Здравствуйте, Demon, Вы писали:

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


I>>Есть сервис, в сервисе нужно порадить процесс

I>>CreateProcess не возвращает ошибок, но ничего и не пораждает.
D>Скорее всего он на другом десктопе. Посмотри таскменеджером.

I>>Каким тогда образом это сделать?

D>в lpStartupInfo задай lpDesktop "Default", а лучше "WinSta0\\Default".


    STARTUPINFO cif;
    ZeroMemory(&cif, sizeof(STARTUPINFO));
    cif.wShowWindow = SW_HIDE;
    cif.lpDesktop = (unsigned short *)malloc(256); 
    if(cif.lpDesktop == NULL)
        return bRet;

    wstrcpy(cif.lpDesktop, L"Default"); 


    PROCESS_INFORMATION pi;
    if (TRUE == CreateProcess(L"c:\\windows\\notepad.exe", L"",
        NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &cif, &pi))
    {
        TerminateProcess(pi.hProcess, NO_ERROR);
        bRet = true;

    }else{
        log(L"alerts", Log::Error, L"Unable to send Net Send");
    }


в итоге bRet == true, notepad не веден в TaskManager'е
Re[3]: CreateProcess
От: Lonely Dog Россия  
Дата: 21.09.04 08:45
Оценка:
Здравствуйте, getInfo, Вы писали:

I>в итоге bRet == true, notepad не веден в TaskManager'е

Под каким аккаунтом создается notepad?
Скорее всего, под Local System. А имеет ли Local System доступ к десктопу?
Скорее всего, нет.
Re[4]: CreateProcess
От: getInfo  
Дата: 21.09.04 09:01
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

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


I>>в итоге bRet == true, notepad не веден в TaskManager'е

LD>Под каким аккаунтом создается notepad?
LD>Скорее всего, под Local System. А имеет ли Local System доступ к десктопу?
LD>Скорее всего, нет.

Как с правами проблему решить?
Re[4]: CreateProcess
От: Demon Россия  
Дата: 21.09.04 09:15
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

I>>в итоге bRet == true, notepad не веден в TaskManager'е

LD>Под каким аккаунтом создается notepad?
LD>Скорее всего, под Local System. А имеет ли Local System доступ к десктопу?
LD>Скорее всего, нет.
Уж кто-кто, а Local System точно имеет.
Re[5]: CreateProcess
От: Lonely Dog Россия  
Дата: 21.09.04 09:21
Оценка:
Здравствуйте, Demon, Вы писали:

D>Здравствуйте, Lonely Dog, Вы писали:


I>>>в итоге bRet == true, notepad не веден в TaskManager'е

LD>>Под каким аккаунтом создается notepad?
LD>>Скорее всего, под Local System. А имеет ли Local System доступ к десктопу?
LD>>Скорее всего, нет.
D>Уж кто-кто, а Local System точно имеет
По-моему, вы не правы.
Re[3]: CreateProcess
От: Demon Россия  
Дата: 21.09.04 09:23
Оценка:
Здравствуйте, getInfo, Вы писали:

I>
I>    if (TRUE == CreateProcess(L"c:\\windows\\notepad.exe", L"",
I>        NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &cif, &pi))
I>    {
I>        TerminateProcess(pi.hProcess, NO_ERROR);
I>


Ну и что мы видим???
1. Если процессу сделать TerminateProcess, то он убьется (т.е. не будет его).
2. MDSN про CreateProcess говорит следующее "If the function succeeds, the return value is nonzero". Разницу между "== TRUE" и "!= 0" чувствуешь?
Re[4]: CreateProcess
От: getInfo  
Дата: 21.09.04 09:33
Оценка:
Здравствуйте, Demon, Вы писали:

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


I>>
I>>    if (TRUE == CreateProcess(L"c:\\windows\\notepad.exe", L"",
I>>        NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &cif, &pi))
I>>    {
I>>        TerminateProcess(pi.hProcess, NO_ERROR);
I>>


D>Ну и что мы видим???

D>1. Если процессу сделать TerminateProcess, то он убьется (т.е. не будет его).
D>2. MDSN про CreateProcess говорит следующее "If the function succeeds, the return value is nonzero". Разницу между "== TRUE" и "!= 0" чувствуешь?

Не в этом дело, даже если

TerminateProcess(pi.hProcess, NO_ERROR);

закоментировать все равно ничего не произойдет
Re[6]: CreateProcess
От: Demon Россия  
Дата: 21.09.04 09:33
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>>>А имеет ли Local System доступ к десктопу?

LD>>>Скорее всего, нет.
D>>Уж кто-кто, а Local System точно имеет
LD>По-моему, вы не правы.

Цитирую Рихтера:
"Учетная запись LocalSystem обладает практически всеми имеющимися в системе привилегиями"

Если ничего не понаставили, то защищенным создается только десктоп Winlogon.
Вот например для переключения активного десктопа с Winlogon на другой, у нее по умолчанию не хватит прав.
Re[5]: CreateProcess
От: Demon Россия  
Дата: 21.09.04 09:40
Оценка: 3 (1)
Здравствуйте, getInfo, Вы писали:

I>>>
I>>>    if (TRUE == CreateProcess(L"c:\\windows\\notepad.exe", L"",
I>>>        NULL, NULL, FALSE, CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, NULL, &cif, &pi))
I>>>    {
I>>>        TerminateProcess(pi.hProcess, NO_ERROR);
I>>>


D>>Ну и что мы видим???

D>>1. Если процессу сделать TerminateProcess, то он убьется (т.е. не будет его).
D>>2. MDSN про CreateProcess говорит следующее "If the function succeeds, the return value is nonzero". Разницу между "== TRUE" и "!= 0" чувствуешь?

I>Не в этом дело, даже если

I>TerminateProcess(pi.hProcess, NO_ERROR);
I>закоментировать все равно ничего не произойдет

Следующий код работает
          STARTUPINFO cif;
          ZeroMemory(&cif, sizeof(STARTUPINFO));
          cif.lpDesktop = "WinSta0\\Default";
          
          PROCESS_INFORMATION pi;
          CreateProcess("c:\\windows\\notepad.exe", "",
               NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &cif, &pi);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.