WdfDeviceInitSetRemoveLockOptions 函数 (wdfdevice.h)
[仅适用于 KMDF]
WdfDeviceInitSetRemoveLockOptions 方法会导致框架在向驱动程序传送任何类型的 IRP 之前获取删除锁。
语法
void WdfDeviceInitSetRemoveLockOptions(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_REMOVE_LOCK_OPTIONS Options
);
参数
[in] DeviceInit
调用方提供的指向 WDFDEVICE_INIT 结构的指针。
[in] Options
指向 WDF_REMOVE_LOCK_OPTIONS 结构的指针。
返回值
没有
言论
默认情况下,框架在将以下主要类型的 IRP 传递到驱动程序之前获取删除锁:
- IRP_MJ_PNP
- IRP_MJ_POWER
- IRP_MJ_SYSTEM_CONTROL
IRP 完成后,框架会释放删除锁。
从 KMDF 1.11 开始,驱动程序可以选择调用 WdfDeviceInitSetRemoveLockOptions,在传送所有 IRP 类型之前,框架才能获取删除锁,而不仅仅是上面列出的锁。
如果驱动程序的内核模式客户端使用设备的 PnP 状态发送 I/O 未同步,则由于 I/O IRP 在删除框架设备对象后到达时可能会遇到崩溃。 在这种情况下,可以调用 WdfDeviceInitSetRemoveLockOptions。 然后,当客户端向设备发送 I/O 请求时:
- 如果设备尚未删除,则会成功获取删除锁,并传递请求。 如果稍后删除,框架将调用 IoReleaseRemoveLockAndWait,直到释放所有成功的锁获取(I/O 请求完成)。
- 如果设备已处理IRP_MN_REMOVE_DEVICE,但 WDM 设备对象存在无法释放设备的未完成引用,则不会获取删除锁,并且框架会立即完成请求。
注释WdfDeviceInitSetRemoveLockOptions 不支持控件对象。
驱动程序调用 WdfDeviceInitSetRemoveLockOptions后,该设置在框架设备对象的生存期内仍然有效。
有关删除锁的详细信息,请参阅 使用删除锁。
例子
此代码示例初始化 WDF_REMOVE_LOCK_OPTIONS 结构并调用 WdfDeviceInitSetRemoveLockOptions。
WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;
WDF_REMOVE_LOCK_OPTIONS_INIT(
&RemoveLockOptions,
WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
);
WdfDeviceInitSetRemoveLockOptions(
DeviceInit,
&RemoveLockOptions
);
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
最低 KMDF 版本 | 1.11 |
标头 | wdfdevice.h (包括 Wdf.h) |
库 | Wdf01000.sys(请参阅框架库版本控制。 |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate(kmdf) |