IRP_MJ_CREATE派遣例程里能获取的信息

本文解析了IRP_MJ_CREATE中ZwCreateFile调用的参数,并详细阐述了如何从IRP结构中获取创建文件时指定的各项选项,包括创建标志(CreateFlag)和期望访问权限(DesiredAccess)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在IRP_MJ_CREATE里面能够得到的调用ZwCreateFile传递的参数值,分析参数获取所需要过滤的文件信息.

    详细说明的请参考下面代码框内容:

 

 

 

    DeleteFile()产生的IRP_MJ_CREATE如下,一般判断DELETE位足够,不必担心FILE_ALL_ACCESS的干扰.

 

<think>好的,用户想了解IRP_MJ_CREATE在Windows Driver Framework中的定义和作用。首先,我需要回忆一下WDF中的IRP处理机制。在WDM驱动中,IRP_MJ_CREATE通常用于处理文件对象的创建请求,比如当应用程序调用CreateFile时,系统会生成这个IRP。但在WDF中,框架对IRP处理进行了封装,可能通过I/O队列和事件回调来管理。 根据提供的引用内容,特别是引用[3],用户提到了KMDF驱动中如何设置EvtIoRead、EvtIoWrite等回调函数。类似地,IRP_MJ_CREATE应该对应某个特定的事件回调函数,可能在队列配置时设置。例如,在WDF_IO_QUEUE_CONFIG结构体中,可能有EvtIoCreate这样的成员来处理创建请求。 另外,引用[2]中提到驱动需要创建和打开I/O target,这可能与文件对象的创建有关联。当应用程序尝试打开设备时,IRP_MJ_CREATE会被发送到驱动,驱动可能需要通过WdfIoTargetOpen来关联目标设备或文件,确保后续的I/O操作能够正确路由。 还需要确认IRP_MJ_CREATE的具体作用,它主要用于设备或文件的打开请求,驱动需要处理这个请求以允许后续的读写或控制操作。在WDF中,框架可能已经封装了默认的处理方式,但驱动开发者仍可以通过注册回调函数来自定义处理逻辑。 总结一下,IRP_MJ_CREATE对应创建请求的处理,在WDF中通过配置队列的回调函数(如EvtIoCreate)来实现,确保驱动能够响应应用程序的打开设备请求,并进行必要的初始化和资源分配。</think>### IRP_MJ_CREATE 的定义及作用 **IRP_MJ_CREATE** 是 Windows 驱动框架(WDF)中用于处理文件或设备对象创建请求的主功能码。当用户态应用程序调用 `CreateFile` 或类似 API 尝试打开设备时,系统会生成此类型的 I/O 请求包(IRP),并将其发送到驱动程序的相应处理函数[^3]。 #### 核心作用: 1. **设备/文件对象初始化** 当应用程序首次与设备交互时,IRP_MJ_CREATE 用于初始化设备上下文、分配资源(如内存缓冲区)或验证访问权限。例如,驱动可能需要检查调用方的权限是否满足设备操作要求[^2]。 2. **建立通信通道** 该请求为后续的读写(如 IRP_MJ_READ/WRITE)或控制(IRP_MJ_DEVICE_CONTROL)操作建立通道。如果未正确处理此请求,后续的 I/O 操作将无法执行。 3. **关联 I/O Target** 在 KMDF 驱动中,可通过 `WdfIoTargetOpen` 关联到具体的设备栈或文件对象,确保后续操作能正确路由到目标设备。例如: ```c WDF_IO_TARGET_OPEN_PARAMS params; WDF_IO_TARGET_OPEN_PARAMS_INIT_OPEN_BY_NAME(&params, &deviceName, ...); WdfIoTargetOpen(hIoTarget, &params); ``` 此代码初始化一个 I/O Target 并关联到指定设备,为后续操作提供基础[^2]。 #### WDF 中的实现方式: 在 KMDF 驱动中,IRP_MJ_CREATE 通常通过 **I/O 队列配置** 进行响应。驱动需在初始化队列时注册回调函数 `EvtIoCreate`,例如: ```c WDF_IO_QUEUE_CONFIG queueConfig; WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&queueConfig, WdfIoQueueDispatchParallel); queueConfig.EvtIoCreate = MyEvtIoCreate; // 自定义处理函数 WdfIoQueueCreate(device, &queueConfig, ..., &queue); ``` 当收到创建请求时,框架会调用 `MyEvtIoCreate`,驱动可在其中执行初始化逻辑或返回错误码(如访问被拒绝)[^3]。 --- ### § 相关问题 § 1. IRP_MJ_CREATE 未正确处理会导致什么问题? 2. 如何在 WDF 驱动中限制设备的并发访问? 3. IRP_MJ_CLEANUP 与 IRP_MJ_CLOSE 的区别是什么? --- **引用说明** [^1]: 关于 WDF_IO_QUEUE_CONFIG 结构体的初始化与默认队列配置。 : KMDF 中 I/O Target 的创建与关联方法。 : IRP_MJ_READ 等请求在 KMDF 中的回调实现示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值