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