win32 跨进程句柄共享

您所在的位置:网站首页 多进程共享socket win32 跨进程句柄共享

win32 跨进程句柄共享

2024-07-05 05:03| 来源: 网络整理| 查看: 265

前言

Win32 中所有敏感的资源全部都是内核管理,如果应用程序想调度敏感资源,则需要句柄进行间接操作。对于相同资源,每个进程的句柄值也不同的.

在这里插入图片描述 句柄值仅能在自己程序有意义,比如进程A的句柄值22指向是资源A,进程B的句柄值是30指向资源C. 那么我们该如何共享进程的句柄?

方式有如下两种:

父子进程句柄拷贝 句柄拷贝

DuplicateHandle 文档

BOOL DuplicateHandle( HANDLE hSourceProcessHandle,//想要从那个进程复制句柄 HANDLE hSourceHandle,//hSourceProcessHandle进程内的一个句柄值 HANDLE hTargetProcessHandle,//复制到哪个进程中 LPHANDLE lpTargetHandle,// DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions ); void CProcessOneDlg::OnBnClickedButton1() { HWND hwnd = ::FindWindow(NULL, "计算器"); //获取进程的PID DWORD dwpid = 0; GetWindowThreadProcessId(hwnd, &dwpid); //获得进程的句柄 HANDLE hproc = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwpid); calcHandle.Format("得到的计算器的句柄 %X\r\n", hproc); OutputDebugString(calcHandle); UpdateData(FALSE); HWND hwnd2 = ::FindWindow(NULL, "ProcessB"); //获取进程的PID DWORD dwpid2 = 0; GetWindowThreadProcessId(hwnd2, &dwpid2); //获得进程的句柄 HANDLE hproc2 = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwpid2); DWORD lpTargetHandle; HANDLE handle=NULL; BOOL successful= DuplicateHandle( GetCurrentProcess(), hproc, hproc2, &handle, 0, FALSE, DUPLICATE_SAME_ACCESS ); calcHandle.Format("拷贝到目标进程后,目标进程的句柄数值:%X\r\n", handle); UpdateData(FALSE); if (successful) { OutputDebugString(calcHandle); } }

在这里插入图片描述 在这里插入图片描述 得到的计算器的句柄 2E8 拷贝到目标进程后,目标进程的句柄数值:300

句柄继承

我们知道进程可以孵化子进程,而子进程是可以继承父进程句柄信息.而CreateProcess存在参数bInheritHandles可以子进程继续父进程的信息

win32 运行指定其他的进程

void CProcessOneDlg::OnBnClickedButton1() { HWND hwnd = ::FindWindow(NULL, "计算器"); //获取进程的PID DWORD dwpid = 0; GetWindowThreadProcessId(hwnd, &dwpid); //获得进程的句柄 HANDLE hproc = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwpid); calcHandle.Format("得到的计算器的句柄 %X\r\n", hproc); OutputDebugString(calcHandle); UpdateData(FALSE); STARTUPINFO si = { 0,0 }; PROCESS_INFORMATION pi = { 0 }; BOOL rRet = ::CreateProcess(NULL, LPSTR("C:/Users/fmy/source/repos/ProcessTwo/Debug/ProcessTwo.exe"),//打开文件浏览器 NULL, NULL, TRUE,//拷贝父进程句柄到子进程 0, NULL, NULL, &si, &pi ); }

父进程: 在这里插入图片描述

子进程: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3