创建进程

进程的概念:

进程

  进程是当前操作系统下一个被加载到内存的、正在运行的应用程序的实例。每一个进程都是由内核对象和地址空间所组成的,内核对象可以让系统在其内存放有关进程的统计信息并使系统能够以此来管理进程,而地址空间则包括了所有程序模块的代码和数据以及线程堆栈、堆分配空间等动态分配的空间。进程仅仅是一个存在,是不能独自完成任何操作的,必须拥有至少一个在其环境下运行的线程,并由其负责执行在进程地址空间内的代码。在进程启动的同时即同时启动了一个线程,该线程被称作主线程或是执行线程,由此线程可以继续创建子线程。如果主线程退出,那么进程也就没有存在的可能了,系统将自动撤消该进程并完成对其地址空间的释放。

 

 

CreateProcess()函数的原型声明如下:  

  BOOL CreateProcess(
   LPCTSTR lpApplicationName, // 可执行模块名
   LPTSTR lpCommandLine, // 命令行字符串
   LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性
   LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性
   BOOL bInheritHandles, // 句柄继承标志
   DWORD dwCreationFlags, // 创建标志
   LPVOID lpEnvironment, // 指向新的环境块的指针
   LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针
   LPSTARTUPINFO lpStartupInfo, // 指向启动信息结构的指针
   LPPROCESS_INFORMATION lpProcessInformation // 指向进程信息结构的指针
  );

 

 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 LPTSTR szCmdline=_tcsdup(TEXT("D://Program Files//Tencent//QQ//Bin//QQ.exe"));

 ZeroMemory( &si, sizeof(si) );

 si.cb = sizeof(si);

 ZeroMemory( &pi, sizeof(pi) );

 // Start the child process.
 if( !CreateProcess( NULL,   // No module name (use command line)

  szCmdline,      // Command line 
  NULL,           // Process handle not inheritable
  NULL,           // Thread handle not inheritable
  FALSE,          // Set handle inheritance to FALSE
  0,              // No creation flags
  NULL,           // Use parent's environment block
  NULL,           // Use parent's starting directory
  &si,            // Pointer to STARTUPINFO structure
  &pi )           // Pointer to PROCESS_INFORMATION structure
  )
 {

//若失败

  CString strError;
  strError.Format(TEXT("CreateProcess failed (%d)./n"), GetLastError());
  MessageBox(strError);

  return TRUE;
 }

 

 // Wait until child process exits.

 WaitForSingleObject( pi.hProcess, INFINITE );

 // Close process and thread handles.
 CloseHandle( pi.hProcess );
 CloseHandle( pi.hThread );切断和母进程联系

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows创建进程的过程可以分为几个步骤。首先,Windows使用PsCreateSystemProcess函数创建系统进程对象,其子进程与PsInitialSystemProcess相关联。这个函数负责创建系统中的所有进程,包括System进程。 其次,Windows使用CreateProcess函数创建执行体进程对象(EPROCESS对象)。这个函数会为初始线程创建一个栈,并设置好初始执行环境。完成这些工作后,初始线程就可以参与系统的线程调度了。 除了内核部分的工作,通过Windows API函数创建进程还需要与Windows子系统进行交互。Windows在创建进程的过程中,需要与子系统建立联系,并建立独立的内存地址空间。这样,进程就可以接受子系统的管理。 总结来说,Windows创建进程的过程包括使用PsCreateSystemProcess函数创建系统进程对象,使用CreateProcess函数创建执行体进程对象,并与子系统建立联系和建立独立的内存地址空间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [关于Windows创建进程的过程](https://blog.csdn.net/aijuzhou1959/article/details/101801857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值