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 bereitgestellt 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
Nichts
Bemerkungen
Standardmäßig erhält das Framework eine Entfernungssperre, bevor irPs der folgenden Haupttypen an den Treiber übermittelt werden:
- IRP_MJ_PNP
- IRP_MJ_POWER
- IRP_MJ_SYSTEM_CONTROL
Nach Abschluss des IRP 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 Kernelmodusclients verfügt, die E/A ohne Synchronisierung mit dem PnP-Zustand Ihres Geräts senden, können Abstürze aufgrund von E/A-IRPs auftreten, die nach dem Entfernen des Framework-Geräteobjekts eintreffen. In diesem Fall können Sie WdfDeviceInitSetRemoveLockOptionsaufrufen. 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 übermittelt. Wenn die Entfernung später erfolgt, ruft das Framework IoReleaseRemoveLockAndWait auf, die blockiert werden, bis alle erfolgreichen Sperreskäufe freigegeben werden (E/A-Anforderungen werden abgeschlossen).
- Wenn das Gerät bereits IRP_MN_REMOVE_DEVICE verarbeitet hat, aber es einen ausstehenden Verweis auf ein WDM-Geräteobjekt gibt, das das Gerät nicht losgelassen wird, wird die Entfernungssperre nicht abgerufen, und das Framework schließt die Anforderung sofort ab.
Nachdem ein Treiber WdfDeviceInitSetRemoveLockOptionsaufgerufen hat, bleibt die Einstellung für die Lebensdauer des Framework-Geräteobjekts wirksam.
Weitere Informationen zum Entfernen von Sperren finden Sie unter Using Remove Locks.
Beispiele
In diesem Codebeispiel wird eine WDF_REMOVE_LOCK_OPTIONS Struktur initialisiert und WdfDeviceInitSetRemoveLockOptionsaufgerufen.
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- | Universal |
Minimale KMDF-Version | 1.11 |
Header- | wdfdevice.h (einschließen Wdf.h) |
Library | Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.) |
IRQL- | <= DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf) |