ПредишенСледващото

Работа с процеси. CreateProcess функция и TerminateProcess

Работа с процеси. CreateProcess функция и TerminateProcess.

За да необичайно приложение, което да се създаде процес, ние се нуждаем от функция CreateProcess.

BOOL CreateProcess (
LPCTSTR lpApplicationName, // указател към името на изпълним файл
LPTSTR lpCommandLine, // указател към командния ред
LPSECURITY_ATTRIBUTES lpProcessAttributes, // указател към атрибути за сигурност на процеса
LPSECURITY_ATTRIBUTES lpThreadAttributes, // указател към атрибути за сигурност на потока
BOOL bInheritHandles, // указател към знамето на наследството
DWORD dwCreationFlags, // създаване на флагове
LPVOID lpEnvironment, // указател към новия блок околната среда
LPCTSTR lpCurrentDirectory, // указател към текущия име на директория
LPSTARTUPINFO lpStartupInfo, // указател за структуриране STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // указател за структуриране PROCESS_INFORMATION
);

CreateProcess функция създава нов процес, а основната й поток. Новият процес изпълнява определена изпълним файл. CreateProcess функция се използва за стартиране на новата програма. Функция WinExec и LoadModule също работят, но не предоставят функции, като например CreateProcess.

В допълнение към създаването на метод, CreateProcess също създава поток обект. Flow инициализиране стека е създаден, чийто размер е описан в заглавната част на изображението изпълним. Flow започва изпълнение на входната точка на изображението.

Дескрипторите на новия процес и нова нишка, създадени с пълни права за достъп. И за двете описания, ако Характеристиката за сигурност не е предоставена, дръжката може да се използва във всяка функция, която изисква по-манипулатор на обект от този тип. Като се грижат за дескриптора на сигурност, проверка за достъп се извършва при всяко искане за използване на дескриптора. Ако тестът не е гаранция за достъп, за процеса на искането не може да използва дръжката на нишката.

Процесът е назначен 32-битов идентификатор на процеса на. Идентификаторът е валиден, докато процесът е завършен. Може да се използва за процеса на признаване, или да посочат OpenProcess функция за отваряне на дескриптора процес. Нулира поток процес също се получава 32-битов поток ID. Този идентификатор е достъпно, докато потокът е завършен и може да се използва за признаване на уникален поток в рамките на системата. Тези идентификатори се връщат PROCESS_INFORMATION структура.

Когато посочи името на приложението в редовете или lpCommandLine lpApplicationName, че няма значение дали името на файла разширение на заявлението, с едно изключение: заявлението за MS-DOS или Windows платформи, чиито файлове с разширение .com на трябва да се включи Ком.

наричайки нишка да използвате функцията WaitForInputIdle, докато чакат за инициализация на новия процес и да преустанови действията на потребителя, без правилното му обработка. Това може да се използва, когато се синхронизира процесите родител и дете, тъй като CreateProcess връща, без да чака приключването на инициализация на нов процес. Така например, на обаждащия се да се обадите WaitForInputIdle до опити за намиране на прозорец, свързан с новия процес.

Най-предпочитаният начин за завършване на процеса е да използвате функцията ExitProcess, защото тази функция не позволява на всички динамично свързана библиотека (DLL), които се използват в процеса на завършване на нейното идване. Друг процес е пълна инструменти не са се присъединили към него да уведоми на библиотеката. Имайте предвид, че в ExitProcess на потока разговор, други потоци на процеса се осъществяват, без възможността да се извършват всеки допълнителен код (крайно поток код включително прилежаща библиотеки).
В примера по-долу, ние ще стартира и веднага убие notepad.exe процес

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

ако (CreateProcess ( "C: \\ Windows \\ notepad.exe", NULL, NULL, NULL, FALSE, NULL, NULL, NULL, CIF, пи) == TRUE)
Cout <<"process" < Cout <<"handle " < Sleep (10000); // изчакване
TerminateProcess (pi.hProcess, NO_ERROR); // премахване процес
>
>

функция TerminateProcess прекрати определен процес и всички нейни нишки.

BOOL TerminateProcess (
ДРЪЖКА hProcess, // справят с процеса
UINT uExitCode // изход код на процеса
);

Свързани статии

Подкрепете проекта - споделете линка, благодаря!