8.2.2 应用设备扩展

定义一个结构作为设备扩展

typedef struct _C2P_DEV_EXT
{
        //结构的大小
        ULONG NodeSize;
        //过滤设备对象
        PDEVICE_OBJECT pFilterDeviceObject;
        //同时调用时候的保护锁
        KSPIN_LOCK IoRequestsSpinLock;
        //进程间同步处理
        KEVENT IoInProcessEvent;
        //绑定的设备对象
        PDRIVER_OBJECT TargetDeviceObject;
        //绑定前底层的设备对象
        PDEVICE_OBJECT LowerDeviceObject;
}C2P_DEV_EXT,*PC2P_DEV_EXT;

生成带有设备扩展info的object,调用 IoCreateDevice时候,注意second 参数填入扩展的长度

status = IoCreateDevice(
        IN DriverObject,
        IN sizeof(C2P_DEV_EXT),
        IN NULL,
        IN pTargetDeviceObject->DeviceType,
        IN pTargetDeviceObject->Characteristics,
        IN FALSE,
        OUT &pFilterDeviceObject
        );

sizeof(C2P_DEV_EXT)这个参数在设备生成之后需要填写这个域

// 设备扩展,详细描述设备扩展的应用

devExt = (PC2P_DEV_EXT)(pFilterDeviceObject->DeviceExtension);
c2pDevExtInit(
        devExt,
        pFilterDeviceObject,
        pTargetDeviceObject,
        pLowerDeviceObject
);

//关于如何填写这个域都放在c2pDevExtInit函数中,代码如下

NTSTATUS
c2pDevExtInit(
IN P2CP_DEV_EXT devExt,
IN PDEVICE_OBJECT pFilterDeviceObject,
IN PDEVICE_OBJECT pTargetDeviceObject,
IN PDEVICE_OBJECT pLowerDeviceObject
)
{
memset(devExt,0,sizeof(C2P_DEV_EXT));
devExt->NodeSize = sizeof(C2P_DEV_EXT);
devExt->pFilterDeviceObject = pFilterDeviceObject;
KeInitializeSpinLock(&(devExt->IoRequestsSpinLock));
KeInitializeEvent(&(devExt->IoInProcessEvent),NotificationEvent,FALSE);
devExt->TargetDeviceObject = pTargetDeviceObject;
devExt->LowerDeviceObject = pLowerDeviceObject;
return( STATUS_SUCCESS );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值