- •1. Понятие процесса.
- •2.Типы приложений под Windows
- •3.Описатель экземпляра процесса
- •4.Описатель предыдущего экземпляра процесса
- •5.Командная строка процесса
- •6.Переменные окружения
- •7.Текущие диск и каталог для процесса
- •8.Текущие каталоги для процесса
- •9.Создание процесса - функция CreateProcess
- •9.1. Параметры pszApplicationName и pszCommandLine
- •9.2. Параметры psaProcess, psaThread и blnheritHandles
- •9.3. Параметр fdwCreate
- •9.4. Параметр pvEnvironment
- •9.5.Параметр pszCurDir
- •9.6. Параметр psiStartlnfo
- •9.7. Параметр ppiProclnfo
- •10. Завершение процесса
- •10.1. Возврат управления входной функцией первичного потока
- •10.2. Функция ExitProcess
- •10.3. Функция TerminateProcess
- •10.4.Завершение всех процессов потока
- •11. Порядок завершения процесса
- •14. Дочерние процессы
- •15. Запуск обособленных дочерних процессов
- •16. Порядок выполнения работы
- •17. Контрольные вопросы
9.3. Параметр fdwCreate
Параметр fdwCreate определяет флаги, влияющие на то, как именно создается новый процесс. Флаги комбинируются булевым оператором OR.
-
Флаг DEBUG_PROCESS даст возможность родительскому процессу проводить отладку дочернего, а также всех процессов, которые последним могут быть порождены Если этот флаг установлен, система уведомляет родительский про цесс (он теперь получает статус отладчика) о возникновении определенных событий в любом из дочерних процессов (а они получают статус отлаживаемых).
-
Флаг DEBUG_ONLY_THIS_PROCESS аналогичен флагу DEBUG_PROCESS с тем исключением, что заставляет систему уведомлять родительский процесс о воз никновении специфических событий только в одном дочернем процессе — его прямом потомке. Тогда, если дочерний процесс создаст ряд дополнительных, отладчик уже нс уведомляется о событиях, «происходящих» в них.
-
Флаг CREATE_SUSPENDED позволяет создать процесс и в то же время приоста новить его первичный поток Это позволяет родительскому процессу модифи цировать содержимое памяти в адресном пространстве дочернего, изменять приоритет его первичного потока или включать этот процесс в задание (job) до того, как он получит шанс на выполнение. Внеся нужные изменения в до черний процесс, родительский разрешает выполнение его кода вызовом функции ResumeThread.
-
Флаг DETACHED_PROCESS блокирует доступ процессу, инициированному кон сольной программой, к созданному родительским процессом консольному окну и сообщает системе, что вывод следует перенаправить в новое окно CUI процесс, создаваемый другим CUI-процессом, по умолчанию использует консольное окно родительского процесса. Таким образом, этот флаг заставляет новый процесс перенаправлять свой вывод в новое консольное окно
-
Флаг CREATE_NEW_CONSOLE приводит к созданию нового консольного окна для нового процесса. Имейте в виду, что одновременная установка флагов CREATE_NEW_CONSOLE и DETACHED_PROCESS недопустима.
-
Флаг CREATE_NO_WINDOW не дает создавать никаких консольных окон для данного приложения и тем самым позволяет исполнять его без пользовательского интерфейса.
-
Флаг CREATE_NEW_PROCESS_GROUP служит для модификации списка процессов, уведомляемых о нажатии клавиш Ctrl+C и Ctrl+Break. Если в системе одновременно исполняется несколько CUI-процессов, то при нажатии одной из упомянутых комбинаций клавиш система уведомляет об этом только процессы, включенные в группу. Указание этого флага при создании нового СUI-процесca, создает и новую группу
-
Флаг CREATE_DEFAULT_ERROR_MODE сообщает системе, чтo новый процесс не должен наследовать режимы обработки ошибок, установленные в родительском (см. в MSDN функциию SetErrorMode).
-
Флаг CREATE_SEPARATE_WOW_VDM полезен только при запуске 16-разрядно го Wmdows-приложения в Windows 2000. Если он установлен, система создает отдельную виртуальную DOS-машину (Virtual DOS-machine, VDM) и запускает 16-разрядное Windows-приложение именно в ней (По умолчанию все 16 разрядные Windows-приложения выполняются в одной, общей VDM.) Выполнение приложения в отдельной VDM дает большое преимущество, "рухнув", приложение уничтожит лишь эту VDM, а программы, выполняемые в других VDM, продолжат нормальную работу. Кроме того, 16-разрядные Windows-приложения, выполняемые в раздельных VDM, имеют и раздельные очереди ввода. Это значит, что, если одно приложение вдруг "зависнет", приложения в других VDM продолжат прием ввода. Единственный недостаток работы с несколькими VDM в том, что каждая из них требует значительных объемов физической памяти. Windows 98 выполняет все 16-разрядные Windows-приложения только в одной VDM, и изменить тут ничего нельзя.
-
Флаг CREATE_SHARED_WOW_VDM полезен только при запуске 16-разрядного Windows-приложения в Windows 2000. По умолчанию все 16-разрядные Windows-приложения выполняются в одной VDM, если только не указан флаг CREATE_SEPARATE_WOW_VDM. Однако стандартное пoвeдeниeWindows 2000 можно изменить, присвоив значение "yes" параметру DefaultSeparateVDM в paздeлe HKEY_LOCAL_MACHINE\System\CurгentControlSet\Contгol\WOW.(Пocле модификации этого параметра систему надо перезагрузить.) Установив значение «yes», но указание флага CREATE_SHARED_WOW_VDM, вновь заставляет Windows 2000 выполнять все 16-разрядные Windows-приложения в одной VDM.
-
Флаг CREATE_UNICODE_ENVIRONMENT сообщает системе, что блок переменных окружения дочернего процесса должен содержать Unicode-символы. По умолчанию блок формируется на основе ANSI-символов.
-
Флаг CREATE_FORCEDOS заставляет систему выполнять программу MS-DOS, встроенную в 16-разрядное приложение OS/2.
-
Флаг CREATE_BREAKAWAY_FROM_JOB позволяет процессу, включенному в задание, создать новый процесс, отделенный от этого задания.
Параметр fdwCreate разрешает задать и класс приоритета процесса Однако это необязательно и даже, как правило, но рекомендуется, система присваивает новому процессу класс приоритета по умолчанию. Возможные классы приоритета перечис лены в следующей таблице.
Таблица 9.1. Классы приоритета
Класс приоритета |
Флаговый идентификатор |
Idle (простаивающий) |
IDLE_PRIORITY_CLASS |
Below normal (ниже обычного) |
BELOW_NORMAL_PRIORITY_CLASS |
Normal (обычный) |
NORMAL PRIORITY CLASS |
Above normal (выше обычного) |
ABOVE_NORMAL_PRIORITY_CLASS |
High (высокий) |
HIGH_PRIORITY_CLASS |
Realtime (реального времени) |
REALTIME_PRIORITY_CLASS |
Классы приоритета влияют на распределение процессорного времени между процессами и их потоками.
Замечание Классы приоритета BELOW_NORMAL_PRIORITY_CLASS и ABOVE_NORMAL_ PRIORITY_CLASS введены лишь в Windows 2000; они не поддерживаются в Windows NT 4.0, Windows 95 или Windows 98.