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
 
通常,驱动程序从其 EvtDriverDeviceAdd 回调函数中调用 WdfDeviceInitSetRemoveLockOptions,就在调用 WdfDeviceCreate 之前。

驱动程序调用 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)

另请参阅

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT