
【Windows编程】
文章平均质量分 65
Windows编程点滴记录
重庆李四
追求卓越,过完一生
展开
-
Linux或Windows下判断socket连接状态
场景:客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制,每隔一端时间发送心跳能回复说明服务器正常。实际应用场景中,服务端和客户端并不是一家厂商的,比如说笔者这种情况,服务端是其他厂商,应用层协议没有心跳机制,客户端显示的连接状态需要客户端自己处理。笔者最开始使用的QTcpSocket进行socket连接,在客户端程序监听下面3个信息。原创 2024-03-01 11:59:46 · 1668 阅读 · 0 评论 -
Windows编程—杀死指定路径程序文件的进程
由于Windows命令 taskkill 无法通过程序文件的完整路径匹配来杀死指定进程,通过程序名称容易误杀进程,所有笔者做了一个简单的封装做了个mytaskkill.exe,用来杀死指定路径的程序文件的进程。支持Windows xp 及以上版本,用法为:mytaskkill.exe “C:\xxx1.exe” “C:\xxx2.exe” “C:\xxx3.exe”原创 2021-12-17 19:52:03 · 2536 阅读 · 2 评论 -
Windows驱动—VS2010+WDK配置驱动开发环境
记录一下VS2010 + WDK 的配置过程。环境准备vs2010 安装包自行下载。WDK下载 。环境配置新建Win32项目添加测试代码#include <ntddk.h>// 提供一个Unload函数只是为了VOID DriverUnload(PDRIVER_OBJECT driver){ // 但是实际上我们什么都不做,只打印一句话: DbgPrint("Driver unload\r\n");}// DriverEntry,入口函数。相当于main。N原创 2021-08-27 20:56:30 · 1088 阅读 · 0 评论 -
Windows驱动—64位驱动测试&64位驱动测试签名
前言笔者在做windows 64位驱动开发的时候,同很多驱动初学者一样,发现 64位驱动不做数字签名在win7 64位上无法加载 即使将 关闭驱动强制签名 仍会 “Windows 无法验证此文件的数字签名。”的提示,这样的话我们开发者就无法进行驱动测试了!。由于在网上没找一篇满意的解决方案,故有此博文的诞生。这里笔者也是参考微软官方手册进行的操作,能达到 在windows vista 64位、win7 64位、win10 64位 进行64位驱动测试的效果。为啥关闭驱动强制签名失效了?从 Windows原创 2021-08-27 08:16:26 · 2428 阅读 · 1 评论 -
Windows编程—BroadcastSystemMessage函数详解
介绍BroadcastSystemMessa函数很强大,可以发送一个消息给指定一类接受者(从Broadcast就可以看出,广播的意思)。这里的接受者可以是,一般的应用程序、可装载的驱动程序、网络驱动程序、系统级的设备驱动程序 或者 上述的任意组合。函数原型long BroadcastSystemMessage( // 广播选项 DWORD flags, // in:指定接受这个消息的接受者类别;out: LPDWORD lpInfo, // 消息ID原创 2020-10-03 21:18:41 · 866 阅读 · 0 评论 -
Windows驱动—Windows应用程序和Windows驱动通信编程
文章目录介绍知识前奏内核方面编程设备对象和符号链接分发函数应用方面编程打开设备设备控制请求代码应用层代码内核层代码完整工程代码测试效果介绍Windows应用程序(Ring3层)和内核驱动(Ring0层)是运行在Windows权限的不同级别,简单来说各有优势。内核层权限较大 能做很多 应用程序办不到的事情 不直接面向程序使用的用户,Windows应用程序在Ring3层 直接面向用户,界面友好。当应用层办不到的时候就需要借助内核层了,所以 win32应用程序和Windows内核驱动通信是有必要的。Windo原创 2020-08-12 00:26:35 · 2175 阅读 · 0 评论 -
Windows编程—Windows驱动中定时器的使用
文章目录Windows编程—Windows驱动中定时器的使用前言代码简单版升级版程序效果Windows编程—Windows驱动中定时器的使用前言定时器操作是应用编程中非常常见的操作,同样的在Windows内核驱动编程中也有对应的API。在Windows应用编程中使用的是SetTimer进行定时器编程,在Windows驱动开发中也有对应的API。主要用的下面3个API。// 1.初始化定时器VOID KeInitializeTimer( // 指向要初始化的定时器,调用者分配空间原创 2020-07-25 22:58:57 · 1767 阅读 · 0 评论 -
Windows编程—Windows驱动开发环境搭建
文章目录前言步骤步骤一步骤二步骤三连接测试步骤四步骤五总结前言作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发对Windows程序开发人员却有极大的好处。一个直观的感受 程序操作权限更大了,因为处在内核层了嘛。应该可以写更厉害的外挂,普通Windows程序写个辅助完全是没问题的,但是涉及到数据修改突破游戏程序的一些限制 必须用更高权限的内核驱动了。开始学习Windows驱动开发,第一步当然是环境搭建了。因为笔者也在驱动环境搭建上也吃过原创 2020-07-02 09:38:48 · 2697 阅读 · 0 评论 -
Windows编程—向针式打印机直接发送内容或指令
文章目录前言代码前言笔者最近有需求要直接操作针式打印机也就是存折打印机。这种打印机一般用来套打或者打存折的。中文资料比较少,所以笔者去研究了下,顺便分享一下。下面是msdn上关于打印机相关的函数介绍 https://docs.microsoft.com/en-us/windows/win32/printdocs/printing-and-print-spooler-functions#printer-functions。笔者一开始的需求是 打印带格式的字符串,用CDC::TextOut的方式 ,该方原创 2020-06-12 10:37:05 · 2634 阅读 · 0 评论 -
MFC使用http post请求上传文件
文章目录前言代码前言笔者在Windows编程开发时候,有个上传文件的需求,服务端给的接口是http接口,和网页上面 表单上传文件一样(form-data方式)。当然我们拿到这需求,一想 用Windows原生的API去做 肯定麻烦一点 当然也能做,再一想 我们用支持http协议的框架不就行了嘛,MFC、libcurl、OpenSSL等等应该很多。笔者比较熟悉的2个库,MFC和libcurl,所以决定用这2个库来做文件上传。和大家一样,刚开始觉的很简单,网上搜下然后改下就OK。但是笔者却花费了些时间才完成原创 2020-05-30 23:53:29 · 2759 阅读 · 0 评论 -
Windows编程—获取操作系统默认浏览器路径
文章目录前言分析代码前言笔者有需求,需要获取当前的默认浏览器的路径。网上的其他方法笔者没有去试。这里笔者采用的方式在win10 下是可行的,win7、winXp 没有测试。笔者使用 QQ电脑管家—>工具箱—>上网—>浏览器保护 进行默认浏览器设置 是不成功的。所以还是到 Win10 设置—>默认应用—>Web浏览器 进行设置是可行。分析笔者这里那 QQ浏览器...原创 2020-04-05 16:25:11 · 3142 阅读 · 1 评论 -
Windows编程—获取Chrome浏览器的安装目录
文章目录前言方式一说明代码方式二说明代码前言在Windows平台开发时,有时候需要唤起Chrome浏览器访问指定url, 这时就需要知道Chrome浏览器的安装路径了。笔者这里总结了2种方式,建议使用方式二。方式一说明方式一,我们可以使用 Chrome浏览器 桌面图标的快捷方式找到Chrome的安装路径。博主这里是:C:\Users\Lisi\AppData\Local\Google\C...原创 2020-04-05 01:33:26 · 6744 阅读 · 0 评论 -
Windows编程—控制面板程序显示信息修改(程序图标、名称、链接等)
Windows编程—控制面板程序显示信息修改(程序图标、名称、链接等)介绍笔者之前用inno setup打包发现控制面板显示的程序 没有启动程序的图标信息,所以顺带研究了一下控制面板上程序信息的显示。新手看了应该有用。我们在 控制面板\程序\程序和功能 中看到的所有程序信息,都是Windows制定好的注册表格式标准下进行的,不依赖于某种打包语言或技术,只要在安装Windows软件的时候 能够...原创 2020-04-04 01:26:24 · 6320 阅读 · 5 评论 -
COM原理与应用(潘爱民)带目录书签下载
说明工作需要,准备学习COM相关知识。发现网上下载COM原理与应用(潘爱民)都是没有带目录书签的!!!所以笔者本着奉献自我的精神,花费了时间和体力将该书的目录整理出来,精确到3级目录!!!将做好的带目录的pdf书籍分享出来。 最后感谢感谢互联网,感谢潘爱民老师,能让大家免费学习到知识!下载地址 https://download.youkuaiyun.com/download/qq_29542611/1...原创 2020-03-02 22:22:45 · 1736 阅读 · 5 评论 -
C/C++:Windows编程—MFC基于CWnd自绘CListCtrl控件且带滚动条
文章目录前言效果图代码思路滚动条思路完整代码前言由于工作需要,需要自绘类似CListCtrl那种控件 而且每项能带类似按钮的点击事件。所以笔者去进行研究,费了点时间写了个简单的自绘窗口 顺带也研究了下滚动条。博主在网络搜索的时候经常遇到只有代码没有效果图,这样有意思吗,既然都写了 弄全一点不行吗。在这里也呼吁一下广大博友,写博客的时候都把效果图带上。我们也先看效果图。效果图代码思...原创 2020-02-16 00:42:25 · 1503 阅读 · 0 评论 -
C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(下)
Hook IE浏览器实现URL拦截及更改(下)前言接上一篇 C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上),本节为了实现上一篇待优化部分。实现IE进程时时监控,当有新的IE进程打开时注入我们的动态库。如何使用时时监控IE进程呢?笨方法就是 开一个线程 一直去遍历 IE进程 发现有新的IE进程就注入。这种方法有点low,笔者当然不想用,所以在网络上寻找,有说在驱动...原创 2020-01-12 12:13:36 · 2343 阅读 · 1 评论 -
C/C++:Windows编程—IAT Hook实例(程序启动拦截)
C/C++:Windows编程—IAT Hook实例(程序启动拦截)前言+思路本文默认读者有IAT Hook的相关的基础知识了哈,记录笔者在IAT Hook实战中遇到到问题以及解决思路。笔者想实现一个功能能够拦截到程序的启动。经过调研,大多程序如果是通过双击或者鼠标启动的 一般都是有 Windows资源管理器explorer.exe进程进行创建的。最近刚好学习了IAT Hook就用IAT H...原创 2020-01-08 23:31:47 · 3480 阅读 · 6 评论 -
C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(上)
Hook IE浏览器实现URL拦截及更改前言+思路笔者这里有个需求,针对IE浏览器 用户访问URL 做一个判断,是否为 限制访问的url,如果是 在另一个软件上给与警告提示。笔者在拿到这个需求的时候也是网上一顿找,在csdn上找到一篇 hook IE 总结。这篇文章给我一些思路,获取IE浏览器访问的URL 那么需要知道 IE浏览器访问URL 用的那种方式,从这文章提示使用 WININET.dl...原创 2019-12-29 18:33:08 · 5282 阅读 · 2 评论 -
C/C++:Windows编程—Inline Hook内联钩子(上)
前言先介绍下Windows中的Hook技术。Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。Windows中的Hook技术的方法较多,常见的有Inline Hook、IAT Hook、EAT Hook ...原创 2019-06-10 00:12:34 · 4695 阅读 · 0 评论 -
C/C++:Windows编程—Inline Hook内联钩子(下)
前言在上节中介绍了 InlineHook 钩子函数,主要是通过jmp 目标地址(转为机器码E9 偏移量) 来实现的,是修改被Hook函数首地址处的 5个字节的内容。这里再介绍另一种方法,修改被Hook函数首地址处的7字节的内容。我们看下图的汇编指令之前是jmp 目标地址(5字节),这次是将目标地址放到 eax寄存器中 这里是2条汇编指令(00B417E4-00B417DF = 7字节)。他们...原创 2019-06-10 00:17:26 · 1817 阅读 · 0 评论 -
Qt:Windows编程—DLL注入与卸载
前言这里说的DLL注入 是将我们指定的DLL注入到指定的进程中,DLL卸载也就是将指定进程中的DLL卸载下来。在Windows提供的API中有 CreateRemoteThread函数 见名知意 创建远程线程函数,这的远程指定的垮进程,让远程进程执行我们指定的线程回调函数。这就提供操作其他进程的契机。CreateRemoteThread 函数原型// 函数是不是和CreateThread非常...原创 2019-01-27 14:20:39 · 4732 阅读 · 8 评论 -
C/C++:Winsock网络编程—ping命令的简单实现
Winsock网络编程—ping命令的简单实现前言先声明 博主实现的是Windows平台的ping命令的简单实现,没有做域名解析,只能直接ping ip。我们要实现ping 肯定得先知道ping的实现原理,ping 发送的 ICMP报文。实际上的落脚点 就是对 ICMP协议和IP协议 结构的学习 以及 如何使用Winsock API 来实现ICMP报文的组包和解包。需要使用wireshark ...原创 2018-11-24 20:18:24 · 5194 阅读 · 3 评论 -
C/C++:Windows编程—代码实现IE保护模式的关闭和开启
前言最新项目有需求需要通过程序实现了IE保护模式的关闭,自己网上查了下,关于IE的很多设置都可以通过修改IE相关的注册表来实现的。这里我们只要熟悉注册表的操作就可以了。IE保护模式通过修改下面这个注册表项即可,[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]2500 ...原创 2019-06-01 23:47:11 · 938 阅读 · 0 评论 -
C/C++:Windows编程—Windows RPC 传递自定义数据类型、自定义数据类型数组、指针数组
前言该篇博文不是讲Windows rpc入门的。是笔者在实际使用Windows RPC时 所遇到的问题,以及解决方法。笔者有这样的需求,需要从RPC Server获取大量数据,而且该数据是动态分配的。故此RPC Client在调用RPC Server方法是 需要动态获取空间。笔者在中文社区没有找到相关资料,最后只有去看官方文档,下面几个链接是官方文档。https://docs.microso...原创 2019-03-28 22:46:21 · 2217 阅读 · 0 评论 -
Qt:Qt实现飞秋拦截助手—ARP攻击
Qt:Qt实现飞秋拦截助手—ARP攻击前言继续我们的飞秋拦截助手开发,上篇是Qt:Qt实现飞秋拦截助手—Mac地址扫描器 ,本篇将介绍 如何进行ARP攻击,也叫ARP欺骗。我们知道本机有个ARP缓存表 存储的是IP地址和物理地址的映射 IP_A -&gt; MAC_A 是一一对应的。我们这里还是拿 A、B、C 3台主机做比喻,A和B通信,C是攻击者。ARP攻击 就是,主机C 一直给 攻击目...原创 2018-12-07 15:19:30 · 2095 阅读 · 1 评论 -
Qt:Qt实现飞秋拦截助手—Mac地址扫描器
Qt实现飞秋拦截助手—Mac地址扫描器前言准备好了就开干,利用业余时间,开始着手写 飞秋拦截助手,按照Qt:Qt实现飞秋拦截助手—介绍 中的4步骤来走。4步骤中,Mac地址扫描器是第一步,因为网络传输中 最底层协议 就是网卡层,得到了局域网中的所有IP和对应的物理地址 才会有攻击的目标,拦截的对象。后面的ARP欺骗和飞秋消息拦截和飞秋欺骗会在这个基础上添加。效果什么都不说,先看看MAC地址...原创 2018-12-06 17:54:52 · 1625 阅读 · 0 评论 -
Qt:Qt实现飞秋拦截助手—介绍
Qt实现飞秋拦截助手—介绍前言以前看见有人在Linux下面实现过飞秋消息拦截、修改和转发功能,我呢 寻思在Windows平台使用Qt编写一个飞秋拦截工具,能够对飞秋消息进行拦截 修改 转发功能。当然别小瞧这个软件,软件虽小 五脏俱全。会用的Windows API ,WinPcap 库,ARP协议、IP 协议、UDP协议,字节对齐 等知识,用Qt编写当然大量会用到Qt的很多知识呗。我也是边查资...原创 2018-12-06 16:07:07 · 1012 阅读 · 1 评论 -
C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)
先看效果看代码使用 GetAdaptersInfo 函数获取网卡的所有信息。MSDN函数说明 https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getadaptersinfo#include <iostream>#include <vector>#include ...原创 2018-12-02 14:11:56 · 10415 阅读 · 3 评论 -
Qt:Qt实现Winsock网络编程—非阻塞模式下的简单远程控制的开发(WSAAsyncSelect)
Qt实现Winsock网络编程—非阻塞模式下的简单远程控制的开发(单线程)前言这边博客应该是 Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程) 的姐妹篇,上篇博客中的socket通信中所用的Windows api函数 都是阻塞函数,而一般图形界面编程中的UI进程一般不能阻塞,所以上篇博客 采用的是多线程,将接受连接请求 和 通信的socket处理都放在单独的后台线程中,这样就...原创 2018-11-18 20:30:00 · 2575 阅读 · 2 评论 -
Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)
Qt实现Winsock网络编程—Tcp服务端和Tcp客户端通信(多线程)前言感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多。博主用Qt实现的,当然不想用黑窗口呗,有界面可以看到,由于GUI编程的话 一般UI进程不能阻塞,肯定需要多线来实现,在等待用户连接的时候accept,和客户端通信 等待消息的时候recv这些都是阻塞的 都...原创 2018-11-06 21:31:46 · 14851 阅读 · 7 评论 -
Qt:Qt实现网页自动刷新工具
使用Qt实现网页刷新工具前言最近在看一本《C++黑客编程揭秘和防范》 ,刚开始学,感觉书还不错,有讲一些windows API,不过里面的工具都是使用VC++写的,界面部分使用的mfc的一些API,感觉太不友好来,笔者 想的是 界面部分当然应该可以用,当下桌面端最流行的 Qt 来写呀,windows api相关的可以直接 引入相关的头文件即可。说的容易,做的难,以前没学过windows ap...原创 2018-10-24 23:32:10 · 2345 阅读 · 0 评论 -
Qt:Qt使用鼠标模拟函数mouse_event和按键模拟函数keybd_even实现网页刷新功能
用Qt实现网页刷新功能前言在上一篇博客Qt:使用Qt实现网页自动刷新工具,使用了PostMassage函数 通过Windows的消息机制实现的网页刷新功能。因为消息种类太多,不方便使用和记忆,所以Windows下的大部分消息可以使用对应等价的API函数,不必直接通过消息进行沟通。这节我们使用mouse_event鼠标模拟函数和keybd_event键盘模拟函数继续来实现网页刷新功能。界面界...原创 2018-10-26 22:21:44 · 6071 阅读 · 5 评论 -
Qt:Windows编程—Qt实现本地服务管理
Qt实现本地服务管理前言本节将使用Windows的几个API,使用qt实现 本地服务 简单管理。这里简单介绍下服务。几乎每一种操作系统都有一种在系统启动时启动的进程机制,这种机制不会依赖于用户的交互。在Windows下,类似的基础称为Windows服务。服务是一种程序类型,它在后台运行,服务程序通常可以在本地和通过网络为用户提供一些功能,服务在操作系统启动时就会随之启动的程序。效果实现效...原创 2018-12-14 22:58:04 · 4781 阅读 · 1 评论 -
Qt:Windows编程—Qt实现注册表启动项管理
Qt实现注册表启动项管理前言Windows的开机启动项在很多地方都有设置,这次我们在注册表 子键"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" 这个位置也有 Windows的开机启动。这次我们用qt实现 开启启动项管理,有 启动项 添加、删除 功能。这里 简单说说 注册表相关的概念。注册表是Windows系...原创 2018-12-09 22:42:08 · 2050 阅读 · 0 评论 -
Qt:Windows编程—代码修改系统时间
前言使用window API很简单的实现一键修改系统时间,这里使用qt画个简单界面。主要是使用window API 函数 ,结构体SYSTEMTIME 填充设置的年月日时分秒。BOOL WINAPI SetLocalTime( _In_ const SYSTEMTIME *lpSystemTime);界面代码下面是一键修改系统时间主要代码void Widget::on_p...原创 2019-01-10 22:21:16 · 4760 阅读 · 0 评论 -
C/C++:Windows获取电脑机器指纹
介绍很多时候我们需要为一台Windows设备生成一个机器指纹来标识一台设备。当然标识设备最好的是与硬件相关的标识,应该硬件一般不会被改变。笔者参考了获取设备唯一标识这篇博客。笔者将使用下面几个字段进行机器指纹的生成。主板UUIDwmic csproduct get UUID唯一值,缺陷并不是所有的厂商都提供UUID(可以使用)CPUIDwmic cpu get processorid...原创 2019-03-07 21:58:46 · 7295 阅读 · 5 评论 -
C/C++:C语言小程序—批量重命名文件
介绍笔者有需求,需要将指定文件夹下的所有文件在原有名字的基础上进行重命名。 笔者查阅发现在windows API中有移动文件的API,将文件移动到当前文件就相当于重命名,故此可以使用该API。BOOL WINAPI MoveFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName);这是对指定路径的某个文件...原创 2019-03-04 23:03:49 · 2959 阅读 · 0 评论 -
MFC:移动对话框到右下角
代码在MFC中将dlg移动到右下角的代码如下:先通过SystemParametersInfo获取屏幕宽度,再获取当前对话框的长高,在使用MoveWindow就OK了// 移动到右下角void CMoveDlgTestDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码 RECT rectDesktop; SystemParameter...原创 2019-02-22 22:07:44 · 1210 阅读 · 1 评论 -
Qt:Windows编程—代码注入
前言 这里所说的代码注入和上篇的DLL注入有类似之处。DLL文件的注入与卸载在上篇中都完成了,整个注入与卸载的过程其实就是让远程线程执行一次LoadLibrary函数或者FreeLibrary函数。远程线程装载或者卸载一个DLL文件,通过dllMain()调用DLL中具体功能代码,这样注入DLL以后就可以让DLL做很多事情了。 是否可以不依赖DLL文件直接向目标进程写入要执行的代码,完成特...原创 2019-02-01 14:58:23 · 2590 阅读 · 4 评论 -
Qt:Windows编程—Qt实现进程管理
前言继续学window编程,学呀学呀 学无止境,学到Windows进程相关API了。利用相关的API使用Qt写界面实现了一个简单的进程管理。主要用到 进程的创建、进程的枚举、线程的枚举、DLL的枚举、进程提权等功能。相关API的介绍可以看 C/C++:Windows编程—创建进程、终止进程、枚举进程、枚举线程、枚举DLL界面先看看qt写的界面吧。代码创建进程// 创建进程void ...原创 2019-01-20 23:04:44 · 4699 阅读 · 0 评论