WIN32核心编程 - 进程操作(二) 遍历进程 - 进程通信

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> 链接点击跳转博客主页

目录

遍历进程

CreateToolhelp32Snapshot

EnumProcesses

NtQuerySystemInformation

进程通信

clipboard

FileMapping

NamedPipe

Mailslot


遍历进程

CreateToolhelp32Snapshot

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>int main()
{HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hSnap != INVALID_HANDLE_VALUE){setlocale(LC_ALL, "chs");PROCESSENTRY32 pe32 = { 0 };pe32.dwSize = sizeof(pe32);BOOL bRet = Process32First(hSnap, &pe32);while (bRet){wprintf(L"%s %d\r\n", pe32.szExeFile, pe32.th32ProcessID);if (lstrcmp(pe32.szExeFile, L"die.exe") == 0){HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);if (hProcess != NULL){TerminateProcess(hProcess, 0);CloseHandle(hProcess);}}bRet = Process32Next(hSnap, &pe32);}CloseHandle(hSnap);}return 0;
}

EnumProcesses

#include <iostream>
#include <Windows.h>
#include <Psapi.h>int main()
{DWORD dwProcessCount = 0;DWORD dwProcessIdArr[1024] = { 0 };if (!EnumProcesses(dwProcessIdArr, sizeof(dwProcessIdArr), &dwProcessCount)){return 0;}for (size_t i = 0; i < dwProcessCount / 4; i++){printf("ProcessId -> [%d] \r\n", dwProcessIdArr[i]);HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessIdArr[i]);if (hProcess != NULL){DWORD dwModuleCount = 0;HMODULE hMod = NULL;if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &dwModuleCount)){TCHAR szName[MAX_PATH] = { 0 };if (GetModuleBaseName(hProcess, hMod, szName, sizeof(szName) / sizeof(TCHAR))){printf("%ws \r\n", szName);}}}}return 0;
}

NtQuerySystemInformation

  #include <iostream>
#include <Windows.h>/*NTSTATUSNtQuerySystemInformation(__in SYSTEM_INFORMATION_CLASS SystemInformationClass,__out_bcount_opt(SystemInformationLength) PVOID SystemInformation,__in ULONG SystemInformationLength,__out_opt PULONG ReturnLength);
*/
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#define SystemProcessInformation 5
typedef LONG KPRIORITY;
typedef NTSTATUS(WINAPI* NtQuerySystemInformation)(DWORD, PVOID, ULONG, PULONG);
typedef struct _UNICODE_STRING {USHORT Length;USHORT MaximumLength;    PWCH   Buffer;
} UNICODE_STRING;
typedef struct _SYSTEM_PROCESS_INFORMATION {ULONG NextEntryOffset;ULONG NumberOfThreads;LARGE_INTEGER SpareLi1;LARGE_INTEGER SpareLi2;LARGE_INTEGER SpareLi3;LARGE_INTEGER CreateTime;LARGE_INTEGER UserTime;LARGE_INTEGER KernelTime;UNICODE_STRING ImageName;KPRIORITY BasePriority;HANDLE UniqueProcessId;HANDLE InheritedFromUniqueProcessId;ULONG HandleCount;ULONG SessionId;ULONG_PTR PageDirectoryBase;SIZE_T PeakVirtualSize;SIZE_T VirtualSize;ULONG PageFaultCount;SIZE_T PeakWorkingSetSize;SIZE_T WorkingSetSize;SIZE_T QuotaPeakPagedPoolUsage;SIZE_T QuotaPagedPoolUsage;SIZE_T QuotaPeakNonPagedPoolUsage;SIZE_T QuotaNonPagedPoolUsage;SIZE_T PagefileUsage;SIZE_T PeakPagefileUsage;SIZE_T PrivatePageCount;LARGE_INTEGER ReadOperationCount;LARGE_INTEGER WriteOperationCount;LARGE_INTEGER OtherOperationCount;LARGE_INTEGER ReadTransferCount;LARGE_INTEGER WriteTransferCount;LARGE_INTEGER OtherTransferCount;
} SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;int main()
{NTSTATUS status = NULL;HMODULE hModule = NULL;ULONG uLength = 0xFFFFF;ULONG uRet = 0;NtQuerySystemInformation pFun  = NULL;PSYSTEM_PROCESS_INFORMATION pInfo = NULL;//NtQuerySystemInformationhModule = LoadLibrary(TEXT("ntdll.dll"));pFun = (NtQuerySystemInformation)GetProcAddress(hModule, "NtQuerySystemInformation");pInfo = (PSYSTEM_PROCESS_INFORMATION)malloc(uLength);status = pFun(SystemProcessInformation, pInfo, uLength, &uRet);if (NT_SUCCESS(status)){while (pInfo->NextEntryOffset){printf("%ws %d \r\n", pInfo->ImageName.Buffer, pInfo->UniqueProcessId);pInfo = (PSYSTEM_PROCESS_INFORMATION)((PUCHAR)pInfo + pInfo->NextEntryOffset);}}return 0;
}

