3.1.3 设备扩展(_DEVICE_EXTENSION)
设备对象记录的是设备的“通用”信息,而另外一些“特殊”的信息记录在设备扩展中,每个设备都会指定一个设备扩展。设备扩展是由程序员在驱动程序中自行定义的结构体,结构体的大小在调用IoCreateDevice函数时设置。设备扩展由I/O管理器创建,并保存在非分页内存中。
在驱动程序中应该尽量避免使用全局变量,因为全局变量会导致不同步的问题,解决办法之一就是可将全局变量存储在设备扩展中,将其作为一个局部变量来使用。
比如在WinPcap驱动程序中,设备扩展用于存储每个被绑定网络适配器的相关信息,此结构体的具体定义如下:
typedef struct_DEVICE_EXTENSION{
//适配器名称
NDIS_STRING AdapterName;
//设备导出的名称。只有通过该名称,WinPcap应用程序才能打开该适配器
PWSTR ExportString;
}DEVICE_EXTENSION,*PDEVICE_EXTENSION;