日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建可继承的进程

發(fā)布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建可继承的进程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文演示如何通過 CreateProcess 創(chuàng)建一個進(jìn)程句柄和主線程句柄可以被繼承的子進(jìn)程。

BOOL CreateProcess(LPCTSTR lpApplicationName, // name of executable moduleLPTSTR lpCommandLine, // command line stringLPSECURITY_ATTRIBUTES LPSECURITY_ATTRIBUTES , // SDLPSECURITY_ATTRIBUTES lpThreadAttributes, // SDBOOL bInheritHandles, // handle inheritance optionDWORD dwCreationFlags, // creation flagsLPVOID lpEnvironment, // new environment blockLPCTSTR lpCurrentDirectory, // current directory nameLPSTARTUPINFO lpStartupInfo, // startup informationLPPROCESS_INFORMATION lpProcessInformation // process information);

CreateProcess 的第三,第四參數(shù)分別表示新進(jìn)程的進(jìn)程屬性和主線程屬性,如果希望創(chuàng)建一個新進(jìn)程,使得新進(jìn)程的進(jìn)程句柄和主線程句柄在當(dāng)前進(jìn)程的句柄表中可以被繼承,則需要對 LPSECURITY_ATTRIBUTES 進(jìn)行設(shè)置。

下面通過一個例子來測試進(jìn)程句柄繼承。

代碼中出現(xiàn)的路徑,請在您的機(jī)器上做相應(yīng)的修改。

主進(jìn)程 InheritProcessHandle.exe

// InheritProcessHandle.cpp : Defines the entry point for the console application. // 測試創(chuàng)建可繼承的進(jìn)程#include "stdafx.h" #include <WINDOWS.H>int main(int argc, char* argv[]) {// 創(chuàng)建一個進(jìn)程句柄和主線程句柄可繼承的進(jìn)程ASECURITY_ATTRIBUTES saProcess, saThread;saProcess.nLength = sizeof(saProcess);saProcess.lpSecurityDescriptor = NULL;saProcess.bInheritHandle = TRUE;saThread.nLength = sizeof(saThread);saThread.lpSecurityDescriptor = NULL;saThread.bInheritHandle = TRUE;STARTUPINFO siA = {0};siA.cb = sizeof(siA);PROCESS_INFORMATION piA;char szCmd[256] = "c:\\notepad.exe";CreateProcess(NULL, szCmd, &saProcess, &saThread, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &siA, &piA);// 創(chuàng)建進(jìn)程B,繼承當(dāng)前進(jìn)程句柄表中進(jìn)程A的主線程句柄和A的進(jìn)程句柄,句柄通過命令行參數(shù)傳遞給B進(jìn)程memset(szCmd, 0, 256);sprintf(szCmd, "F:\\MyProjects\\InheritProcessHandle2\\Debug\\InheritProcessHandle2.exe %x %x", piA.hProcess, piA.hThread);STARTUPINFO siB = {0};siB.cb = sizeof(siB);PROCESS_INFORMATION piB;CreateProcess(NULL, szCmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &siB, &piB);//printf("error: %d\n", GetLastError());return 0; }

子進(jìn)程 InheritProcessHandle2.exe

// InheritProcessHandle2.cpp : Defines the entry point for the console application. // 主進(jìn)程通過 CreateProcess 創(chuàng)建該進(jìn)程,兩個命令行參數(shù)分別表示notepad的進(jìn)程句柄和主線程句柄 // 在該進(jìn)程中繼承得到notepad的句柄,并對notepad進(jìn)行控制操作#include "stdafx.h" #include <WINDOWS.H>int main(int argc, char* argv[]) {// 獲取繼承的notepad進(jìn)程句柄和主線程句柄DWORD dwProcessHandle = -1, dwThreadHandle = -1;sscanf(argv[1], "%x", &dwProcessHandle);sscanf(argv[2], "%x", &dwThreadHandle);printf("進(jìn)程句柄: %x 主線程句柄: %x\n", dwProcessHandle, dwThreadHandle);// 掛起notepadprintf("掛起 notepad.exe 主線程5秒\n");SuspendThread((HANDLE)dwThreadHandle);Sleep(5000);printf("恢復(fù) notepad.exe 主線程.\n");ResumeThread((HANDLE)dwThreadHandle);printf("輸入0關(guān)閉 notepad.exe 進(jìn)程\n");while (getchar() != '0');TerminateProcess((HANDLE)dwProcessHandle, 1);WaitForSingleObject((HANDLE)dwProcessHandle, INFINITE);printf("notepad.exe 進(jìn)程已關(guān)閉\n");return 0; }

主進(jìn)程運(yùn)行結(jié)果
子進(jìn)程啟動后,notepad進(jìn)程被掛起5秒,可以看到notepad的界面已經(jīng)阻塞

5秒后notepad恢復(fù)運(yùn)行

子進(jìn)程可以關(guān)閉notepad進(jìn)程,通過繼承notepad的進(jìn)程句柄。

總結(jié)

以上是生活随笔為你收集整理的创建可继承的进程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。