Шаг 131 - CreateProcess

На данный момент это основная функция запуска процесса, все остальные функции такие как WinExec и LoadModule оставлены для совместимости и используют CreateProcess.

131_1.gif (5388 b)

Описание

BOOL CreateProcess
(
	LPCTSTR lpApplicationName,                 // имя исполняемого модуля
	LPTSTR lpCommandLine,                      // Командная строка
	LPSECURITY_ATTRIBUTES lpProcessAttributes, // Указатель на структуру SECURITY_ATTRIBUTES
	LPSECURITY_ATTRIBUTES lpThreadAttributes,  // Указатель на структуру SECURITY_ATTRIBUTES
	BOOL bInheritHandles,                      // Флаг наследования текущего процесса
	DWORD dwCreationFlags,                     // Флаги способов создания процесса
	LPVOID lpEnvironment,                      // Указатель на блок среды
	LPCTSTR lpCurrentDirectory,                // Текущий диск или каталог
	LPSTARTUPINFO lpStartupInfo,               // Указатель нас структуру STARTUPINFO
	LPPROCESS_INFORMATION lpProcessInformation // Указатель нас структуру PROCESS_INFORMATION 
);

lpApplicationName. Указатель на строку которая заканчивается нулем и содержит имя выполняемого модуля. Этот параметр может быть NULL тогда имя модуля должно быть в lpCommandLine самым первым элементом. Если операционная система NT и модуль 16 разрядов этот параметр NULL обязательно. имя модуля может быть абсолютным или относительным. Если относительное то будет использована информация из lpCurrentDirectory или текущий каталог.

lpCommandLine.Командная строка. Здесь передаются параметры. Она может быть NULL. Здесь можно указать и путь и имя модуля.

lpProcessAttributes.Здесь определяются атрибуты защиты для нового приложения. Если указать NULL то система сделает это по умолчанию.

lpThreadAttributes. Здесь определяются атрибуты защиты для первого потока созданного приложением. NULL опять приводит к установке по умолчанию.

bInheritHandles. Флаг наследования от процесса производящего запуск. Здесь наследуются дескрипторы. Унаследованные дескрипторы имеют те же значения и права доступа, что и оригиналы.

dwCreationFlags. Флаг способа создание процесса и его приоритет.

CREATE_DEFAULT_ERROR_MODE	Новый процесс не наследует режим ошибок (error mode) вызывающего процесса. 
CREATE_NEW_CONSOLE		Новый процесс получает новую консоль вместо того, чтобы унаследовать родительскую. 
CREATE_NEW_PROCESS_GROUP	Создаваемый процесс - корневой процесс новой группы. 
CREATE_SEPARATE_WOW_VDM	только Windows NT: Если этот флаг  установлен, новый процесс запускается 
			в собственной Virtual DOS Machine (VDM).  
CREATE_SHARED_WOW_VDM	только Windows NT: Этот флаг указывает функции CreateProcess запустит 
			новый процесс в разделяемой Virtual DOS Machine. 
CREATE_SUSPENDED		Первичная нить процесса создается в спящем (suspended) состоянии 
			и не выполняется до вызова функции ResumeThread. 
CREATE_UNICODE_ENVIRONMENT	Если этот флаг установлен, блок переменных окружения, указанный в 
			параметре lpEnvironment, использует кодировку Unicode. Иначе - кодировку ANSI. 
DEBUG_PROCESS		Если этот флаг установлен, вызывающий процесс считается отладчиком, 
			а новый процесс - отлаживаемым.  
DEBUG_ONLY_THIS_PROCESS	Если этот флаг не установлен и вызывающий процесс находится под отладкой, 
			новый процесс так же становится отлаживаемым тем же отладчиком. 
DETACHED_PROCESS		Создаваемый процесс не имеет доступа к родительской консоли. 
			Этот флаг нельзя использовать с флагом CREATE_NEW_CONSOLE. 
HIGH_PRIORITY_CLASS	Указывает на то, что процесс выполняет критичные по времени задачи
IDLE_PRIORITY_CLASS	Указывает процесс,  выполняются только когда система находится в состоянии ожидания 
NORMAL_PRIORITY_CLASS	Указывает на процесс, без каких либо специальных требований к выполнению. 
REALTIME_PRIORITY_CLASS	Указывает процесс имеющий наивысший возможный приоритет.

lpEnvironment. Указывает на блок среды. Если NULL, то будет использован блок среды родительского процесса. Блок среды это список переменных имя=значение в виде строк с нулевым окончанием.

lpCurrentDirectory.Указывает текущий диск и каталог. Если NULL то будет использован диск и каталог процесса родителя.

lpStartupInfo Используется для настройки свойств процесса, например расположения окон и заголовок. Структура должна быть правильно инициализирована

STARTUPINFO sti;				// структура
ZeroMemory(&sti,sizeof(STARTUPINFO));	// обнулить
sti.cb=sizeof(STARTUPINFO);			// указать размер

lpProcessInformation Структура PROCESS_INFORMATION с информацией о процессе. Будет заполнена Windows.

В результате выполнение функций вернет FALSE или TRUE. В случае успеха TRUE. Пример использования.

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
	STARTUPINFO cif;
	ZeroMemory(&cif,sizeof(STARTUPINFO));
	PROCESS_INFORMATION pi;
	if (CreateProcess("c:\\windows\\notepad.exe",NULL,
		NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE)
	{
		cout << "process" << endl;
		cout << "handle " << pi.hProcess << endl;
		Sleep(1000);				// подождать
		TerminateProcess(pi.hProcess,NO_ERROR);	// убрать процесс
	}
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 30.07.2001