IRP_MJ_LOCK_CONTROL (FS- und Filtertreiber)
Sendebedingungen
Der E/A-Manager, andere Betriebssystemkomponenten und andere Kernelmodustreiber senden IRP_MJ_LOCK_CONTROL Anforderungen.
Vorgang: Dateisystemtreiber
Der Dateisystemtreiber sollte das Dateiobjekt extrahieren und decodieren, um zu bestimmen, ob das Zielgerätobjekt das Steuergerätobjekt des Dateisystems ist. Wenn ja, sollte der Dateisystemtreiber die IRP nach Bedarf abschließen, ohne die Sperranforderung zu verarbeiten.
Wenn die Anforderung für ein Handle ausgestellt wurde, das eine geöffnete Benutzerdatei darstellt, sollte der Dateisystemtreiber den durch den Nebenfunktionscode angegebenen Vorgang ausführen und die IRP abschließen. Wenn dies nicht der Fall ist, schlägt der Treiber das IRP fehl.
Im Folgenden finden Sie die gültigen Nebenfunktionscodes:
Code | BESCHREIBUNG |
---|---|
IRP_MN_LOCK | Gibt eine Bytebereichssperranforderung an, möglicherweise im Namen einer Benutzermodusanwendung, die die Win32 LockFile-Funktion aufgerufen hat. |
IRP_MN_UNLOCK_ALL | Gibt eine Anforderung an, alle Bytebereichssperren für eine Datei freizugeben, in der Regel, weil das letzte ausstehende Handle für ein Dateiobjekt geschlossen wird. |
IRP_MN_UNLOCK_ALL_BY_KEY | Gibt eine Anforderung zum Freigeben aller Bytebereichssperren mit einem angegebenen Schlüsselwert an. |
IRP_MN_UNLOCK_SINGLE | Gibt eine Anforderung zum Freigeben einer einzelnen Bytebereichssperre an, möglicherweise im Namen einer Benutzermodusanwendung, die die Win32 UnlockFile-Funktion aufgerufen hat. |
Vorgang: Legacy-Dateisystemfiltertreiber
Dateisystemfiltertreiber sollten den IRP nach dem Ausführen einer erforderlichen Verarbeitung an den nächstniedrigen Treiber im Stapel übergeben.
Parameter
Ein Dateisystem oder Filtertreiber ruft IoGetCurrentIrpStackLocation mit dem angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP abzurufen, der in der folgenden Liste als IrpSp angezeigt wird. (Die IRP wird als Irp angezeigt.) Der Treiber kann die Informationen, die in den folgenden Elementen des IRP und des IRP-Stapelspeicherorts festgelegt sind, bei der Verarbeitung einer Sperrsteuerungsanforderung verwenden:
DeviceObject ist ein Zeiger auf das Zielgerätobjekt.
Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die den endgültigen Abschluss status und Informationen zum angeforderten Vorgang empfängt.
IrpSp->FileObject verweist auf das Dateiobjekt, das DeviceObject zugeordnet ist.
Der Parameter IrpSp-FileObject> enthält einen Zeiger auf das RelatedFileObject-Feld, das auch eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist während der Verarbeitung von IRP_MJ_LOCK_CONTROL ungültig und sollte nicht verwendet werden.
IrpSp->Flags können mindestens einen der folgenden Werte aufweisen:
Flag | Bedeutung |
---|---|
SL_EXCLUSIVE_LOCK | Wenn dieses Flag festgelegt ist, wird eine exklusive Bytebereichssperre angefordert. Andernfalls wird eine freigegebene Sperre angefordert. |
SL_FAIL_IMMEDIATELY | Wenn dieses Flag festgelegt ist, sollte die Sperranforderung fehlschlagen, wenn sie nicht sofort erteilt werden kann. |
IrpSp->MajorFunction ist auf IRP_MJ_LOCK_CONTROL festgelegt.
IrpSp->MinorFunction ist auf einen der folgenden Werte festgelegt:
- IRP_MN_LOCK
- IRP_MN_UNLOCK_ALL
- IRP_MN_UNLOCK_ALL_BY_KEY
- IRP_MN_UNLOCK_SINGLE
IrpSp->Parameters.LockControl.ByteOffset ist der Anfangsbyteoffset innerhalb der Datei des zu sperrenden oder entsperrten Bytebereichs.
IrpSp->Parameters.LockControl.Key ist der Schlüssel für die Bytebereichssperre.
IrpSp->Parameters.LockControl.Length ist die Länge des zu sperrenden oder entsperrten Bytebereichs in Bytes.