Создание процессов


Функция CreateProcess создает новый процесс, который запускается независимо от процесса, который его создал. Однако для простоты, это взаимоотношение упоминается как родительское - дочернее отношение.

Нижеследующий фрагмент кода показывает, как создать процесс.

void main( VOID )

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );

si.cb = sizeof(si);

ZeroMemory( &pi, sizeof(pi) );

// Запустим дочерний процесс.

if( !CreateProcess( NULL, // Нет имени модуля (используется командная строка).

"MyChildProcess",     // Командная строка.

NULL,                 // Дескриптор процесса не наследуемый.

NULL,                 // Дескриптор потока не наследуемый.

FALSE,                // Установим наследование дескриптора в FALSE.

0,                    // Флажков создания нет.

NULL,                 // Используйте блок конфигурации родителя.

NULL,                 // Используйте стартовый каталог родителя.

&si,                  // Указатель на структуру STARTUPINFO.

&pi )                 // Указатель на структуру PROCESS_INFORMATION.

)

ErrorExit( "CreateProcess failed." );

// Ждать до тех пор, пока дочерний процесс не выйдет из работы.

WaitForSingleObject( pi.hProcess, INFINITE );

// Закроем дескрипторы процесса и потока.

CloseHandle( pi.hProcess );

CloseHandle( pi.hThread );

}

Если CreateProcess завершается успешно, она возвращает структуру PROCESS_INFORMATION, содержащую дескрипторы и идентификаторы для нового процесса и первичного потока. Дескрипторы потока и процесса создаются с полными правами доступа, хотя доступ может быть ограничен, если Вы устанавливаете описатели системы безопасности. Когда Вы больше не нуждаетесь в этих дескрипторах, то закрываете их при помощи использования функции CloseHandle.

Вы можете также создать и процесс, используя функцию CreateProcessAsUser или CreateProcessWithLogonW. Эти функции позволяют Вам определить контекст защиты учетной записи пользователя, в которой процесс выполняется.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz