【语言-C++】C++、C 创建挂起进程

本文详细介绍了使用C++在Windows环境下初始化进程类型结构,并通过`CreateProcess`函数创建子进程的过程,包括设置进程属性如优先级、创建方式等。
#include <windows.h>  
#include <stdio.h>  
struct ProcessType
{
	DWORD value[30];
};

void Init(ProcessType &pt)
{
	pt.value[0] = DEBUG_PROCESS;
	pt.value[1] = DEBUG_ONLY_THIS_PROCESS;
	pt.value[2] = CREATE_SUSPENDED;//新建进程的主线程挂起,调用ResumeThread(pis.hThread);激活新进程的主线程
	pt.value[3] = DETACHED_PROCESS;
	pt.value[4] = CREATE_NEW_CONSOLE;
	pt.value[5] = NORMAL_PRIORITY_CLASS;
	pt.value[6] = IDLE_PRIORITY_CLASS;
	pt.value[7] = HIGH_PRIORITY_CLASS;
	pt.value[8] = REALTIME_PRIORITY_CLASS;
	pt.value[9] = CREATE_NEW_PROCESS_GROUP;
	pt.value[10] = CREATE_UNICODE_ENVIRONMENT;
	pt.value[11] = CREATE_SEPARATE_WOW_VDM;
	pt.value[12] = CREATE_SHARED_WOW_VDM;
	pt.value[13] = CREATE_FORCEDOS;
	pt.value[14] = BELOW_NORMAL_PRIORITY_CLASS;
	pt.value[15] = ABOVE_NORMAL_PRIORITY_CLASS;
	pt.value[16] = INHERIT_PARENT_AFFINITY;
	pt.value[17] = INHERIT_CALLER_PRIORITY;
	pt.value[18] = CREATE_PROTECTED_PROCESS;
	pt.value[19] = EXTENDED_STARTUPINFO_PRESENT;
	pt.value[20] = PROCESS_MODE_BACKGROUND_BEGIN;
	pt.value[21] = PROCESS_MODE_BACKGROUND_END;
	pt.value[22] = CREATE_BREAKAWAY_FROM_JOB;
	pt.value[23] = CREATE_PRESERVE_CODE_AUTHZ_LEVEL;
	pt.value[24] = CREATE_DEFAULT_ERROR_MODE;
	pt.value[25] = CREATE_NO_WINDOW;
	pt.value[26] = PROFILE_USER;
	pt.value[27] = PROFILE_KERNEL;
	pt.value[28] = PROFILE_SERVER;
	pt.value[29] = CREATE_IGNORE_SYSTEM_DEFAULT;

}
BOOL CreateChildProcess(LPWSTR lpszExecFile,PROCESS_INFORMATION& proinfo,DWORD TYPE)  
{  
	STARTUPINFO si = {sizeof(si)};  //启动信息  
	PROCESS_INFORMATION pi ;  //返回信息结构体  
	BOOL bStatus = CreateProcess(lpszExecFile,NULL,NULL,NULL,FALSE,TYPE,NULL,NULL,&si,&pi);//创建进程  
	if(!bStatus)  
	{  
		return FALSE;  
	}  
	proinfo = pi;  
	return TRUE;  
}  
int main(int argc, char const *argv[])  
{  
	ProcessType PT;
	Init(PT);
	printf("开始创建进程\n");  
	PROCESS_INFORMATION pis;//用于保存函数返回值  
	LPWSTR P(L"C:\\Windows\\system32\\calc.exe");
	//创建进程
	if(!CreateChildProcess(P,pis,PT.value[2]))  
	{  
		printf("创建进程失败!\n");  
		return -1;  
	}  
	printf("创建进程成功!进程句柄为:%d\n",pis.hThread);  
	printf("按任意键将挂起进程恢复!\n");
	system("pause");  

	//挂起进程恢复
	ResumeThread(pis.hThread);  
	printf("演示完毕!\n");  
	system("pause");  
	return 0;  
}

创建记事本进程: ``` #include <windows.h> #include <stdio.h> int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); if (!CreateProcess("notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { printf("CreateProcess failed (%d).\n", GetLastError()); return 1; } WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; } ``` 销毁记事本进程: ``` #include <windows.h> #include <stdio.h> int main() { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); if (hProcess == NULL) { printf("OpenProcess failed (%d).\n", GetLastError()); return 1; } if (!TerminateProcess(hProcess, 0)) { printf("TerminateProcess failed (%d).\n", GetLastError()); return 1; } CloseHandle(hProcess); return 0; } ``` 挂起记事本进程: ``` #include <windows.h> #include <stdio.h> int main() { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); if (hProcess == NULL) { printf("OpenProcess failed (%d).\n", GetLastError()); return 1; } if (!SuspendThread(hProcess)) { printf("SuspendThread failed (%d).\n", GetLastError()); return 1; } CloseHandle(hProcess); return 0; } ``` 激活记事本进程: ``` #include <windows.h> #include <stdio.h> int main() { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId); if (hProcess == NULL) { printf("OpenProcess failed (%d).\n", GetLastError()); return 1; } if (ResumeThread(hProcess) == -1) { printf("ResumeThread failed (%d).\n", GetLastError()); return 1; } CloseHandle(hProcess); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值