![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Три основных события, приводящие к созданию процессов (вызов fork или CreateProcess):
· Загрузка системы
· Работающий процесс подает системный вызов на создание процесса
· Запрос пользователя на создание процесса
Во всех случаях, активный текущий процесс посылает системный вызов на создание нового процесса.
В UNIX каждому процессу присваивается идентификатор процесса (PID - Process IDentifier)
Функция 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. Эти функции позволяют Вам определить контекст защиты учетной записи пользователя, в которой процесс выполняется.
Дата публикования: 2015-01-24; Прочитано: 1091 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!