
Windows编程(C++)
文章平均质量分 95
从零开始入门windows编程
攻城狮7号
(广交天下好友)个人主要从事多年c/c++研发,同时熟悉其他开发语言,涉猎跨平台客户端和底层开发,以及前后端开发(合作加V:linshantang)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【第53节】Windows编程必学之使用C++写exe压缩加密壳
壳是软件保护领域里的高端技术,自打出现,就一直处在安全对抗的最前线。这些年不断发展,加密壳的类型越来越多,可不管怎么变,它的核心思路始终是对PE文件做些变形处理,让软件不那么容易被分析和破解。在我的信息安全专栏中,我们试过一步步脱掉一些常见的壳,相信大家对壳已经有了比较清楚的认识。不熟悉的同学请自行关注学习我的前面的文章和信息安全专栏的文章。而在这个项目里,我们要打造一个加壳软件的框架。原创 2025-05-07 00:47:35 · 5423 阅读 · 198 评论 -
【第52节】Windows编程必学之从零手写C++调试器下篇(仿ollydbg)
本文介绍的调试器通过Windows API和C/C++语言实现了完整的调试功能链,从基础的进程控制到高级的反反调试和插件机制,覆盖了开发者在调试过程中的核心需求。其设计思路和实现方法不仅适用于Windows平台,也为其他操作系统的调试工具开发提供了参考。这个调试器项目主要收获:1. Windows调试器的核心实现原理,包括断点机制、进程控制和内存操作2. 反调试对抗技术,如PEB结构修改和API Hook的实现3. 良好的软件架构设计,展示了如何构建可扩展的模块化系统。原创 2025-04-23 11:15:19 · 10865 阅读 · 223 评论 -
【第51节】Windows编程必学之从零手写C++调试器中篇(仿ollydbg)
调试器的核心功能模块包括:1. 调试事件循环:通过调用 `WaitForDebugEvent` 函数持续获取调试事件,并将事件分发到对应的处理函数进行逻辑处理。2. 断点系统:支持多种断点类型的实现及断点的增删查,包括软件断点、硬件断点、内存断点和单步断点等,用于控制程序执行流程。3. 调试信息获取:能够读取寄存器、内存堆栈、反汇编代码,并解析调试符号等信息。4. 用户交互:接收用户输入的调试命令(如单步执行、设置断点),并向用户输出调试信息(如寄存器值、内存数据)。原创 2025-04-22 00:32:10 · 967 阅读 · 41 评论 -
【第50节】Windows编程必学之从零手写C++调试器上篇(仿ollydbg)
Windows系统把处理异常的函数地址存放在IDT(中断描述表)里,当CPU产生内部中断时,就会调用IDT中对应的函数,Windows从而接管异常处理。比如,在访问未加载到内存中的页面时(P=0),异常处理程序可以分配内存并恢复状态,使得CPU能够回到故障指令之前的状态,从而重新执行该指令。(1)陷阱标志(TF,也就是标志寄存器EFLAGS的第1位):要是TF的值为1,CPU每执行完一条指令就会主动触发异常(也就是单步中断),这个机制可用于实现调试器的“单步步入”功能。原创 2025-04-21 00:15:09 · 1025 阅读 · 28 评论 -
【第49节】windows平台下反汇编和汇编引擎的使用实践
本文介绍了四种常用的汇编语言开发工具:XEDParse用于将汇编指令转换为机器码(opcode),BeaEngine提供强大的反汇编功能,Capstone是一款高效的反汇编引擎,而Keystone则专注于将汇编代码转换为机器码。通过具体的代码示例,展示了每个工具的使用方法,包括初始化引擎、处理指令、输出结果等关键步骤。这些工具在编译器开发、逆向工程、代码优化和底层系统编程中发挥着重要作用,帮助开发者深入理解计算机底层原理,提高开发效率。原创 2025-04-20 00:38:43 · 895 阅读 · 36 评论 -
【第48节】探究汇编使用特性:从基础到混合编程
函数返回时使用“ret 8”指令,这里的8表示参数占用的字节数,自动清理堆栈,减轻了调用者的负担,提高了代码的执行效率。汇编语言的这些特性为我们提供了丰富的编程手段,无论是优化性能、深入底层开发,还是进行混合编程,都能帮助我们更好地完成各种复杂的任务,在不同的编程场景中发挥出独特的价值,值得开发者们深入学习和探索。通过这样的方式,我们实现了C++与汇编语言的混合编程,充分发挥了两种语言的优势,既利用了汇编语言的高效性和对硬件的直接控制能力,又结合了C++的高级特性和便捷的编程方式。原创 2025-04-19 00:06:36 · 1368 阅读 · 115 评论 -
【第47节】windows程序的其他反调试手段下篇
要动态绑定(运行时)线程特定数据,可以通过 `TLS API`(像 `TlsAlloc`、`TlsGetValue`、`TlsSetValue` 和 `TlsFree` 这些)来实现。完成这样的设置后,`OllyDbg` 会在执行 `TLS` 回调的 `ntdll!其中,`Dr0 - Dr3` 最多能存储 4 个断点的地址,`Dr6` 是一个标志位,它的作用是表明哪个断点被触发了,`Dr7` 里包含了控制这 4 个硬件断点的标志,比如可以启用、禁用断点,或者让断点在进行读/写操作时中断。原创 2025-04-18 00:16:30 · 1154 阅读 · 11 评论 -
【第46节】windows程序的其他反调试手段中篇
在程序反调试领域,存在多种检测调试器的手段。接下来将介绍其他反调试手段中篇,诸如SetUnhandledExceptionFilter/Debugger Interrupts、Trap Flag单步标志异常等一系列其他反调试方法,这些方法通过不同的原理来识别程序是否正被调试,为程序的安全防护提供多维度保障 ,给新手学习带来灵感。原创 2025-04-17 16:46:39 · 759 阅读 · 6 评论 -
【第45节】windows程序的其他反调试手段上篇
1. 调用函数间接读取:可以调用`IsDebuggerPresent`函数,该函数会间接地读取`BeingDebugged`字段的值,以此判断进程是否被调试。2. 直接地址读取:也能通过获取的地址,直接去读取`BeingDebugged`字段,进而判断进程的调试状态。原创 2025-04-16 00:11:42 · 878 阅读 · 18 评论 -
【第44节】windows程序的反调试与反反调试
反反调试是与反调试相对的概念,是针对软件中反调试技术所采取的应对措施,目的是绕过或破解软件里的反调试机制,从而顺利地对软件进行调试和逆向分析。反调试与反反调试对比- 反调试:是软件开发者为了保护软件的代码逻辑、知识产权、防止软件被破解、篡改或逆向分析而采用的一系列技术手段。例如检测调试器的存在、修改程序运行环境以干扰调试过程等。- 反反调试:则是逆向分析人员为了突破这些反调试手段,继续对软件进行深入分析而采取的技术和方法。常见反反调试方法。原创 2025-04-15 00:06:13 · 1132 阅读 · 2 评论 -
【第43节】实验分析windows异常分发原理
在Windows操作系统的复杂运行机制中,异常处理是保障系统稳定和程序正常执行的关键环节。当程序运行出现诸如内存访问错误、除零操作等异常情况时,系统如何有条不紊地进行处理,将直接影响到用户体验和系统的可靠性。深入探究Windows异常分发原理,不仅有助于开发者更好地理解程序运行时的异常行为,还能帮助他们编写出更健壮、更稳定的代码。接下来,我们将通过具体的实验分析,揭开Windows异常分发原理的神秘面纱,深入了解系统在面对异常时的处理流程和机制,开始实验前需要自己配置好双机调试环境。原创 2025-04-14 17:16:56 · 775 阅读 · 6 评论 -
【第42节】windows双机调试环境搭建和SEH原理剖析
大家都清楚,程序一旦产生异常,这个异常首先会被发送到内核层。而Windows系统所提供的异常处理机制,它肯定是在内核层把异常发出来以后,才会开始发挥作用去处理异常。Windows系统特别厉害,仅仅借助`_try`、`_except`这些关键字,就能够成功接管异常。而且在处理异常的过程中,程序还能正常运行,即便跳转来跳转去处理各种情况,也不会出现崩溃的状况。那这到底是怎么做到的呢?要弄明白这个问题,我们得从分析TEB和异常链入手。对于线程来说,在内核层有一个专门的数据结构,叫做ETHREAD;原创 2025-04-14 10:50:49 · 1122 阅读 · 7 评论 -
【第41节】windows的中断与异常及异常处理方式
异常机制的作用就是让计算机能把程序运行时出现的错误处理得更好。从编程的角度来讲,它能把错误处理和程序原本的逻辑分开,这样开发者就能专心去开发程序的关键功能,还能统一管理程序可能出现的各种异常情况。Windows系统提供了好几种异常处理机制,主要有下面这几种:- SEH - 结构化异常处理- VEH - 向量化异常处理- VCH - 向量化异常处理。原创 2025-04-13 00:19:02 · 948 阅读 · 18 评论 -
【第40节】windows编程:仿造MFC版本QQ安全卫士
接下来我们来实现一个MFC版本QQ安全卫士的仿造品,我们需要掌握的前置知识点如下:(1)熟悉windows原理,学会windowsAPI解析PE文件(2)熟悉windows的权限管理和hook注入的相关知识(3)理解MFC界面编程和python网络编程(4)python结合mysql开发还不会的同学请关注本专栏,尽快学习前面的章节知识点,下面开始介绍本项目。原创 2025-04-10 12:15:05 · 1693 阅读 · 10 评论 -
【第39节】windows编程:打造MFC版本任务管理器
在软件开发领域,构建一个带界面且功能丰富的项目往往充满挑战。本次项目不仅要应对多样化的数据展示需求,涵盖文件、进程、线程等多源信息,还需处理各类用户交互操作。接下来,让我们一同深入探索这个项目的关键要点,包括复杂数据的获取方法、界面展示的考量,以及如关机操作、老板键设置等特色功能的实现途径 ,为项目开发提供全面且清晰的指引,并提供实现demo。本次开发基础除了MFC相关知识要求,还要熟悉windows sdk开发知识点,不会的请看前面的章节。下面简单介绍该项目要点,界面不在此讲述细节实现。原创 2025-04-09 12:03:39 · 1501 阅读 · 37 评论 -
【第38节】windows原理:DLL注入与Hook是什么
Hook 技术,中文叫钩子技术,本质上是在程序运行过程中,拦截特定事件或函数调用,改变其执行路径,插入自定义代码,来实现特定功能的一种编程技术。Hook在程序设计中是一种灵活多变的技术手段,它主要用于改变程序原有的执行流程,让程序执行开发者自己定义的代码。在Windows系统下,Hook有两种含义,一是系统提供的消息Hook机制,由一系列API提供服务,通过这些API可以对大多数应用程序的关键节点进行Hook操作,Windows会为每种Hook类型维护一个钩子链表;原创 2025-04-05 07:49:09 · 1139 阅读 · 1 评论 -
【第37节】windows原理:PE文件的延迟载入表和导入地址表
延迟加载的DLL属于隐含链接的DLL,它的加载机制很特别。一般来说,程序运行到某个阶段,代码里要是引用了这种DLL包含的特定符号,像函数名或者变量名,系统才会开始加载这个DLL。这种延迟加载和直接用`LoadLibrary`、`GetProcAddress`函数达到的效果差不多。拿大型图形处理软件来说,软件启动的时候要加载好多DLL,才能实现各种复杂功能。要是采用延迟加载机制,软件启动时就只加载核心模块。等用户进行特定图形编辑操作,触发对特定DLL符号的引用时,相关DLL才会被加载。原创 2025-04-04 07:04:08 · 808 阅读 · 3 评论 -
【第36节】windows原理:权限管理和内存管理
遇到这种情况,我们可以用HeapCreate函数创建一个独立的内存堆,等使用完之后,直接用HeapDestroy函数,就能把这个内存堆里的所有内存都释放掉。而这个进程创建的线程,默认和进程的权限相同。VirtualAllocEx、ReadProcessMemory与WriteProcessMemory三个函数,可实现跨进程的内存分配、读取、写入等操作,是很多安全技术的基础函数,后续学习远程线程注入时,会详细讲解这些函数的用法。所以,在自己的进程里,是访问不了其他进程内存的,尽管不同进程的地址看上去很像。原创 2025-03-31 14:32:46 · 1822 阅读 · 2 评论 -
【第35节】windows原理:PE文件-资源表、重定位表及TLS表
(1)PE文件的资源区段用来存放图片、菜单、图标这类界面元素。(2)PE文件里的资源不仅种类多,而且每种资源下面又有好多项目。(3)资源解析比较复杂,它有三层结构。每一层开头都是IMAGE_RESOURCE_DIRECTORY结构,后面跟着多个IMAGE_RESOURCE_DIRECTORY_ENTRY结构。也就是说,每一层都由一个IMAGE_RESOURCE_DIRECTORY结构和一个IMAGE_RESOURCE_DIRECTORY_ENTRY结构体数组构成。原创 2025-03-31 11:18:49 · 1215 阅读 · 0 评论 -
【第34节】windows原理:PE文件的导出表和导入表
(1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这种行为就叫导出。导出表专门用来存放这些导出项目的信息。当一个PE文件要调用其他PE文件里的导出函数(变量、类)时,依靠导出表就能迅速找到它们在文件里的位置。一般来说,这些被导出的函数、变量、类,也叫做符号(Symbol)。(2)导出项序号的特点:每一个被导出的函数(变量、类),都有一个独一无二的序号。原创 2025-03-30 00:06:13 · 913 阅读 · 0 评论 -
【第33节】windows原理:初探PE文件
PE文件是有特定格式的文件,像后缀名是EXE的可执行文件、后缀名是DLL的动态链接库文件、sys格式的驱动文件,这些都属于PE格式文件。PE文件主要分成头和主体两部分,这两部分里面还会再细分。文件头是由几个结构体组成的,包含了文件的一些描述信息;文件主体由多个段构成,里面有文件的可执行代码、执行时要用的数据,还有资源(像Windows程序里的图标、一些界面等)。一般来说,不用于执行的就是数据,用于执行的就是代码,所以主体大概能分成代码和数据两部分,实际上按照不同作用,还能再细分成多个部分。原创 2025-03-29 17:14:25 · 1075 阅读 · 141 评论 -
【第32节】MFC编程:框架-插件-其他控件简介
MFC把很多类的共同特点提取出来,设计出一些基类,这些基类是用来构建其他类的。其中,CObject和CCmdTarget这两个类最重要。CObject是MFC的根类,大部分MFC类都是从它派生出来的,CCmdTarget也在其中。CObject实现了动态类信息、动态创建、对象序列化、程序调试支持等重要功能,所有从CObject派生的类都有或者可以有这些功能。CCmdTarget通过封装一些属性和方法,提供了消息处理的框架。在MFC里,任何能处理消息的类都是从CCmdTarget派生的。原创 2025-03-28 10:06:14 · 1027 阅读 · 4 评论 -
【第31节】MFC编程:GDI与控件绘制
此外,函数还得返回一个画刷句柄,这个画刷会在控件绘制之前,用来填充控件的客户区。随着复杂控件出现,引入了WM_NOTIFY消息,新的自绘方法也跟着出现了,这里面要处理NM_CUSTOMDRAW消息。每次绘制或擦除正在绘制的图像时,重新按顺序绘制之前的图形。这个NM_CUSTOMDRAW消息会发给父窗口,不过MFC有消息反射机制,能让消息在控件类里处理,这种绘制方式也叫“自定义绘制”。对CMyListCtrl类进行封装,能实现设置每行颜色的功能,但暂时不封装设置每列的功能,不过代码里会提到获取列的方法。原创 2025-03-28 00:14:47 · 1024 阅读 · 0 评论 -
【第30节】MFC编程:ListCtrl控件和TreeCtrl控件
CImageList` 是 MFC(Microsoft Foundation Classes)中的一个类,用于管理相同大小的图像集合,通常用于为其他控件(如列表控件、树控件、标签控件等)提供图标资源。- `nFlags`:指定图像列表的类型,如 `ILC_COLOR4`(16色)、`ILC_COLOR8`(256色)、`ILC_COLOR32`(真彩色)等。这个项目主要用于演示 MFC 中常用控件的使用方法和基本功能,包括列表控件、树形控件、Shell控件等。原创 2025-03-27 09:12:55 · 1245 阅读 · 3 评论 -
【第29节】MFC编程:Tab控件与工具状态栏菜单
在复杂的应用程序里,选项卡是很常见的控件。它就像一个“功能分类器”,能将程序功能清晰地划分开来。从编程层面来说,选项卡类似于对话框的“收纳盒”,每一个选项卡页面实际上都是一个子对话框。MFC提供了CTabCtrl选项卡类,借助这个类,我们可以便捷地管理和操作多个对话框类,对于这些对话框上的控件,也能进行轻松控制。Windows控件运行时,会持续向父窗口发送消息。过去,所有这些消息都在父窗口内进行处理。MFC引入了消息反射机制,当父窗口接收到子控件发来的消息后,会将消息回传给子控件,让子控件自己处理。原创 2025-03-27 00:05:36 · 863 阅读 · 0 评论 -
【第28节】MFC编程:资源脚本和变参函数
2. 参数的获取:在变参函数中获取变参需要用到va_list 、va_start() 、va_arg() 、va_end()。va_start()用于初始化,va_arg()用于获取参数,va_end()用于结束获取参数,它们都需要配合va_list使用。要是你想查看资源脚本,操作很简单,在.rc文件上右键单击,然后从弹出来的菜单里,选择查看选项就能搞定。在资源脚本中,我们能够调整位图资源等的路径,还可以精确地调整各个控件的位置以及对话框的大小,甚至能够直接编辑资源脚本来添加资源。原创 2025-03-26 13:59:52 · 829 阅读 · 2 评论 -
【第27节】MFC编程:基础控件介绍使用
Radio控件的分组办法是这样的:把第一个Radio控件的Group属性设置成True,在它后面那些Group属性为False的Radio控件,就都和它属于同一组,一直到碰到下一个Group属性是True的Radio控件为止。下面,我们就来详细讲讲MFC基础控件的编程,包括控件特点、操作函数、通知消息,还有不同控件在实际中怎么用,帮大家掌握MFC界面开发的关键。(3)控件产生的通知消息:同样依据控件特性,搞明白这个控件会给它的父窗口发送什么样的通知消息,方便我们利用这些消息。原创 2025-03-26 00:10:45 · 1000 阅读 · 1 评论 -
【第26节】MFC编程:对话框程序基础
类向导在实现可视化编程的过程中特别重要,它有好多用处,具体如下:(1)能帮我们添加MFC类。(2)可以给窗口添加消息映射宏,还能生成对应的消息处理函数。(3)能为窗口添加子控件相关的消息。(4)能给窗口添加虚函数的重写功能。(5)能完成窗口中控件变量的绑定操作。原创 2025-03-25 15:01:40 · 1043 阅读 · 2 评论 -
【第25节】MFC编程:MFC入门的第一课
MFC 即 Microsoft Foundation Classes,是微软公司提供的一个类库。它以 C++ 类的形式封装了 Windows API,并且包含了大量的代码来简化 Windows 应用程序的开发过程。借助 MFC,开发人员能够更便捷地创建具有图形用户界面(GUI)的 Windows 应用程序,减少了直接使用 Windows API 进行编程的复杂性和工作量。学习 MFC,C++ 面向对象编程和 Windows SDK 是必备基础。当下,MFC 在客户端界面开发中热度减退。原创 2025-03-25 12:01:27 · 2115 阅读 · 0 评论 -
【第24节】windows网络编程模型(完成端口模型)
之前讲的那些网络编程模型里,我们把“阻塞通信”和多线程搭配起来,想要解决同步模式中存在的阻碍情况。可这办法不是十全十美的。因为每来一个客户端连接,就得创建一个线程,然后在这个工作线程里处理这个客户端的各种操作。要是线程数量变得特别多,CPU就得花好多资源来来回回切换线程上下文,这样一来,CPU就没多少时间去执行工作线程里真正要做的任务了。完成端口模型就是为了解决线程上下文切换带来的这些坏处而出现的。它把内核对象的调度机制利用得很充分,只用少量线程(一般是CPU个数的2倍),就能处理和所有客户端的通信。原创 2025-03-24 11:57:35 · 1052 阅读 · 3 评论 -
【第23节】windows网络编程模型(WSAEventSelect模型)
Windows Sockets异步事件选择模型,也就是WSAEventSelect模型,属于另一种异步I/O模型。利用这个模型,应用程序能够在单个或多个套接字上,基于事件接收网络方面的通知。WSAEventSelect模型和WSAAsyncSelect模型有所不同,主要区别就在于应用程序接收网络事件通知的方式。WSAEventSelect模型通过事件来告诉应用程序网络事件发生了,而WSAAsyncSelect模型是依靠消息来通知。但从根本上来说,在应用程序接收网络事件通知这件事上,这两个模型都是被动的。原创 2025-03-24 10:51:35 · 827 阅读 · 0 评论 -
【第22节】windows网络编程模型(WSAAsyncSelect模型)
Windows 套接字异步选择模型,要是想在应用程序里用上WSAAsyncSelect模型,第一步就是用CreateWindow函数创建一个窗口,紧接着得给这个窗口配备一个窗口回调函数(WinProc)。除了创建窗口,使用对话框也是可行的,这种情况下就得给对话框配上对话框回调函数。WinSock给出了一个特别好用的异步I/O模型。依靠这个模型,应用程序可以在某个套接字上,接收那些基于Windows消息的网络事件通知。原创 2025-03-23 00:01:34 · 1051 阅读 · 7 评论 -
【第21节】windows sdk编程:网络编程基础
套接字(Socket)最初是由加利福尼亚大学Berkeley分校专门为UNIX操作系统搞出来的网络通信接口。时间回到20世纪80年代初,这所学校把美国国防部高研署提供的TCP/IP整合进了Unix系统里,紧接着,很快就开发出了TCP/IP应用程序接口(API),这个接口其实就是Socket(套接字)接口。后来,UNIX操作系统用的人越来越多,套接字也跟着火了起来,成了现在最常用的网络通信应用程序接口之一。原创 2025-03-22 00:39:35 · 898 阅读 · 3 评论 -
【第20节】windows sdk编程:线程池技术
新的线程池函数跟旧的比起来,多了不少能控制的地方。就拿线程数量来说,现在可以设置线程池里线程的最大数量,也能设置最小数量,这在旧版里可做不到。在等待对象激发的线程池方面,新旧版本也有差别。旧线程池只要提交一次,一旦等待对象变成激发态,回调函数马上就会被调用。但新线程池是提交一次,回调函数才调用一次。这么一来,程序员对线程池的控制就更灵活了,能根据实际需求更好地安排线程池的工作。线程池在实际使用的时候,得看具体情况。原创 2025-03-22 00:37:58 · 778 阅读 · 0 评论 -
【第19节】windows sdk编程:文件I/O
1. 三个程序都实现了异步IO操作,都使用了Windows的异步IO机制2. 都使用了相同的`MYOVERLAPPED`结构体来管理异步IO操作3. 都实现了从文件读取数据的功能4. 都使用了`FILE_FLAG_OVERLAPPED`标志来创建可等待的文件句柄5. 都实现了多段数据的并发读取1. 异步过程调用(APC)方式:- 使用`ReadFileEx`函数而不是`ReadFile`- 通过回调函数`FileIOCompletionRoutine`处理完成通知。原创 2025-03-21 10:38:29 · 1098 阅读 · 2 评论 -
【第18节】windows sdk编程:线程同步的实现
临界区是依靠`EnterCriticalSection`和`LeaveCriticalSection`这两个函数,来创建出一个代码保护区的。这两个函数起到的作用是,在存在多个这样的保护区时,同一时间只会有一个保护区里的代码在运行,也就是说,这些保护区的代码执行是相互排斥的,不能同时进行。所以呢,只要把不同线程访问共享资源的那些代码,都放到这个保护区里面,那么不管在哪个代码区对共享资源进行操作,都不用害怕其他线程的操作会干扰到这次操作的最终结果。原创 2025-03-21 01:01:19 · 692 阅读 · 0 评论 -
【第17节】windows sdk编程:线程与线程调度
(1)每个线程都有一个优先级数值,范围从0(最低)到31(最高)。(2)当一个线程把分配给它的时间片用完了,系统就得决定接下来给哪个线程分配时间片。这时,系统会从优先级最高的线程开始,依次往低优先级查看,优先让高优先级的线程得到执行机会。(3)要是有个低优先级的线程正在运行,可恰好有高优先级的线程已经准备好要执行了,那系统就会马上中断低优先级线程,转而给高优先级线程分配时间片,让高优先级线程运行起来。比如说,只要系统里存在优先级为31的线程,那系统就不会去执行那些优先级在0到30之间的线程。原创 2025-03-20 12:21:32 · 820 阅读 · 1 评论 -
【第16节】windows sdk编程:进程间通讯方式
进程间通信(IPC)是操作系统中的重要概念,不同的通信方式适用于不同的场景。`WM_COPYDATA` 适用于窗口应用程序之间的简单数据传输,邮槽适用于单向通信,管道适用于父子进程或任意进程之间的通信,共享内存适用于高效的数据共享,而套接字则适用于网络通信。选择合适的 IPC 方式可以大大提高程序的效率和灵活性。原创 2025-03-20 11:41:38 · 1011 阅读 · 0 评论 -
【第15节】windows sdk编程:进程基础讲解
进程是操作系统中的运行实体,负责资源分配和任务调度,拥有独立的内存空间;模块是程序内部的代码和资源组织单位,如 `.exe` 或 `.dll` 文件在内存中的实例。进程是动态的,模块是静态的,模块依赖进程存在,一个进程可以包含多个模块。两者分别代表操作系统和程序的不同管理层次。当我们了解了进程、线程、模块的概念后,遍历进程信息、线程信息就只是如何使用 API 的问题了。3.2 快照方式遍历进程和模块。原创 2025-03-19 16:09:33 · 767 阅读 · 0 评论 -
【第14节】windows sdk编程:进程与线程介绍
方法1在屏幕底部的任务栏上右击鼠标,从弹出的快捷菜单中选择“任务管理器”,随后任务管理器窗口将会打开,您便可以在其中浏览当前运行的进程。方法2点击开始菜单,在搜索栏中输入“cmd”并打开命令提示符,然后在命令提示符中输入“tasklist”命令来查看当前运行的进程。方法3在命令提示符中,首先键入“wmic”并按下回车,接着输入“process”来查看进程信息。原创 2025-03-19 14:05:46 · 860 阅读 · 0 评论