共用方式為


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
                                  );

規格需求

需求
目標平台 Universal
最低 KMDF 版本 1.11
標頭 wdfdevice.h (包含 Wdf.h)
程式庫 Wdf01000.sys (請參閱 Framework Library Versioning.)
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 DriverCreate (kmdf)

另請參閱

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT