Win32学习笔记——进程

来源:互联网 发布:数据统计分析的要求 编辑:程序博客网 时间:2024/05/19 00:41
Windows进程1. Windows进程进程一个容器,包含了应用程序实例的各种资源。Windows多任务操作系统,因此可以同时执行多个进程。2. Windows进程的一些特点2.1 进程中包含了执行代码等资源。2.2 进程都具有私有的地址空间。2.3 每个进程都有一个ID,表示进程。2.4 每个进程都有自己的安全属性。2.5 至少要包含一个可以执行的线程。进程的环境1. 环境信息的获取获取:GetEnvironmentStrings(VOID)返回值是获取到的所有环境信息释放:FreeEnvironmentStrings

void EnvString(){//获取所有环境信息LPTSTR pszEnv = GetEnvironmentStrings() ;LPTSTR pszTemp = pszEnv;while (0 != *pszTemp){wprintf(_T("%s\n"), pszTemp) ;pszTemp += wcslen(pszTemp) + 1 ;}//释放环境信息字符串FreeEnvironmentStrings(pszEnv) ;}

2. 环境变量的获取和设置获取:GetEnvironmentVariable设置:SetEnvironmentVariable三进程信息1. 进程ID和句柄GetProcessID 获取进程的ID GetCurrentProcess 获取进程的句柄返回值为-1,是当前进程的伪句柄。如果想获取当前进程的实际句柄需要使用OpenProcess()2. 打开进程OpenProcess 获取进程的真实句柄3. 获取进程的所有模块(EXE, DLL)获取进程的详细信息使用PSAPIEnumProcessModulses

void ProcModule(){//获取进程句柄DWORD dwModuleNeeded ;HANDLE hHandle = GetCurrentProcess() ;//获取所需大小EnumProcessModules(hHandle, NULL, 0, &dwModuleNeeded) ;DWORD dwCount = dwModuleNeeded/sizeof(HMODULE) ;HMODULE *pModule = new HMODULE[dwCount] ;//获取进程模块EnumProcessModules(hHandle, pModule, dwModuleNeeded, 0) ;//枚举模块名称for (DWORD dwIndex = 0 ; dwIndex < dwCount; ++dwIndex){TCHAR pszBuff[MAX_PATH] = {0} ;GetModuleFileNameEx(hHandle, pModule[dwIndex], pszBuff, MAX_PATH) ;wprintf(_T("%d : %s \t: %p\n"), dwIndex+1, pszBuff, pModule[dwIndex]) ;}delete pModule ;};

进程的使用1. 创建进程WinExec(已淘汰)ShellExecute(一般用来打开带命令行的文件)CreateProcess  (执行一个EXE可执行文件)当进程创建成功,可以从进程信息中获取创建好的进程句柄ID等。2. 打开进程OpenProcess()3. 结束进程ExitProcess()TerminateProcess() ;4. 等候进程结束WaitForSingleObject() ;阻塞函数,当运行时,会在等候的时间内,待等句柄信号。五Windows作业1. Windows作业实际是一个进程组。可以对作业设置权限,一旦进程加入到作业之内,进程的权限将被作业限制。2. 作业的使用2.1 创建一个作业CreateJobObject2.2 设置作业权限SetInfomationJobObject2.3 将进程加入作业  AssignProcessToJobObject2.4 关闭作业CloseHandle2.5 结束作业使用TerminateJobObject结束作业但是并不是所有情况下,作业内的进程都能被结束。

void Job() {//创建JOB对象HANDLE hJob = CreateJobObject(NULL, _T("")) ;//设置权限JOBOBJECT_BASIC_UI_RESTRICTIONS ui = {0} ;ui.UIRestrictionsClass = JOB_OBJECT_UILIMIT_READCLIPBOARD | JOB_OBJECT_UILIMIT_WRITECLIPBOARD ;SetInformationJobObject(hJob, JobObjectBasicUIRestrictions, &ui, sizeof(ui)) ;//创建进程HANDLE hProcess = Create(_T("C:\\WINDOWS\\system32\\notepad.exe")) ;//将进程加入作业AssignProcessToJobObject(hJob, hProcess) ;getch() ;//结束作业TerminateJobObject(hJob, 0) ;CloseHandle(hProcess) ;CloseHandle(hJob) ;}


原创粉丝点击