Познавательный блог | Мобильная врсия |
|
СтраницыПромо |
Работа с процессами. Функции CreateProcess и TerminateProcessРабота с процессами. Функции CreateProcess и TerminateProcess. Для того чтобы из обычного любого приложения создать процесс нам необходима функция CreateProcess.
Функция CreateProcess создает новый процесс и его главный поток. Новый процесс выполняет указанный исполняемый файл. Функция CreateProcess предназначена для запуска новой программы. Функции WinExec и LoadModule также работают, но не предоставляют таких возможностей, как CreateProcess. В дополнение к созданию процесса, CreateProcess также создаёт потоковый объект. Поток создаётся с инициализационным стеком, чей размер описан в заголовке образа исполняемого файла. Поток начинает выполнение в точке входа этого образа. Дескрипторы нового процесса и нового потока создаются с полными правами доступа. Для обоих дескрипторов, если дескриптор безопасности не обеспечивается, то дескриптор может быть использован любой функцией, которая запрашивает дескриптор объекта этого типа. При обеспечении дескриптора безопасности, проверка доступа производится при любом запросе на использование дескриптора. Если проверка не гарантирует доступ, то запрашивающий процесс не может использовать дескриптор данного потока. Процессу назначается 32-битный идентификатор процесса. Идентификатор действует до тех пор, пока процесс не завершится. Он может использоваться для распознавания процесса, или для указания функции OpenProcess для открытия дескриптора процесса. Инициализирующему потоку в процессе также назначается 32-битный идентификатор потока. Этот идентификатор доступен до тех пор, пока поток не завершится и может использоваться для уникального распознавания потока внутри системы. Эти идентификаторы возвращаются в структуре PROCESS_INFORMATION. При указывании имени приложения в строках lpApplicationName или lpCommandLine, не имеет значения, содержит ли имя приложения расширение файла, с одним исключением: приложения для платформ MS-DOS или Windows, чьи файлы с расширением .COM должны содержать расширение .COM. Вызывающий поток может использовать функцию WaitForInputIdle для ожидания окончания инициализации нового процесса и приостановить пользователем ввод данных без его правильной обработки. Это может использоваться при синхронизации родительского и дочернего процессов, так как CreateProcess возвращается без ожидания завершения инициализации нового процесса. Например, вызывающий процесс должен вызвать WaitForInputIdle до попыток отыскать окно ассоциированное с новым процессом. Предпочитаемый путь для завершения процесса это использование функции ExitProcess, потому как эта функция предупреждает все динамически связанные библиотеки (DLL), используемые процессом о предстоящем его завершении. Другие инструменты завершения процесса не уведомляют присоединённые к нему библиотеки. Заметьте, что при вызове потоком ExitProcess, другие потоки процесса завершаются без возможности выполнять какой-либо дополнительный код (включая завершающий код потока присоединённых библиотек).
Функция TerminateProcess завершает работу заданного процесса и всех его потоков.
|
Поиск по сайтуСтатистикаМета |
Разработка и дизайн — StvPromo.ru |
Написать комментарий