进程通信

clipboard

#include <iostream>
#include <Windows.h>int main()
{//CTRL C#if 0const char* str = "Hello 0xCC";//打开剪贴板 OpenClipboardif (!OpenClipboard(NULL)) return 0;//清空剪贴板 EmptyClipboardif (!EmptyClipboard()){CloseClipboard();return 0;}//分配内存区 GlobalAllocHGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, strlen(str) + 1);if (hMem == NULL){CloseClipboard();return 0;}PVOID pBuffer = GlobalLock(hMem);if (pBuffer == NULL){CloseClipboard();return 0;}memcpy(pBuffer, str, strlen(str) + 1);GlobalUnlock(hMem);//设置剪贴板 SetClipboardSetClipboardData(CF_TEXT, hMem);//关闭剪贴板 CloseClipboardCloseClipboard();#endif //CTRL V#if 0//打开剪贴板 OpenClipboardif (!OpenClipboard(NULL)) return 0;//获取剪贴板 GetClipboardDataHANDLE hData = GetClipboardData(CF_TEXT);if (hData == NULL){CloseClipboard();return 0;}PCHAR pStr = (PCHAR)GlobalLock(hData);std::cout << pStr << std::endl;GlobalUnlock(hData);//关闭剪贴板 CloseClipboardCloseClipboard();#endifreturn 0;
}

FileMapping

#include <iostream>
#include <windows.h>int main()
{//创建文件映射对象HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,0xFF,TEXT("0xCCShare"));if (hMapFile == NULL){std::cout << "CreateFileMapping ErrorCode -> " << GetLastError() << std::endl;return 0;}//映射对象视图LPVOID lpBuffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);if (lpBuffer == NULL){std::cout << "MapViewOfFile ErrorCode -> " << GetLastError() << std::endl;return 0;}//写入共享内存数据char szStr[] = "Exit";memcpy(lpBuffer, szStr, sizeof(szStr));//等待进程读取std::cout << "Success Share Mem " << std::endl;std::cin.get();//释放资源UnmapViewOfFile(lpBuffer);CloseHandle(hMapFile);return 0;
}
#include <iostream>
#include <windows.h>int main()
{//打开存在文件映射对象HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, TEXT("0xCCShare"));if (hMapFile == NULL){std::cout << "OpenFileMapping ErrorCode -> " << GetLastError() << std::endl;return 0;}//映射对象视图LPVOID lpBuffer = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);if (lpBuffer == NULL){std::cout << "MapViewOfFile ErrorCode -> " << GetLastError() << std::endl;return 0;}std::cout << "Read Info -> " << static_cast<char*>(lpBuffer) << std::endl;std::cin.get();//获取共享内存数据if (strcmp((PCHAR)lpBuffer, "Exit") == 0){ExitProcess(0);}//释放资源std::cout << "Free" << std::endl;UnmapViewOfFile(lpBuffer);CloseHandle(hMapFile);return 0;
}

NamedPipe

#include <iostream>
#include <Windows.h>#define PIPE_NAME L"\\\\.\\pipe\\0xCCPipe"int main()
{//创建命名管道HANDLE hNamedPipe = CreateNamedPipe(PIPE_NAME,PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,4096,4096,NMPWAIT_USE_DEFAULT_WAIT,NULL);if (hNamedPipe == INVALID_HANDLE_VALUE){std::cout << "CreateNamedPipe ErrorCode -> " << GetLastError() << std::endl;return 0;}//等待客户连接std::cout << "Waiting for client Connection" << std::endl;BOOL bRet = ConnectNamedPipe(hNamedPipe, NULL);if (!bRet){std::cout << "ConnectNamedPipe ErrorCode -> " << GetLastError() << std::endl;CloseHandle(hNamedPipe);return 0;}std::cout << "Client Connected" << std::endl;//发送客户消息DWORD dwWrite = 0;char szBuffer[] = "Hello 0xCC";WriteFile(hNamedPipe, szBuffer, sizeof(szBuffer), &dwWrite, NULL);//接受客户消息CHAR szBuffer1[0xFF] = { 0 };DWORD dwRead = 0;ReadFile(hNamedPipe, szBuffer1, sizeof(szBuffer1), &dwRead, NULL);std::cout << szBuffer1 << std::endl;//清理资源CloseHandle(hNamedPipe);return 0;
}
#include <iostream>
#include <Windows.h>#define PIPE_NAME L"\\\\.\\pipe\\0xCCPipe"int main()
{//连接命名管道HANDLE hNamedPipe = CreateFile(PIPE_NAME,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,NULL,NULL);if (hNamedPipe == INVALID_HANDLE_VALUE){std::cout << "CreateNamedPipe ErrorCode -> " << GetLastError() << std::endl;return 0;}//接受服务消息CHAR szBuffer[0xFF] = { 0 };DWORD dwRead = 0;ReadFile(hNamedPipe, szBuffer, sizeof(szBuffer), &dwRead, NULL);std::cout << szBuffer << std::endl;//发送服务消息DWORD dwWrite = 0;char szBuffer1[] = "Hello 0xCC";WriteFile(hNamedPipe, szBuffer1, sizeof(szBuffer1), &dwWrite, NULL);//清理资源CloseHandle(hNamedPipe);return 0;
}

