windows驱动开发40.用户层与驱动层的其他通信方式
❓除了 IOCTL,还有没有其他通信机制?答案是:有,很多!但都有其应用场景,适合特定类型通信需求。
🧭 用户层与驱动通信的常见方式(按应用场景分类)
通信方式
说明
特点
是否支持异步
多功能支持
IOCTL(DeviceIoControl)
控制命令接口
通用、官方推荐
✅
✅ 多功能(用控制码区分)
ReadFile / WriteFile
流式通信
数据读写,适合输入/输出管道
✅
⚠️ 一般只一个方向,多功能难
IOCP + Read/Write
高性能异步 I/O
适合数据流、大量异步并发
✅
⚠️ 通常不细分功能,用 tag/结构区分
共享内存 + 信号量 / 事件
零拷贝高性能通信
非常快,适合频繁小数据交换
❌(需手动同步)
✅(共享内存结构定义)
命名管道(Named Pipe)
简单的双向通信
类似 socket,适合服务型驱动
✅
✅(靠结构/标识分功能)
Section 映射内存(ZwMapViewOfSection)
高速共享数据区
复杂内核同步,适合高级场 ...
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 ...
windows驱动开发34.kmdf驱动框架最小模板
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include <ntddk.h>#include <wdf.h>DRIVER_INITIALIZE DriverEntry;EVT_WDF_DRIVER_UNLOAD MyEvtDriverUnload; // 卸载函数(KMDF 风格)EVT_WDF_DRIVER_DEVICE_ADD MyEvtDeviceAdd; // 必须定义,但可以不创建设备// 驱动卸载回调VOID MyEvtDriverUnload(_In_ WDFDRIVER Driver){ UNREFERENCED_PARAMETER(Driver); KdPrint(("qi: KMDF Driver Unload!\n"));}// 添加设备回调(必须提供,即使什么都不做)NTSTATUS MyEvtDeviceAdd( _In_ W ...
windows驱动开发33.C++编写驱动程序
C++编写驱动程序1234567891011121314151617181920#include <ntddk.h>// 宏定义改为 C++ 风格#define Log(x) DbgPrint("qi:" x)// DriverUnload 必须使用 extern "C"extern "C"void UnloadDriver(PDRIVER_OBJECT DriverObject){ Log("Unloaded Successfully!\n");}// DriverEntry 也必须使用 extern "C"extern "C"NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath){ DriverObject->DriverUnload = UnloadDriver; Log("Loade ...
windows驱动开发32.dump进程与进程模块
用户模式下dump进程内存dump完整进程内存12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <windows.h>#include <dbghelp.h>#include <stdio.h>#pragma comment(lib, "dbghelp.lib")BOOL CreateMiniDump(DWORD dwPID, const char* szDumpFilePath){ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID); if (hProcess == NULL) { printf("无法打开进程 %d,错误码:%d\n", dwPID, GetLastE ...
windows驱动开发31.隐藏进程,通过Hook SSDT表中的NtQuerySystemInformation函数隐藏进程信息
隐藏进程,通过Hook SSDT表中的NtQuerySystemInformation函数隐藏进程信息123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162#include <ntifs.h>#include "C:\D\test\CC++\cc++lib\driver\de ...
windows驱动开发30.保护进程,通过Hook SSDT表中的NtOpenProcess函数来保护进程不被读写
Hook SSDT表中的NtOpenProcess函数123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120#include <ntifs.h>#include "C:\D\test\CC++\cc++lib\driver\def.h"VOID GetSSDT0(PVOID* addr);BOOLEAN HookSSDT_On(PVOID newfunc, PVOID hkfunc, PVOID* oldbase, PULONG oldoffset);VOID HookSSDT_Off(PVOID oldbase ...
