C++开发方向之windows驱动开发

article/2025/10/12 23:36:30

1.为什么要写这篇文章?

最近浏览招聘网站看到关于windows驱动开发的岗位,前几天一个C++客户端工作岗位,猎头也问我是否有了解windows内核。

所以,调研了一下C++的开发方向:windows驱动开发。

先来看看招聘网上,关于windows驱动开发的岗位要求:

1.深圳的C++客户端高级岗

2.四川成都的windows驱动开发岗

2.如何学习windows驱动开发

windows驱动开发学习路径主要分三个阶段:

第一阶段:C/C++语言

第二阶段:windows程序实现机制

第三个阶段:windows内核

windows驱动编程学习路径
    内核驱动编程定义
        按照系统的API和框架去做代码
        驱动程序提供更接近于底层的功能
        在某些情况下对程序的框架更加有利于效率
    基本学习路线
        C/C++语言
            算法
                框架机制&windows程序设计
                    系统内核实现
    前提:不断去写代码,调试代码
        看了书叫你做,做不出来就是没学懂
    第一阶段:C/C++语言
        《C++ Primer》
            《深入探索C++对象模型》
        c语言
        计算机基础课程
    第二阶段:熟悉windows程序实现机制
        《windows程序设计》
            《windows核心编程》
                《Windows2000Secrets》
        《深入浅出MFC》/《VC技术内幕》
        《WINDOWS驱动开发详解》
    第三阶段:内核相关
        谭文《windows内核安全编程》
        谭文《从汇编语言到windows内核编程》
        《rootkit》
        《WINDWOS内核的安全防护主题》 

windows内核学习内容进阶
    1.内核驱动入门
        1.1驱动级hello world
        1.2驱动框架理解
    2.内核开发基础
        2.1驱动级文件与注册表操作
        2.2中断运行级别
        2.3同步与多线程
        2.4内核数据结构
        2.5应用程序与驱动通信与弹窗
    3.内核高级技术
        3.1DKOM
        3.2HOOK/DKOH
        3.3回调(进程、线程、模块、注册表等)
        3.4文件系统(sfilter/minifilter)
        3.5网络驱动(tdi/ndis/wfp)
        3.6PE文件结构/汇编与逆向(ida/ollydbg)
    4.内核编程综合应用
        4.1主防(HIPS)
        4.2沙盘(sandbox)
        4.3防火墙(TDI/NDIS/WFP)
        4.4ARK/基于MBR和BIOS的bookkit技术分析与查杀
        4.5程序逆/向病毒分析 


 

3.学习windows驱动开发有前途吗?

薪资还是不错的,门槛比较高,方向有点窄,相比互联网方向要低点,也可以进入互联网行业

windows驱动开发前途
    驱动开发涉及行业
        过滤驱动
            内网安全
                透明加解密,虚拟磁盘,外设控制
            网吧安全
                主要实现无盘还原、其他业务
            互联网安全
                用过滤驱动实现主防、沙盒等
            云共享、虚拟网卡、多用户操作
            游戏反外挂
        设备驱动
            主要集中在芯片厂商、器件厂商
    职业发展
        圈子比较小,职业发展比较窄
        学习曲线比较陡,调试驱动需要极大耐心和毅力,对底层知识要求大
    薪资
        初期薪资略高
        后期学习成本越来越高,薪资上升空间小
        很多人停留在中级
        薪资比不上互联网公司同级别职位 

c++开发有哪些开发方向,每个方向该如何学习,学习什么内容学习难度如何,选择哪个方向?想了解更多C++开发文章,欢迎关注公众号:“疯狂的极致主义”。

参考文献:

https://www.zhihu.com/question/23827302


http://chatgpt.dhexx.cn/article/QpEJ3CaR.shtml

相关文章

Linux驱动开发|UART驱动

UART驱动 串口是一个常用的外设,在 Linux 下通常通过串口和其他设备或传感器进行通信,根据电平的不同,串口分为 TTL 和 RS232。虽然接口电平不同,但其驱动程序都是一样的,通过外接 RS485芯片就可以将串口转换为 RS485…

Linux驱动开发|WiFi驱动

WiFi驱动 一、WiFi驱动添加与编译 I.MX6U-ALPHA 开发板目前支持两种接口的 WIFI:USB 和 SDIO,其中 USB WIFI 使用的芯片为 RTL8188EUS 或 RTL8188CUS, SDIO 接口的 WIFI 使用的芯片为 RTL8189FS。这两个都是 realtek 公司出品的 WIFI 芯片。…

驱动开发:配置Visual Studio驱动开发环境

在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.exe安装包,Visual Studio的安装非常的简单,您…

DDD领域驱动开发

文章目录 DDD(Domain Driving Design)领域驱动开发1、微服务设计为什么选择DDD1、架构对比2、微服务的问题3、战略设计(业务层面-业务架构)4、战术设计(技术层面-系统架构):5、DDD和微服务 2、领…

Linux驱动开发|USB驱动

USB驱动 USB接口很复杂,不同的设备器协议也不同,因此本文仅介绍如何使能Linux内核自带的USB驱动,不涉及USB驱动开发 一、USB接口简介 1.1 USB介绍 USB(Universal Serial Bus),即通用串行总线。由英特尔…

window10+vs2022配置window驱动开发环境

