
- •Оглавление
- •1 Простейшее Win32 приложение
- •2 Функция WinMain
- •3 Оконный класс
- •4 Стили класса, стили окна
- •5 Создание экземпляра оконного класса
- •6 Динамические изменения свойств оконного класса
- •7 Обработка сообщений
- •8 Программирование клавиатуры
- •9 Коды oem, ansii, asci, виртуальные коды клавиш
- •10 Символьные сообщения
- •11 Обработка сообщений от мыши
- •12 Программирование таймера
- •13 Диалоговые окна
- •14 Структура шаблона диалога
- •14(А) Ресурсы диалога
- •15 Функции создания диалога
- •16 Взаимодействие между элементами управления
- •17 Сообщения, SendMessage, SendDlgItemMessage
- •18 Обработка сообщений от элементов диалога
- •19 Элемент «Слайдер» (Румянцев - Азбука программирования в Win32 api, c.148)
- •20 Элемент ProgressBar (Румянцев - Азбука программирования в Win32 api, c.156)
- •21 Bios (общие сведения)
- •22 Файлы (общие сведения)
- •23 Создание файла (Win32 api)
- •24 Операции с файлом (Win32 api)
- •25 Организация файлов
- •26 Файловые системы (общие сведения)
- •Создание файла.
- •Удаление файла.
- •28 Структура логического диска под fat12 (wfat)
- •29 Каталоги в fat12
- •30 Алгоритм определения расположения файлов на диске
- •31 Ф.С. Fat32 (отличительные особенности)
- •32 Изменение элементов системных объектов при выполнении copy
- •33 Ntfs (общие сведения)
- •34 Запись файла в mft
- •35 Метафайлы
- •36 Атрибуты записи файла
- •37 Изменение системных данных при выполнении copy
- •38 Изменение системных данных при выполнении del
- •39 Изменение системных данных при выполнении move
- •40 Процессы. Потоки. Общие сведения
- •41 Модель процесса
- •42 Контекст процесса
- •43 Дескриптор процесса
- •44 Создание процесса (общие сведения)
- •45 Окончание процесса (общие сведения)
- •46 Состояния процесса
- •47 Уровни планирования процессов
- •48 Диспетчеризация процессов
- •49 Класс приоритета процесса
- •50 Создание процесса (Win32 api)
- •51 Win32 Api. Управление процессами
- •52 Win32 Api. Окончание процесса
- •53 Среда процесса
- •54 Командная строка процесса
- •55 Наследование дочерними процессами ресурсов родителя
- •56 Список процессов
- •57 Время выполнения процесса
51 Win32 Api. Управление процессами
Функция создания процесса:
BOOL CreateProcess(
PCTSTR pszApplicationName, //имя исполняемого модуля
PTSTR pszCommandLine, // командная строка
PSECURITY_ATTRIBUTES psaProcess, //указатель на структуру SECURITY_ATTRIBUTES
PSECURITY_ATTRIBUTES psaThread, //указатель на структуру SECURITY_ATTRIBUTES
BOOL bInheritHandles, // флаг наследования текущего процесса
DWORD fdwCreate, // флаги способов создания процесса
PVOID pvEnvironment, // указатель на блок памяти, хранящий строки переменных окружения
PCTSTR pszCurDir, // текущий диск и каталог для дочернего процесса
PSTARTUPINFO psiStartInfo, // указатель на структуру STARTUPINFO
PPROCESS_INFORMATION ppiProcInfo); // указатель на структуру PROCESS_INFORMATION
Функция, которой приостанавливаем выполнение родительского процесса, пока не завершится дочерний процесс:
DWORD WaitForSingleObject(HANDLE hObject, DWORD dwTimeOut);
Процесс завершается, когда один из его потоков вызывает ExitProcess:
VOID ExitProcess(UINT fuExitCode);
Эта функция завершает процесс и заносит в параметр fuExitCode код завершения процесса. Возвращаемого значения у ExitProcess нет, так как результат ее действия — завершение процесса. Если за вызовом этой функции в программе присутствует какой-нибудь код, он никогда не исполняется.
Вызов функции TerminateProcess тоже завершает процесс: BOOL TerminateProcess( HANDLE hProcess, UINT fuExitCode);
Главное отличие этой функции от ExitProcess в том, что ее может вызвать любой поток и завершить любой процесс. Параметр hProcess идентифицирует описатель завершаемого процесса, а в параметре fuExitCode возвращается код завершения процесса.
Родительский процесс, вызвав функцию GetExitCodeProcess, может проверить, завершен ли процесс, идентифицируемый параметром hProcess, и, если да, определить код завершения:
BOOL GetExitCodeProcess( HANDLE hProcess, PDWORD pdwExitCode);
Код завершения возвращается как значение типа DWORD, на которое указывает pdwExitCode.
6) Обнуляет счетчик обьекта (закрытие процесса):
CloseHandle( HANDLE hProcess); // описатель завершаемого процесса
52 Win32 Api. Окончание процесса
Процесс можно завершить четырьмя способами:
входная функция первичного потока возвращает управление (рекомендуемый способ);
один из потоков процесса вызывает функцию ExitProcess (нежелательный способ);
поток другого процесса вызывает функцию TerminateProcess (тоже нежелательно);
все потоки процесса умирают по своей воле (редкость).
1) Приложение следует проектировать так, чтобы его процесс завершался только после возврата управления входной функцией первичного потока. Это единственный способ, гарантирующий корректную очистку всех ресурсов, принадлежавших первичному потоку.
2) Функция ExitProcess
VOID ExitProcess(UINT fuExitCode); Эта функция завершает процесс и заносит в параметр fuExitCode код завершения процесса. Возвращаемого значения у ExitProcess нет, так как результат ее действия — завершение процесса. Если за вызовом этой функции в программе присутствует какой-нибудь код, он никогда не исполняется.
3) Функция TerminateProcess
BOOL TerminateProcess( HANDLE hProcess, UINT fuExitCode); Главное отличие этой функции от ExitProcess в том, что ее может вызвать любой поток и завершить любой процесс. Параметр hProcess идентифицирует описатель завершаемого процесса, а в параметре fuExitCode возвращается код завершения процесса.
4) Когда все потоки процесса уходят
В процессе не исполняется ни один поток, операционная система больше не считает нужным "содержать" адресное пространство данного процесса и немедленно завершает его. При этом код завершения процесса приравнивается коду завершения последнего потока.