驱动中设备扩展的使用

驱动的设备对象中有一个字段是设备扩展
该设备扩展的大小是不固定的,依据在创建设备对象时给定的大小分配内存
例如:

typedef struct _DEVICE_EXTENSION {
	ULONG number;
	PDEVICE_OBJECT pDevice;
	UNICODE_STRING ustrDeviceName;	//设备名称
	UNICODE_STRING ustrSymLinkName;	//符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//创建设备对象
status = IoCreateDevice(	pDriver,	//驱动对象的指针
							sizeof(DEVICE_EXTENSION),	//为扩展设备分配的字节数,扩展设备是自己定义的数据结构,可以当做全局变量使用
							&DeviceName,			//该设备的名字,通过设备名来区分不同的设备
							FILE_DEVICE_UNKNOWN,	//设备的类型
							FILE_DEVICE_SECURE_OPEN,	//大多数的驱动设备设置为此值
							FALSE,	//设备对象是否独占设备,大多数情况设置为FALSE  不独占
							&pDeviceObj			//返回来的设备对象指针
							);
				(PDEVICE_EXTENSION)pDeviceObj->	ustrDeviceName=xxx;	
				(PDEVICE_EXTENSION)pDeviceObj->	ustrSymLinkName=xxx;							

这样在设备对象中就有一个大小为DEVICE_EXTENSION结构大小的内存可以使用。扩展设备中的数据是可以当成全局变量使用的,当然在驱动中的全局变量的使用也应该尽量使用此方式。

//自定义扩展设备结构体
typedef struct _DEVICE_EXTENSION {
	ULONG number;
	PDEVICE_OBJECT pDevice;
	UNICODE_STRING ustrDeviceName;	//设备名称
	UNICODE_STRING ustrSymLinkName;	//符号链接名
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

NTSTATUS IrpCreateProc(PDEVICE_OBJECT pDeviceObject/*设备信息*/, PIRP pIrp/*参数信息*/)
{
	//当成全局一样的使用。
	DbgPrint("number=%x \n", ((PDEVICE_EXTENSION)pDeviceObject->DeviceExtension)->number);
}


NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING reg_path)
{
		status = IoCreateDevice(	pDriver,	//驱动对象的指针
							sizeof(DEVICE_EXTENSION),	//为扩展设备分配的字节数,扩展设备是自己定义的数据结构,里面的字段可以当做全局变量使用
							&DeviceName,			//该设备的名字,通过设备名来区分不同的设备
							FILE_DEVICE_UNKNOWN,	//设备的类型
							FILE_DEVICE_SECURE_OPEN,	//大多数的驱动设备设置为此值
							FALSE,	//设备对象是否独占设备,大多数情况设置为FALSE  不独占
							&pDeviceObj			//返回来的设备对象指针
							);
		//设备创建后 给扩展结构中的number字段赋值
		pDevExt->number = 100;
	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值