测试模式 开发的驱动程序没有官方数字签名,只能在测试模式下加载。 命令行键入以下命令,重启电脑后桌面右下角出现测试模式字样,说明进入了测试模式 bcdedit /set testsigning on 命令行键入以下命令,重启电脑后桌面右下角没有了测…

win10驱动开发——驱动签名

win1803开始直接禁用驱动强制签名的方式不行了 1.设置环境 bcdedit -set NOINTEGRITYCHECKS ON bcdedit -set TESTSIGNING ON bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS2.配置环境变量 找到makecert.exe文件位置如【C:\Program Files (x86)\Windows Kits\10\bin\1…

Windows 10 驱动开发 及 驱动签名

记录下在公司开发驱动的一些注意事项, 驱动当前仅针对win10x64. 常识: 最早的驱动开发sdk是 ntddk, 类似于用户层的win32 api, 后面为了增加对pnp(Plug-and-Play, 即插即用)的支持, 迭代为 wdm. 后面因为wdm开发过于繁琐, 微软发布了 WDF 框架, 类似于 用户层的 …

Linux——驱动开发

一、驱动开发概述 1.1 驱动形式 驱动代码的形式一般可分为build-in和module两种形式,build-in是在编译linux同时将pcie的驱动代码编译到内核中,启动的时候就载入该驱动代码;module是在linux启动完成后通过终端输入命令insmod/remod进行载入…

Windows 驱动开发 新手入门(一)

Windows 驱动开发 新手入门(一) 引言驱动介绍Win10 WDK 建立一个驱动项目建立MyDriver.cpp理论知识驱动入口派遣函数 MajorFunctionDevice和SymbolicLinkDeviceExtensionIRP 引言 首先祝朋友们新年快乐,然后呢,因为无聊&#xff…

驱动开发学习

驱动 1、驱动开发环境 完成系统移植的三步:u-boot启动引导程序、内核镜像、文件系统,u-boot启动引导程序最好固化到开发板上,内核镜像通过tftp服务从ubuntu下载,文件系统通过nfs服务从ubuntu共享到开发板,开发板启动…

Linux设备驱动开发详解

Linux设备驱动开发详解 Linux设备驱动开发详解Linux设备驱动开发Linux设备驱动开发详解1. linux设备驱动概述及开发环境搭建2. 驱动设计的硬件基础3. linux内核及内核编程4. linux内核模块5. linux文件系统与设备文件6. 字符设备驱动7. linux设备驱动中的并发控制8. linux设备驱…

QT部件基类——QWidget与QDialog

一、默认基类 QT提供的默认部件基类包括QMainWindow、QWidget、和QDialog这三种,这三个部件基类也是用的最多的。 QWidget类是所有部件对象的基类,被称为基础窗口部件,继承关系详看QWidget类关系图。QWidget提供自我绘制和处理用户输入等基本…

qt 中 qwidget 嵌入 qml

以上是效果图&#xff0c; 整个窗口是 qml 窗口 核心代码 #ifndef WIDGETANCHOR_H #define WIDGETANCHOR_H#include <QObject> #include <QQuickItem> #include <QWidget> #include <QQmlApplicationEngine> #include <QQmlContext>class WgtAn…

QWidget尺寸限定

1、控件只能在最小和最大之间进行调整&#xff0c;不能超过范围。 ①直接宽高同时设置 window.setMinimumSize(200, 200)&#xff1b; window.setMaximumSize(500, 500) app QApplication(sys.argv)window QWidget()window.setWindowTitle("最小最大窗口")windo…

QWidget居中显示

须知 以下函数只要继承QWidget都可以使用.例如 QDialog, QPushButton( -v- 一个居中的”引爆按钮”)关于坐标问题: qt窗口坐标原点是在”左上角”的. 如图, (x2, y2)是我窗口的分辨率的一半无论目前我的窗口在什么位置,我只要把窗口原点设置为(x1, y1)就行了.所以目前我要获得…

QWidget事件消息

1、用户操作界面时会产生特定的事件消息。 API&#xff1a;显示和关闭事件、移动事件、调整大小、鼠标事件、键盘事件、焦点事件、拖拽事件、绘制事件、改变事件、右键菜单、输入法。 应用场景&#xff1a;当一个控件被触发了一个特定的行为时&#xff0c;就会调用特定的方法…

QWidget的isHidden和isVisible

文章目录 问题的出现QWidget的show()函数QWidget的isVisible和isHidden源码追溯 QWidget的isHidden和isVisible 问题的出现 最近在写代码的时候&#xff0c;出现了一个问题&#xff0c;我新建了两个类&#xff0c;分别是Chapter2和ConsecutiveCurtain // ConsecutiveCurta…

QWidget鼠标操作

1、设置鼠标形状&#xff1a;鼠标放置在不同控件上&#xff08;有不同功能时&#xff09;鼠标的形状是不一样的。 鼠标跟踪&#xff1a;鼠标在某一个控件上移动&#xff0c;则会向对应的控件对象发送一个消息&#xff0c;去调用具体的某一个方法&#xff0c;可以在方法里面监听…

QWidget旋转方法

参考链接&#xff1a;https://stackoverflow.com/questions/43388464/rotate-whole-qwidget-by-angle 说明&#xff1a; 本文实现方法本质是使用QGraphics三件套&#xff0c;即View、Scene、Item&#xff0c;将QWidget控件作为Item显示&#xff0c;从而实现角度控制的目的&…