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 类型(而不仅仅是上面列出的类型)之前获取删除锁。
如果驱动程序的内核模式客户端发送的 I/O 与设备的 PnP 状态不同步,则可能会在删除框架设备对象后由于 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) |
Library | Wdf01000.sys (请参阅框架库 Versioning.) |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) |