c++编写第一个驱动程序

安装驱动程序所必须的软件

https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
1、visual studio commutidy 2019。
2、安装Windows 11 SDK (22000.1)。必须单独安装,直到可通过 Visual Studio 使用为止。
3、安装 Windows 11 WDK。vs2019的插件,可识别KDMF项目模板。

开发第一个驱动程序示例

1、bilibili视频。https://www.bilibili.com/video/BV1Vq4y1j7Z7?from=search&seid=301529547347939722
2、创建KDMF empty项目,创建mydriver.c源文件
3、修改项目属性:平台=x64;c/c++下的警告等级=等级3(/W3)、将警告视为错误=否;Driver Settings下设置TargetOSVesrion(将来驱动程序运行在哪个平台下)、TargetPlatform=Desktop;Inf2Cat下的Run Inf2Cat=否;保存属性设置。
4、【生成-生成解决方案】:由于没有安装缓解库,需要进行项目属性设置:c/c++--代码生成,将Spectre Mitigation=disabled。
5、选择系统架构=x64(因为要在64位系统上运行),重新执行【生成-生成解决方案】
6、编写如下代码,按F7编译生成sys驱动文件

//v1
#include 
NTSTATUS DriverEntry(PDRIVER_OBJECT pobj, PUNICODE_STRING pstr) {
    return STATUS_SUCCESS;
}

//v2
#include 

void unload(PDRIVER_OBJECT pobj) {
    DbgPrint("driver is unloaded!");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pobj, PUNICODE_STRING pstr) {
    pobj->DriverUnload = unload;
    return STATUS_SUCCESS;
}

7、驱动打开后,就能在autoruns-drivers里看到它,同时在hklm\system\currentcontrolset\services中生成注册表项;卸载驱动后,删除hklm\system\currentcontrolset\services下的项,在autoruns-drivers不再显示。
8、驱动的流程:打开、运行、停止、卸载

【插曲1--蓝屏】最开始TargetOSVesrion设置成了windows 10;生成sys驱动文件后,去windows7(按F8选择禁用驱动程序签名强制模式)上运行,结果直接导致蓝屏了。
【插曲2--蓝屏】下面代码导致停止驱动时蓝屏

#include 

void unload(PDRIVER_OBJECT pobj) {
    DbgPrint("driver is unloaded! ");
}

void start(PDRIVER_OBJECT pobj, PUNICODE_STRING pstr) {
    DbgPrint("driver is started! ");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pobj, PUNICODE_STRING pstr) {
    
    pobj->DriverStart = start;
    pobj->DriverUnload = unload;

    return STATUS_SUCCESS;
}

你可能感兴趣的:(c++编写第一个驱动程序)