Mailslot

#include <iostream>
#include <windows.h>int main() 
{//创建邮槽HANDLE hMailSlot = CreateMailslot(TEXT("\\\\.\\mailslot\\0xCCMailSlot"),0,MAILSLOT_WAIT_FOREVER,NULL);if (hMailSlot == INVALID_HANDLE_VALUE) return 0;//读取邮槽while (TRUE){DWORD dwRead = 0;char szBuffer[0xFF] = { 0 };BOOL bRet = ReadFile(hMailSlot, szBuffer, sizeof(szBuffer), &dwRead, NULL);if (!bRet) break;std::cout << szBuffer << std::endl;}//清理资源CloseHandle(hMailSlot);return 0;
}
#include <iostream>
#include <Windows.h>int main()
{// 打开邮槽HANDLE hMailSlot = CreateFile(TEXT("\\\\.\\mailslot\\0xCCMailSlot"),GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hMailSlot == INVALID_HANDLE_VALUE) return 0;// 写入邮槽DWORD dwWrite = 0;char szBuffer[] = "Hello 0xCC";WriteFile(hMailSlot, szBuffer, sizeof(szBuffer), &dwWrite, NULL);//清理资源CloseHandle(hMailSlot);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理

JAVA数字化产科管理平台源码&#xff1a;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理 智慧产科管理系统是基于自主研发妇幼信息平台&#xff0c;为医院产科量身打造的信息管理系统&#xff0c;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全…

企商在线出席2024全球数字经济大会城市副中心论坛

2024年7月3日&#xff0c;2024全球数字经济大会城市副中心论坛“数字基础设施绿色创新发展分论坛”在北京市通州区成功举办。企商在线产品及解决方案总监孙杰受邀出席本次会议&#xff0c;并参与圆桌对话环节&#xff0c;分享“绿色”发展思路与经验。 2024全球数字经济大会城市…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#xff0c;而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

期权开户零门槛怎么操作?期权不满50w的开户方式

今天带你了解期权开户零门槛怎么操作&#xff1f;期权不满50w的开户方式。在股票期权市场上&#xff0c;期权交易是一种非常受欢迎的投资方式。它不仅可以增加投资组合的多样性&#xff0c;还可以为投资者提供一定的保护和利润机会&#xff0c;比如通过买入认股期权做空对冲大盘…

如何选择视频号矩阵系统:打造高效短视频内容生态的指南

在短视频内容创作和分发的热潮中&#xff0c;视频号矩阵系统作为一种高效的管理工具&#xff0c;受到了越来越多创作者和品牌的青睐。它通过集中管理多个视频号&#xff0c;优化内容发布流程&#xff0c;帮助用户提升工作效率和内容影响力。本文将探讨如何选择一个合适的视频号…

振弦采集仪的工程安全监测实践与案例分析

振弦采集仪的工程安全监测实践与案例分析 振弦采集仪是一种常用的工程安全监测仪器&#xff0c;通过测量被监测结构的振动频率与振型&#xff0c;可以实时监测结构的安全状况。本文将结合实践经验和案例分析&#xff0c;探讨振弦采集仪在工程安全监测中的应用。 一&#xff0c…

欢乐钓鱼大师游戏攻略:在什么地方掉称号鱼?云手机游戏辅助!

《欢乐钓鱼大师》是一款融合了休闲娱乐和策略挑战的钓鱼游戏。游戏中的各种鱼类不仅各具特色&#xff0c;而且钓鱼过程充满了挑战和乐趣。下面将为大家详细介绍如何在游戏中钓鱼&#xff0c;以及一些有效的钓鱼技巧&#xff0c;帮助你成为一个出色的钓鱼大师。 实用工具推荐 为…

io_contextttttttttttt

创建上下文——io_context_t 它是一个上下文结构&#xff0c;在内部它包含一个完成队列&#xff0c;在线程之间是可以共享的。 提交请求——iocb io回调数据结构&#xff0c;和io_submit配合使用。 处理结果 通过io_event处理结果&#xff0c; struct io_event {void *data…

【刷题汇总--Fibonacci数列、单词搜索、杨辉三角】

C日常刷题积累 今日刷题汇总 - day0041、Fibonacci数列1.1、题目1.2、思路1.3、程序实现 2、单词搜索2.1、题目2.2、思路2.3、程序实现 3、杨辉三角3.1、题目3.2、思路3.3、程序实现 - 蛮力法3.4、程序实现 - vector3.5、程序实现 - dp 4、题目链接 今日刷题汇总 - day004 1、…

【CUDA】 矩阵乘向量 matVecMul

Matrix - Vector Multiplication 矩阵-向量乘法是线性代数中的基本操作。它用于将一个矩阵与一个向量相乘。乘法的结果是与输入向量大小相同的向量。 矩阵和向量的乘法如图1所示。 图1 基础kernel与共享内存kernel 执行矩阵-向量乘法的基础kernel是使用单个线程执行输出向量…

【SOLID原则前端中的应用】开闭原则(Open/Closed Principle)- vue3示例

开闭原则&#xff08;Open/Closed Principle&#xff09;在Vue 3中的应用 开闭原则&#xff08;Open/Closed Principle&#xff0c;OCP&#xff09;规定&#xff0c;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。 也就是说&#xf…

大型网站软件系统架构演进过程

在我们的生活中,通常会使用大型网站系统,比如购物网站淘宝,京东,阿里1688;大型搜索引擎网站百度,社交类的如腾讯旗下的微信,QQ及新浪旗下的微博等,他们通常都有一下特点: 高并发、大流量&#xff1a;这些系统必须能够处理成千上万甚至数百万的并发用户请求&#xff0c;以及持续…

Dubbo内部通信流程

我当时在学习的过程中搭建过demo&#xff0c;具体流程就是&#xff0c;我先定义了一个api接口模块&#xff0c;还定义一个服务提供者模块&#xff0c;然后服务提供方实现该接口&#xff0c;定义该方法具体的实现impl类&#xff0c;服务提供方启动时&#xff0c;将要暴露的服务和…

在线快速制作二维码的技巧,支持生成多种内容二维码

现在用二维码来分享内容是很多场景下会使用的一种方式&#xff0c;常见的展示内容有图片、文件、文本、音频、视频等&#xff0c;都可以生成二维码之后。通过手机扫码来查看内容&#xff0c;有利于内容的快速传播&#xff0c;并且用户获取信息也更加的方便。 下面来教大家使用…

Web应用防火墙用在哪些场景?

WAF是Web Application Firewall的缩写&#xff0c;翻译为“Web应用防火墙”是一种网络安全设备或服务&#xff0c;用于保护Web应用程序免受各种网络攻击和漏洞的影响。 WAF特别设计用于识别和阻止特定于Web应用程序的攻击&#xff0c;例如SQL注入、跨站脚本(XSS)、跨站请求伪造…

力扣习题--哈沙德数

一、前言 本系列主要讲解和分析力扣习题&#xff0c;所以的习题均来自于力扣官网题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 二、哈沙德数 1. 哈沙德数 如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&…

CTF常用sql注入(二)报错注入(普通以及双查询)

0x05 报错注入 适用于页面无正常回显&#xff0c;但是有报错&#xff0c;那么就可以使用报错注入 基础函数 floor() 向下取整函数 返回小于或等于传入参数的最大整数。换句话说&#xff0c;它将数字向下取整到最接近的整数值。 示例&#xff1a; floor(3.7) 返回 3 floor(-2…

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发&#xff1a; 2.1在pom.xml中增加Lombok坐标&#xff1a; 2.2添加Book实体类 3.数据层开发&#xff1a; 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行&#xff1a; 4.数据层快速开发&#xff1a; 4.1配置MyB…

C++视觉开发 四.手势识别

本章记录传统手势识别&#xff0c;在表示0-5六个数值时的识别问题。例如识别剪刀石头布&#xff0c;手势&#xff0c;以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷&#xff0c;其个数作为识别的重要依据。 需要注意&#xff0c;在凸缺陷个数为0时&#xff0c;无法…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端&#xff0c;为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口&#xff0c;S272不仅支持多路数字量和模拟量输入&#xff0c;还具备灵活的扩展性和强大的控制功能&#xff0…