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 不支持控件对象。
 
通常,驱动程序从 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)
Wdf01000.sys(请参阅框架库版本控制。
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 DriverCreate(kmdf)

另请参阅

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT