// wdfdevice.h
VOID WdfDeviceInitSetRemoveLockOptions(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_REMOVE_LOCK_OPTIONS Options
);
View the official Windows Driver Kit DDI referenceNo description available.
[Applies to KMDF only]
The WdfDeviceInitSetRemoveLockOptions method causes the framework to acquire a remove lock before delivering an IRP of any type to the driver.
DeviceInit [in]A caller-supplied pointer to a WDFDEVICE_INIT structure.
Options [in]A pointer to a WDF_REMOVE_LOCK_OPTIONS structure.
By default, the framework acquires a remove lock before it delivers IRPs of the following major types to the driver:
When the IRP completes, the framework releases the remove lock.
Starting in KMDF 1.11, the driver can optionally call WdfDeviceInitSetRemoveLockOptions to cause the framework to acquire a remove lock before delivering all IRP types, not just those listed above.
If your driver has kernel-mode clients that send I/O unsynchronized with the PnP state of your device, you may experience crashes due to I/O IRPs arriving after the framework device object has been removed. In this case, you can call WdfDeviceInitSetRemoveLockOptions. Then, when a client sends an I/O request to your device:
Note WdfDeviceInitSetRemoveLockOptions is not supported on control objects.
Typically, a driver calls WdfDeviceInitSetRemoveLockOptions from within its EvtDriverDeviceAdd callback function, just before calling WdfDeviceCreate.
After a driver calls WdfDeviceInitSetRemoveLockOptions, the setting remains in effect for the lifetime of the framework device object.
For more information about remove locks, see Using Remove Locks.
This code example initializes a WDF_REMOVE_LOCK_OPTIONS structure and calls WdfDeviceInitSetRemoveLockOptions.
WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;
WDF_REMOVE_LOCK_OPTIONS_INIT(
&RemoveLockOptions,
WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
);
WdfDeviceInitSetRemoveLockOptions(
DeviceInit,
&RemoveLockOptions
);