Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Assignment: (1) Study Win32 API functions related to the process; (2) Write a pr

ID: 3888851 • Letter: A

Question

Assignment:

(1) Study Win32 API functions related to the process;

(2) Write a program to create and terminate a new process on Windows OS using C++.

Background

1. CreatProcess( )

In Windows, one process can create another process by using the Win32 API function CreateProcess( ). Whenever a process is created, the OS performs a large amount of work such as allocating resources to the process, and creating a base thread for the process, etc.

The CreateProcess( ) function has many parameters, and some of them can be quite complex. Unlike the fork( ) call, which has no parameters and child’s behavior is completely defined by parent’s profile and default behavior.

After the Windows OS has created the new process, it will return a handle for the child process and a handle for the base thread in the process.

Below is a copy of the function prototype for the CreateProcess( ) (check the Win32 API reference manual for details about each parameter). The function prototype does not use any standard C types. Instead, it uses a set of types defined in the windows.h file, many of which are just aliases for standard C types.

Bool CreatProcess(

          LPCTSTR    lpApplicationName,

          // pointer to name of the executable module

          LPTSTR    lpCommanLine,

          // pointer to command line string

          LPSECURITY_ATTRIBUTES    lpProcessAttributes,

          // pointer to process security attributes

          LPSECURITY_ATTRIBUTES    lpThreadAttributes,

          // pointer to thread security attributes

          BOOL    BInheritHandles,               //handle inheritance flag

          DWORD    dwCreationFlags,          // creation flags

          LPVOID    lpEnvironment,              // pointer to new environment block

          LPCTSTR   lpCurrentDirectory,        // pointer to current directory name

          LPSTARTUPINFO    lpStartupInfo,   // pointer to STARTUPINFO

          LPPROCESS_INFOMATON    lpProcessInformation

          // pointer to PROCESS_INFORMATION

);

The ten parameters in CreatProcess( ) provide great flexibility to the programmer, but for simple case, a default value can be used for many of them. For example, the following code skeleton shows how to create a child process with a single thread

#include <windows.h>

#include <stdio.h>  

#include <string.h>

… … …

STARTUPINFO    startInfo;

PROCESS_INFORMATION    processInfo;

… … …

ZeroMemory(&startInfo, sizeof(startInfo));

startInfo.cb=sizeof(startInfo);

if(!CreateProcess(NULL, lpCommandLine, NULL, NULL, FALSE,

          0, NULL, NULL, &startInfo, &processInfo))

{fprintf(stderr, “CreatProcess failed on err %d ”, GetLastError( ) );

… … …

Note: lpCommandLine can be replaced by “Notepad.exe”, this will create a process of Notepad. This argument may need to be typecast as a wchar_t* for some systems. Google LPWSTR for more info.

2. TerminateProcess ()

This function terminates the specified process and all of its threads.

BOOL TerminateProcess (

HANDLE hProcess,   // [in] Handle to the process to terminate

DWORD uExitCode);   // [in] Specifies the exit code for the process and for all

   threads terminated as a result of this call. such as 0.

)

Example:

HANDLE hProc1 = processInfo.hProcess; // Get Handle for this created process

TerminateProcess(hProc1,0);          // Terminate this process

Useful URLs:

Create process: http://msdn.microsoft.com/en-us/library/ms682512

Terminate process: http://msdn.microsoft.com/en-us/library/aa450927.aspx

Explanation / Answer

else

  printf( "Process Termination Failed. ");

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote