很少有专题讲内核中的C++编程,中文资料恐怕更是罕见
由于C++的普及性、与C的亲密关系,以及大部分情况下程序员都使用C++编译器编译C程序的事实,当初学者听说内核中“不容易”(笔者也听说过“无法”二字)用C++进行编程时,会大吃一惊
不管是说者无意,还是听者有心,Windows内核的现状,决定了C语言是内核编程的首选
其实内核驱动中也能使用C++,也能使用类,但和用户程序中的用法有一些区别,一些特殊的地方需要特别注意
从笔者的经验来看,WDK给出的AVStream小端口驱动示例工程,就都是C++代码,这是由于AVStream的模块性非常强,在实现较大功能模块时,非得用类封装,否则难以表述清楚
本章专门讲述如何在内核中编写C++驱动程序
笔者先写一个简单的例子,显示类的一些基本特性,并由此交代出几项关键点;然后改造《WDFUSB设备驱动开发》一章中的WDFCY001驱动的例子,将它全部改造成一个驱动类,并最终实现C++的最大优点:多态
1一个简单的例子首先我们尝试把用户程序中最简单的类拷贝到内核中,编译链接,看看行不行
下面就是笔者定义的整数类,它封装一个整数,对象能够被当成整数使用
classclsInt{2
Public:3
clsInt(){m_nValue=0;}4
clsInt(intnValue){m_nValue=nValue;}5
voidprint(){KdPrint((“m_nValue:%d”,m_nValue));}6
operatorint(){returnm_nValue;}7
private:9
intm_nValue;10
};上例是一个非常简单的类定义,我们将在DriverEntry函数中使用它,分别定义一个局部变量和动态创建一个对象
我们通过Debug信息来观察对象行踪,希望能够得到正确的输出
入口函数中的定义如下:1