Прогон программы создания процесса

В качестве упражнения рекомендуется осуществить прогон программы, создающей дочерний процесс.

//Практическое занятие № 23

//Группа xxxxxx Терминал N ФИО

#include "stdafx.h"

#include "windows.h" // win32 API

#include <locale.h> // подключение Русского языка

#include <iostream> // инструкции c++ std,cout,cin …

using namespace std; // пространство стандартных имен */

Void main( VOID )

{

STARTUPINFO StartupInfo;

PROCESS_INFORMATION ProcInfo;

TCHAR TCommandLine[] = TEXT("sleep 30");

ZeroMemory( &StartupInfo, sizeof(StartupInfo) );

StartupInfo.cb = sizeof(StartupInfo);

ZeroMemory( &ProcInfo, sizeof(ProcInfo) );

setlocale(LC_ALL,"RUS");

if( !CreateProcess( NULL, // Не используется имя модуля

TCommandLine, // Командная строка

NULL, // Дескриптор процесса не наследуется.

NULL, // Дескриптор потока не наследуется.

FALSE, // Установка описателей наследования

Нет флагов создания процесса

NULL, // Блок переменных окружения родительского процесса

NULL, // Использовать текущий каталог родительского процесса

&StartupInfo, // Указатель на структуру STARTUPINFO.

&ProcInfo ) // Указатель на структуру информации о процессе.

) cout << "процесс не запущен" << endl;

// Ждать окончания дочернего процесса

cout << "Ждем окончания процесса 30 секунд" << endl ;

WaitForSingleObject( ProcInfo.hProcess, INFINITE );

// Закрыть описатели процесса и потока

CloseHandle( ProcInfo.hProcess );

CloseHandle( ProcInfo.hThread );

}

/* При выполнении данной практической работы я освоил

.

*/

В приведенной программе имя запускаемого модуля передается через второй параметр функции CreateProcess. В примере в качестве дочерней программы используется простейшая системная программа sleep 30 , задача которой - выдержать паузу длительностью 30 секунд.

При завершении процесса сопоставленный с ним объект ядра "процесс" не освобождается до тех пор, пока не будут закрыты все внешние ссылки на этот объект.

Практическое занятие №22

1 Краткие теоретические сведения :

Формируем программу отображающую файл Readme.txt в виде объекта MyFileObject в оперативную память с помощью системных функций

Системная функция CreateFile

Системная функция CreateFileMapping

Системная функция GetLastError

Практическая часть

//Практическое занятие № 22

//Группа xxxxxx Терминал N ФИО

#include "stdafx.h"

#include "windows.h" // win32 API

#include <iostream> // инструкции c++ std,cout,cin …

#include <stdio.h>

using namespace std; // пространство стандартных имен */

void main(void)

{

HANDLE hMapFile;

HANDLE hFile;

hFile = CreateFile(L"ReadMe.txt",

GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,

NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

cout << "LastError= " << GetLastError() << endl;

hMapFile = CreateFileMapping(hFile, NULL,

PAGE_READWRITE, 0, 0, L"MyFileObject");

cout << "LastError= " << GetLastError() << endl;

getchar();

}

/* При выполнении данной практической работы я освоил

*/

Практическое занятие №23

1 Краткие теоретические сведения :

Формируем программу создающую процесс с помощью системной функции CreateProcess, ждем окончания процесса с помощью системной функции WaitForSingleObject, закрываем описатели процесса с помощью системной функции CloseHandle

Практическая часть

//Практическое занятие № 23

//Группа xxxxxx Терминал N ФИО

#include "stdafx.h"

#include "windows.h" // win32 API

#include <locale.h> // подключение Русского языка

#include <iostream> // инструкции c++ std,cout,cin …

using namespace std; // пространство стандартных имен */

Void main( VOID )

{

STARTUPINFO StartupInfo;

PROCESS_INFORMATION ProcInfo;

TCHAR TCommandLine[] = TEXT("sleep 30");

ZeroMemory( &StartupInfo, sizeof(StartupInfo) );

StartupInfo.cb = sizeof(StartupInfo);

ZeroMemory( &ProcInfo, sizeof(ProcInfo) );

setlocale(LC_ALL,"RUS");

if( !CreateProcess( NULL, // Не используется имя модуля

TCommandLine, // Командная строка

NULL, // Дескриптор процесса не наследуется.

NULL, // Дескриптор потока не наследуется.

FALSE, // Установка описателей наследования

Нет флагов создания процесса

NULL, // Блок переменных окружения родительского процесса

Наши рекомендации