WdfDeviceInitSetRemoveLockOptions-Funktion (wdfdevice.h)
[Gilt nur für KMDF]
Die WdfDeviceInitSetRemoveLockOptions-Methode bewirkt, dass das Framework eine Remove-Sperre erhält, bevor ein IRP eines beliebigen Typs an den Treiber gesendet wird.
Syntax
void WdfDeviceInitSetRemoveLockOptions(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_REMOVE_LOCK_OPTIONS Options
);
Parameter
[in] DeviceInit
Ein vom Aufrufer bereitgestellter Zeiger auf eine WDFDEVICE_INIT-Struktur .
[in] Options
Ein Zeiger auf eine WDF_REMOVE_LOCK_OPTIONS-Struktur .
Rückgabewert
Keine
Bemerkungen
Standardmäßig ruft das Framework eine Remove-Sperre ab, bevor irPs der folgenden Haupttypen an den Treiber übermittelt werden:
- IRP_MJ_PNP
- IRP_MJ_POWER
- IRP_MJ_SYSTEM_CONTROL
Wenn die IRP abgeschlossen ist, gibt das Framework die Remove-Sperre frei.
Ab KMDF 1.11 kann der Treiber optional WdfDeviceInitSetRemoveLockOptions aufrufen, damit das Framework eine Remove-Sperre erhält, bevor alle IRP-Typen bereitgestellt werden, nicht nur die oben aufgeführten.
Wenn Ihr Treiber über Clients im Kernelmodus verfügt, die nicht mit dem PnP-Zustand Ihres Geräts E/A senden, können Abstürze aufgrund von E/A-IRPs eintreffen, nachdem das Framework-Geräteobjekt entfernt wurde. In diesem Fall können Sie WdfDeviceInitSetRemoveLockOptions aufrufen. Wenn ein Client dann eine E/A-Anforderung an Ihr Gerät sendet:
- Wenn das Gerät noch nicht entfernt wurde, wird die Entfernungssperre erfolgreich abgerufen, und die Anforderung wird übermittelt. Wenn das Entfernen später erfolgt, ruft das Framework IoReleaseRemoveLockAndWait auf, das blockiert, bis alle erfolgreichen Sperreskäufe freigegeben sind (E/A-Anforderungen sind abgeschlossen).
- Wenn das Gerät bereits IRP_MN_REMOVE_DEVICE verarbeitet hat, aber ein hervorragender Verweis auf ein WDM-Geräteobjekt vorhanden ist, das verhindert, dass das Gerät freigegeben wird, wird die Entfernungssperre nicht abgerufen, und das Framework schließt die Anforderung sofort ab.
Nachdem ein Treiber WdfDeviceInitSetRemoveLockOptions aufgerufen hat, bleibt die Einstellung für die Lebensdauer des Framework-Geräteobjekts gültig.
Weitere Informationen zum Entfernen von Sperren finden Sie unter Verwenden von Sperren entfernen.
Beispiele
In diesem Codebeispiel wird eine WDF_REMOVE_LOCK_OPTIONS-Struktur initialisiert und WdfDeviceInitSetRemoveLockOptions aufgerufen.
WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;
WDF_REMOVE_LOCK_OPTIONS_INIT(
&RemoveLockOptions,
WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
);
WdfDeviceInitSetRemoveLockOptions(
DeviceInit,
&RemoveLockOptions
);
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.11 |
Kopfzeile | wdfdevice.h (einschließen von Wdf.h) |
Bibliothek | Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.) |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf) |