IoInitializeRemoveLock-Makro (wdm.h)
Die IoInitializeRemoveLock Routine initialisiert eine Remove-Sperre für ein Geräteobjekt.
void IoInitializeRemoveLock(
[in] Lock,
[in] Tag,
[in] Maxmin,
[in] HighWater
);
[in] Lock
Zeiger auf eine vom Aufrufer bereitgestellte IO_REMOVE_LOCK Struktur, die diese Routine mit Informationen über die Sperre initialisiert, einschließlich eines Zählers und eines Synchronisierungsereignisses. Ein Treiberschreiber muss diese Struktur als Teil der Geräteerweiterung des Geräteobjekts zuordnen.
[in] Tag
Gibt ein Tag an, um den Ersteller der Sperre zu identifizieren. Treiberautoren verwenden in der Regel eine 4-stellige Zeichenfolge, die in umgekehrter Reihenfolge angegeben ist, z. B. die Tags, die für ExAllocatePoolWithTagverwendet werden.
Das E/A-System verwendet diesen Parameter, wenn Driver Verifier aktiviert ist. Der Aufrufer sollte immer einen Wert des Nonzero-Tags für diesen Parameter angeben.
[in] Maxmin
Gibt die maximale Anzahl von Minuten an, die diese Sperre gehalten werden soll. Ein Wert von Null bedeutet, dass es keine Grenze gibt. Dieser Wert wird in der Regel beim Debuggen verwendet, um eine Treiberroutine zu identifizieren, die die Sperre länger als erwartet enthält.
Das E/A-System verwendet diesen Parameter, wenn driver Verifier aktiviert ist.
[in] HighWater
Gibt die maximale Anzahl an ausstehenden Käufen an, die für die Sperre zulässig sind. Verwenden Sie "0", um kein Maximum anzugeben. HighWatermark- muss <= 0x7FFFFFFF sein.
Das E/A-System verwendet diesen Parameter, wenn driver Verifier aktiviert ist.
Nichts
Ein Treiber kann eine Entfernungssperre verwenden, um ausstehende E/A-Vorgänge auf einem Gerät nachzuverfolgen und zu bestimmen, wann der Treiber sein Geräteobjekt als Reaktion auf eine IRP_MN_REMOVE_DEVICE Anforderung löschen kann.
Vor dem Aufrufen IoInitializeRemoveLock-sollte ein Treiber eine IO_REMOVE_LOCK Struktur in seiner Geräteerweiterungzuordnen. Ein Treiber ruft in der Regel IoInitializeRemoveLock- in seiner AddDevice--Routine auf, wenn der Treiber die restliche Geräteerweiterung für ein Geräteobjekt initialisiert.
Nachdem die IoReleaseRemoveLockAndWait Routine zurückgegeben wurde, sollte der Treiber das Gerät in einem Zustand berücksichtigen, in dem es entfernt werden kann und keine E/A-Vorgänge ausführen kann. Daher darf der Treiber nicht IoInitializeRemoveLock- aufrufen, um die Entfernungssperre erneut zu initialisieren. Verstoß gegen diese Regel, während der Treiber von Driver Verifier überprüft wird führt zu einer Fehlerüberprüfung.
Da der Treiber die IO_REMOVE_LOCK Struktur in der Geräteerweiterung eines Geräteobjekts speichert, wird die Entfernungssperre gelöscht, wenn der Treiber die Geräteerweiterung im Rahmen der Verarbeitung einer IRP_MN_REMOVE_DEVICE Anforderung löscht.
Weitere Informationen finden Sie unter Using Remove Locks.
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | PASSIVE_LEVEL |