4.QT使用https协议通信
1. Qt6使用https协议在客户端发送一条文字消息到服务器端。之前的 HTTP 示例改成 HTTPS,这样客户端通过 TLS 加密发送一条文字消息到服务器端。 这里有几个关键点需要注意:
🔑 关键变化
Qt 客户端
使用 QNetworkAccessManager + QNetworkRequest,但 URL 必须是 https://
需要配置 QSslConfiguration(证书验证、加密套件等)
如果是自签名证书,需要在客户端信任它(开发阶段可以临时忽略验证)
服务器端
Qt 自带的 QTcpServer 不直接支持 HTTPS,需要用 QSslSocket 或 QTcpServer+QSslSocket 组合
必须加载服务器的私钥和证书(PEM 格式)
证书可以用 openssl 自签名生成
1️⃣ 生成自签名证书(开发测试用)
在终端执行:
1openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout server.key -out server.crt
然后合并成一个 .pem ...
3.QT使用http协议通信
1. Qt6使用http协议在客户端发送一条文字消息到服务器端。1.httpserver
main.cpp
12345678910#include <QCoreApplication>#include "httpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); HttpServer server; return a.exec();}
httpserver.h
1234567891011121314151617181920212223#ifndef HTTPSERVER_H#define HTTPSERVER_H#include <QObject>#include <QTcpServer>#include <QTcpSocket>class HttpServer : public QObject{ Q_OBJECTpublic: explicit HttpSer ...
1.QT使用udp通信
1. Qt6使用tcp协议建立连接后在客户端发送一条文字消息到服务器端而后断开连接。编写两个使用qt6框架开发的程序一个是服务端一个是客户端,Qt6使用tcp协议建立连接后在客户端发送一条文字消息到服务器端而后断开连接,无ui界面,按照qt风格分开声明与实现,参考qwiget模板但是没有ui。
实现一个最简单的 一次性连接:
客户端:启动后连接服务器 → 发送一条文字消息 → 断开连接
服务器:监听端口 → 接收连接 → 读取消息 → 打印到控制台
无 UI,但结构参考 Qt Widget 模板(main.cpp + 一个 QObject 派生类,分头文件和实现文件)
Qt6 + CMake,客户端和服务端是两个独立项目
1.tcpserver
main.cpp
12345678910#include <QCoreApplication>#include "tcpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); TcpServe ...
1.QT使用udp通信
1. Qt6使用udp协议在客户端发送一条文字消息到服务器端。编写两个使用qt6框架开发的程序一个是服务端一个是客户端,单独使用cmake管理项目,Qt6使用udp协议在客户端发送一条文字消息到服务器端,无ui界面,按照qt风格分开声明与实现。
1.udpserver
main.cpp
12345678910#include <QCoreApplication>#include "udpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); UdpServer server; return a.exec();}
udpserver.h
12345678910111213141516171819202122#ifndef UDPSERVER_H#define UDPSERVER_H#include <QObject>#include <QUdpSocket>#include <QHostAddr ...
windows驱动开发40.用户层与驱动层的其他通信方式
❓除了 IOCTL,还有没有其他通信机制?答案是:有,很多!但都有其应用场景,适合特定类型通信需求。
🧭 用户层与驱动通信的常见方式(按应用场景分类)
通信方式
说明
特点
是否支持异步
多功能支持
IOCTL(DeviceIoControl)
控制命令接口
通用、官方推荐
✅
✅ 多功能(用控制码区分)
ReadFile / WriteFile
流式通信
数据读写,适合输入/输出管道
✅
⚠️ 一般只一个方向,多功能难
IOCP + Read/Write
高性能异步 I/O
适合数据流、大量异步并发
✅
⚠️ 通常不细分功能,用 tag/结构区分
共享内存 + 信号量 / 事件
零拷贝高性能通信
非常快,适合频繁小数据交换
❌(需手动同步)
✅(共享内存结构定义)
命名管道(Named Pipe)
简单的双向通信
类似 socket,适合服务型驱动
✅
✅(靠结构/标识分功能)
Section 映射内存(ZwMapViewOfSection)
高速共享数据区
复杂内核同步,适合高级场 ...
windows驱动开发39.利用结构体实现一个控制码多个功能的驱动通信方式
利用结构体实现一个控制码多个功能的驱动通信方式✅ SharedProtocol.h(通信协议头)12345678910111213141516171819#pragma once#define MAX_PAYLOAD 512// IOCTL 定义#define IOCTL_EXCHANGE_MESSAGE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)// 消息类型typedef enum _MESSAGE_TYPE { MSG_TYPE_SEND = 1, MSG_TYPE_QUERY = 2} MESSAGE_TYPE;// 用户层传入结构体typedef struct _USER_REQUEST { MESSAGE_TYPE MsgType; ULONG PayloadSize; CHAR Payload[MAX_PAYLOAD];} USER_REQUEST, *PUSER_REQUEST;
✅ Common.h ...
windows驱动开发38.Linux驱动编写入口_模板_编译_加载
写一个linux驱动程序模板以下是一个Linux 内核模块(驱动)模板,适用于内核模块开发入门者,可用于字符设备、平台设备、网络驱动等的基础架构。
这个模板适用于 大多数类型的内核模块,并包括模块加载、卸载、打印日志等基础结构。
✅ Linux 驱动程序模板(C语言)1234567891011121314151617181920212223242526272829303132// my_driver.c#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#define DRIVER_AUTHOR "YourName"#define DRIVER_DESC "A simple Linux driver template"// 模块加载函数static int __init my_driver_init(void){ printk(KERN_INFO "my_driver: 模块加载\n&q ...
windows驱动开发37.怎么在Windows11中加载未签名的驱动
方法一:使用测试签名模式在windows中设置测试签名模式:
按下 Windows + X 键打开快捷菜单
选择”Windows PowerShell (管理员)”
在 PowerShell 中输入以下命令并回车:
1bcdedit /set testsigning on
重启电脑以使更改生效
方法二:禁用windows驱动签名
在启动windows操作系统时禁用驱动签名。
命令行关闭签名验证,重启后生效。
开启与关闭命令
1234#禁用您设备上的驱动程序签名bcdedit.exe / set nointegritychecks on#启用此功能,请运行以下命令bcdedit.exe / set nointegritychecks off
方法四:使用驱动漏洞关闭签名验证
下载kdu软件。
在kdu同目录下运行命令关闭签名验证(无需重启,立即生效)。
1kdu -dse 0
成功加载驱动后可选择重新打开签名验证。
1kdu -dse 6
方法五:在系统启动阶段加载内核工具可开关驱动签名验证EfiGuard
方法六:绕过驱动强制签名加载未签名驱动
编写驱动程 ...
windows驱动开发36.漏洞驱动提权
使用驱动漏洞提权
安装漏洞驱动RTCore64.sys
漏洞编号:CVE-2019-16098
编写C语言代码提权到system
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139#include <Windows.h>#include <cstdio>#include <Psapi.h>#define SymLinkName L"\\\\.\\RTCore64"stru ...
windows驱动开发35.驱动创建进程
调用未导出的函数NtCreateUserProcess创建进程123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118#include <ntifs.h>#include <wdm.h>#include <ntstrsafe.h>#include <minwindef.h>#define Log(X) DbgPrint("qi:"X##)// 手动声明必要的未公开结构typedef struct _RTL_USER_PROCESS_PARAMETERS { BYTE Rese ...
