К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

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

Новый процесс в Windows создается вызовом функции CreateProcess, которая имеет следующий прототип:
BOOL CreateProcess(
  LPCTSTR IpApplicationName, // имя исполняемого модуля
  LPTSTR IpCoinmandLine, // командная строка
  LPSECURITY_ATTRIBUTES IpProcessAttributes, // защита процесса
  LPSECURITY ATTRIBUTES lpThreadAttributes, // защита потока
  BOOL blnheritHandles, // признак наследования дескриптора
  DWORD dwCreationFlags, // флаги создания процесса
  LPVOID IpEnvironment, // блок новой среды окружения
  LPCTSTR lpCurrentDirectory, // текущий каталог
  LPSTARTUPINFO IpStartUpInfo, // вид главного окна
  LPPROCESS INFORMATION lpProcessInformation // информация о процессе
);

Функция CreateProcess возвращает ненулевое значение, если процесс был создан успешно. В противном случае эта функция возвращает значение FALSE. Процесс, который создает новый процесс, называется родительским процессом (parent process) по отношению к создаваемому процессу. Новый же процесс, который создается другим процессом, называется дочерним процессом (child process) по отношению к процессу-родителю. Сейчас мы опишем только назначение некоторых параметров функции CreateProcess. Остальные параметры этой функции будут описываться по мере их использования.

Первый параметр lpApplicationName определяет строку с именем исполняемого файла, который имеет тип ехе и будет запускаться при создании нового процесса. Эта строка должна заканчиваться нулем и содержать полный путь к исполняемому файлу.

Для примера рассмотрим программу, которая выводит на консоль свое имя и параметры. Эта программа приведена в листинге 4.1.

Листинг 4.1. Программа, которая выводит на консоль свое имя и параметры

#include <conio.h>

int main(int argc, char *argv[])
{
int i;

_cputs("I am created.");

_cputs("\nMy name is: ");
_cputs(argv[0]);

for (i = 1; i < argc; ++i)
_cprintf ("\n My %d parameter = %s", i, argv[i]);

_cputs("\nPress any key to finish.\n");
_getch();

return 0;
}

Скомпилируем эту программу. Полученный exe-файл сохраним на диске C: и назовем ConsoleProcess.exe. Наша задача состоит в запуске этого файла как нового процесса. Как это сделать показано в листинге 4.2, где приведена программа, запускающая созданный exe-файл как консольный процесс с новой консолью.



Предыдущая        В начало страницы       Следующая
2