Прогон программы создания процесса
В качестве упражнения рекомендуется осуществить прогон программы, создающей дочерний процесс.
//Практическое занятие № 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, // Блок переменных окружения родительского процесса