CreateProcess

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

Описание

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);// убрать процесс
}
}

 

 
« Предыдущая статья   Следующая статья »